1 /* Polyfill service v3.38.0
 
   2  * For detailed credits and licence information see https://github.com/financial-times/polyfill-service.
 
   4  * Features requested: es6
 
   6  * - _ESAbstract.ArrayCreate, License: CC0 (required by "Array.from", "es6", "Array.of", "_ESAbstract.ArraySpeciesCreate", "Array.prototype.filter", "Symbol", "Map", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.map")
 
   7  * - _ESAbstract.Call, License: CC0 (required by "Array.from", "es6", "Array.prototype.find", "Array.prototype.findIndex", "WeakMap", "WeakSet", "_ESAbstract.GetIterator", "Map", "Set", "_ESAbstract.IteratorClose", "_ESAbstract.IteratorNext", "_ESAbstract.IteratorStep", "Array.prototype.forEach", "Object.setPrototypeOf", "Symbol", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.filter", "Array.prototype.map", "_ESAbstract.ToPrimitive", "_ESAbstract.ToString", "Array.of", "Array.prototype.fill", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith", "_ESAbstract.OrdinaryToPrimitive")
 
   8  * - _ESAbstract.Get, License: CC0 (required by "Array.from", "es6", "Array.prototype.fill", "Array.prototype.find", "Array.prototype.findIndex", "Object.assign", "RegExp.prototype.flags", "WeakMap", "WeakSet", "_ESAbstract.IteratorValue", "Map", "Set", "_ESAbstract.IteratorComplete", "_ESAbstract.IteratorStep", "Array.prototype.forEach", "Object.setPrototypeOf", "Symbol", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "_ESAbstract.IsRegExp", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.startsWith", "Array.prototype.filter", "Array.prototype.map", "_ESAbstract.GetPrototypeFromConstructor", "_ESAbstract.OrdinaryCreateFromConstructor", "_ESAbstract.Construct", "Array.of", "Object.defineProperties", "Object.create", "_ESAbstract.GetIterator", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "_Iterator", "_StringIterator", "_ESAbstract.ArraySpeciesCreate", "_ESAbstract.OrdinaryToPrimitive", "_ESAbstract.ToPrimitive", "_ESAbstract.ToString", "String.prototype.codePointAt", "String.prototype.repeat")
 
   9  * - _ESAbstract.HasProperty, License: CC0 (required by "Array.prototype.copyWithin", "es6", "Array.prototype.forEach", "Object.setPrototypeOf", "Symbol", "Map", "Array.from", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.filter", "Array.prototype.map")
 
  10  * - _ESAbstract.IsArray, License: CC0 (required by "String.fromCodePoint", "es6", "WeakMap", "WeakSet", "Array.isArray", "Map", "Array.from", "Set", "_ESAbstract.ArraySpeciesCreate", "Array.prototype.filter", "Symbol", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.map")
 
  11  * - _ESAbstract.IsCallable, License: CC0 (required by "Array.from", "es6", "Array.prototype.find", "Array.prototype.findIndex", "Map", "Set", "WeakMap", "WeakSet", "_ESAbstract.GetMethod", "Array.prototype.forEach", "Object.setPrototypeOf", "Symbol", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.filter", "Array.prototype.map", "Function.prototype.bind", "_ESAbstract.Construct", "Array.of", "Object.getOwnPropertyDescriptor", "Object.assign", "_ESAbstract.OrdinaryToPrimitive", "_ESAbstract.ToPrimitive", "_ESAbstract.ToString", "Array.prototype.fill", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith")
 
  12  * - _ESAbstract.RequireObjectCoercible, License: CC0 (required by "String.prototype.@@iterator", "es6", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith")
 
  13  * - _ESAbstract.SameValueNonNumber, License: CC0 (required by "_ESAbstract.SameValueZero", "Map", "es6", "Array.from", "Set", "WeakSet", "_ESAbstract.SameValue", "Object.is", "String.fromCodePoint", "WeakMap")
 
  14  * - _ESAbstract.ToBoolean, License: CC0 (required by "Array.prototype.find", "es6", "Array.prototype.findIndex", "RegExp.prototype.flags", "_ESAbstract.IteratorComplete", "Map", "Array.from", "Set", "_ESAbstract.IteratorStep", "WeakMap", "WeakSet", "_ESAbstract.IsRegExp", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.startsWith", "Array.prototype.filter", "Symbol", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables")
 
  15  * - _ESAbstract.ToInteger, License: CC0 (required by "Array.prototype.copyWithin", "es6", "Array.prototype.fill", "Number.isInteger", "Number.isSafeInteger", "String.fromCodePoint", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith", "_ESAbstract.ToLength", "Array.from", "Array.prototype.find", "Array.prototype.findIndex")
 
  16  * - _ESAbstract.ToLength, License: CC0 (required by "Array.from", "es6", "Array.prototype.fill", "Array.prototype.find", "Array.prototype.findIndex", "Array.prototype.forEach", "Object.setPrototypeOf", "Symbol", "Map", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.filter", "Array.prototype.map")
 
  17  * - _ESAbstract.ToNumber, License: CC0 (required by "String.fromCodePoint", "es6")
 
  18  * - _ESAbstract.ToObject, License: CC0 (required by "Array.from", "es6", "Array.prototype.entries", "Array.prototype.fill", "Array.prototype.find", "Array.prototype.findIndex", "Array.prototype.keys", "Array.prototype.values", "Array.prototype.@@iterator", "Object.assign", "Array.prototype.forEach", "Object.setPrototypeOf", "Symbol", "Map", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.filter", "Array.prototype.map", "_ESAbstract.GetV", "_ESAbstract.GetMethod", "_ESAbstract.GetIterator", "WeakMap", "WeakSet", "Object.defineProperties", "Object.create", "_ArrayIterator", "_ESAbstract.OrdinaryCreateFromConstructor", "_ESAbstract.Construct", "Array.of", "_Iterator", "_StringIterator")
 
  19  * - _ESAbstract.GetV, License: CC0 (required by "_ESAbstract.GetMethod", "Array.from", "es6", "Map", "Set", "_ESAbstract.GetIterator", "WeakMap", "WeakSet")
 
  20  * - _ESAbstract.GetMethod, License: CC0 (required by "Array.from", "es6", "Map", "Set", "_ESAbstract.IsConstructor", "Array.of", "_ESAbstract.GetIterator", "WeakMap", "WeakSet", "_ESAbstract.IteratorClose", "_ESAbstract.ToPrimitive", "_ESAbstract.ToString", "Array.prototype.fill", "Array.prototype.find", "Array.prototype.findIndex", "String.prototype.@@iterator", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith")
 
  21  * - _ESAbstract.ToUint32, License: CC0 (required by "Math.clz32", "es6", "Math.imul")
 
  22  * - _ESAbstract.Type, License: CC0 (required by "Map", "es6", "Array.from", "Number.isFinite", "Number.isInteger", "Number.isNaN", "Number.isSafeInteger", "Object.seal", "RegExp.prototype.flags", "WeakMap", "WeakSet", "_ESAbstract.IsConstructor", "Array.of", "_ESAbstract.GetIterator", "Set", "_ESAbstract.IteratorClose", "_ESAbstract.ToString", "Array.prototype.fill", "Array.prototype.find", "Array.prototype.findIndex", "String.prototype.@@iterator", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith", "_ESAbstract.IteratorValue", "_ESAbstract.CreateIterResultObject", "_ESAbstract.IteratorComplete", "_ESAbstract.IteratorStep", "_ESAbstract.IteratorNext", "_ESAbstract.SameValueZero", "Object.create", "Object.setPrototypeOf", "Symbol", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "_ESAbstract.OrdinaryCreateFromConstructor", "_ESAbstract.Construct", "_ESAbstract.SameValue", "Object.is", "String.fromCodePoint", "_ESAbstract.IsRegExp", "_ESAbstract.ToPrimitive", "_ESAbstract.GetPrototypeFromConstructor", "Object.defineProperties", "_Iterator", "_StringIterator", "_ESAbstract.ArraySpeciesCreate", "Array.prototype.filter", "Array.prototype.map", "_ESAbstract.OrdinaryToPrimitive")
 
  23  * - _ESAbstract.GetPrototypeFromConstructor, License: CC0 (required by "_ESAbstract.OrdinaryCreateFromConstructor", "Map", "es6", "Array.from", "Set", "WeakMap", "WeakSet", "_ESAbstract.Construct", "Array.of")
 
  24  * - _ESAbstract.IsConstructor, License: CC0 (required by "Array.from", "es6", "Array.of", "_ESAbstract.Construct", "_ESAbstract.ArraySpeciesCreate", "Array.prototype.filter", "Symbol", "Map", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.map")
 
  25  * - _ESAbstract.IsRegExp, License: CC0 (required by "String.prototype.endsWith", "es6", "String.prototype.includes", "String.prototype.startsWith")
 
  26  * - _ESAbstract.IteratorClose, License: CC0 (required by "Array.from", "es6", "Map", "Set", "WeakMap", "WeakSet")
 
  27  * - _ESAbstract.IteratorComplete, License: CC0 (required by "Map", "es6", "Array.from", "Set", "_ESAbstract.IteratorStep", "WeakMap", "WeakSet")
 
  28  * - _ESAbstract.IteratorNext, License: CC0 (required by "Map", "es6", "Array.from", "Set", "_ESAbstract.IteratorStep", "WeakMap", "WeakSet")
 
  29  * - _ESAbstract.IteratorStep, License: CC0 (required by "Array.from", "es6", "Map", "Set", "WeakMap", "WeakSet")
 
  30  * - _ESAbstract.IteratorValue, License: CC0 (required by "Array.from", "es6", "Map", "Set", "WeakMap", "WeakSet")
 
  31  * - _ESAbstract.OrdinaryToPrimitive, License: CC0 (required by "_ESAbstract.ToPrimitive", "_ESAbstract.ToString", "Array.from", "es6", "Array.of", "Array.prototype.fill", "Array.prototype.find", "Array.prototype.findIndex", "String.prototype.@@iterator", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith")
 
  32  * - _ESAbstract.SameValue, License: CC0 (required by "Object.is", "es6", "String.fromCodePoint", "WeakMap")
 
  33  * - _ESAbstract.SameValueZero, License: CC0 (required by "Map", "es6", "Array.from", "Set", "WeakSet")
 
  34  * - _ESAbstract.ToPrimitive, License: CC0 (required by "_ESAbstract.ToString", "Array.from", "es6", "Array.of", "Array.prototype.fill", "Array.prototype.find", "Array.prototype.findIndex", "String.prototype.@@iterator", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith")
 
  35  * - _ESAbstract.ToString, License: CC0 (required by "Array.from", "es6", "Array.of", "Array.prototype.fill", "Array.prototype.find", "Array.prototype.findIndex", "String.prototype.@@iterator", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith", "Array.prototype.forEach", "Object.setPrototypeOf", "Symbol", "Map", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.filter", "Array.prototype.map")
 
  36  * - _ESAbstract.UTF16Decode, License: CC0 (required by "String.prototype.codePointAt", "es6")
 
  37  * - _ESAbstract.UTF16Encoding, License: CC0 (required by "String.fromCodePoint", "es6")
 
  38  * - _TypedArray, License: MIT (required by "Math.fround", "es6")
 
  39  * - Object.defineProperty, License: CC0 (required by "Function.prototype.name", "es6", "Map", "Array.from", "Number.Epsilon", "Number.MAX_SAFE_INTEGER", "Number.MIN_SAFE_INTEGER", "Object.setPrototypeOf", "RegExp.prototype.flags", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Symbol", "WeakMap", "WeakSet", "_ESAbstract.CreateMethodProperty", "Array.of", "Array.prototype.copyWithin", "Array.prototype.entries", "Array.prototype.fill", "Array.prototype.find", "Array.prototype.findIndex", "Array.prototype.keys", "Array.prototype.values", "Math.acosh", "Math.asinh", "Math.atanh", "Math.cbrt", "Math.clz32", "Math.cosh", "Math.expm1", "Math.fround", "Math.hypot", "Math.imul", "Math.log10", "Math.log1p", "Math.log2", "Math.sign", "Math.sinh", "Math.tanh", "Math.trunc", "Number.isFinite", "Number.isInteger", "Number.isNaN", "Number.isSafeInteger", "Number.parseFloat", "Number.parseInt", "Object.assign", "Object.is", "Object.seal", "String.fromCodePoint", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith", "_ArrayIterator", "_ESAbstract.OrdinaryCreateFromConstructor", "_ESAbstract.Construct", "_StringIterator", "_ESAbstract.CreateDataProperty", "_ESAbstract.CreateDataPropertyOrThrow", "_ESAbstract.CreateIterResultObject", "_Iterator", "Object.defineProperties", "Object.create", "_ESAbstract.GetIterator")
 
  40  * - _ESAbstract.CreateDataProperty, License: CC0 (required by "_ESAbstract.CreateDataPropertyOrThrow", "Array.from", "es6", "Array.of", "_ESAbstract.CreateIterResultObject", "Map", "Set")
 
  41  * - _ESAbstract.CreateDataPropertyOrThrow, License: CC0 (required by "Array.from", "es6", "Array.of", "Array.prototype.filter", "Symbol", "Map", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.map")
 
  42  * - _ESAbstract.CreateIterResultObject, License: CC0 (required by "Map", "es6", "Array.from", "Set")
 
  43  * - _ESAbstract.CreateMethodProperty, License: CC0 (required by "Array.from", "es6", "Array.of", "Array.prototype.@@iterator", "Array.prototype.copyWithin", "Array.prototype.entries", "Array.prototype.fill", "Array.prototype.find", "Array.prototype.findIndex", "Array.prototype.keys", "Array.prototype.values", "Map", "Math.acosh", "Math.asinh", "Math.atanh", "Math.cbrt", "Math.clz32", "Math.cosh", "Math.expm1", "Math.fround", "Math.hypot", "Math.imul", "Math.log10", "Math.log1p", "Math.log2", "Math.sign", "Math.sinh", "Math.tanh", "Math.trunc", "Number.isFinite", "Number.isInteger", "Number.isNaN", "Number.isSafeInteger", "Number.parseFloat", "Number.parseInt", "Object.assign", "Object.is", "Object.seal", "Object.setPrototypeOf", "Set", "String.fromCodePoint", "String.prototype.@@iterator", "String.prototype.codePointAt", "String.prototype.endsWith", "String.prototype.includes", "String.prototype.repeat", "String.prototype.startsWith", "WeakMap", "WeakSet", "Array.isArray", "Object.create", "Symbol", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "_ESAbstract.GetIterator", "_ArrayIterator", "_ESAbstract.OrdinaryCreateFromConstructor", "_ESAbstract.Construct", "Object.getOwnPropertyDescriptor", "Object.keys", "Array.prototype.forEach", "Object.getPrototypeOf", "Object.getOwnPropertyNames", "Array.prototype.filter", "Array.prototype.map", "Object.freeze", "Function.prototype.bind", "Object.defineProperties", "_Iterator", "_StringIterator")
 
  44  * - Array.isArray, License: CC0 (required by "Map", "es6", "Array.from", "Set", "WeakMap")
 
  45  * - Array.prototype.copyWithin, License: MIT (required by "es6")
 
  46  * - Array.prototype.fill, License: CC0 (required by "es6")
 
  47  * - Array.prototype.find, License: CC0 (required by "es6")
 
  48  * - Array.prototype.findIndex, License: CC0 (required by "es6")
 
  49  * - Array.prototype.forEach, License: CC0 (required by "Object.setPrototypeOf", "es6", "Symbol", "Map", "Array.from", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables")
 
  50  * - Function.prototype.bind, License: MIT (required by "_ESAbstract.Construct", "Array.from", "es6", "Array.of", "Object.getOwnPropertyDescriptor", "Object.assign", "Object.setPrototypeOf", "Symbol", "Map", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "_Iterator", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "_StringIterator")
 
  51  * - Math.acosh, License: CC0 (required by "es6")
 
  52  * - Math.asinh, License: CC0 (required by "es6")
 
  53  * - Math.atanh, License: CC0 (required by "es6")
 
  54  * - Math.cbrt, License: CC0 (required by "es6")
 
  55  * - Math.clz32, License: CC0 (required by "es6")
 
  56  * - Math.cosh, License: CC0 (required by "es6")
 
  57  * - Math.expm1, License: CC0 (required by "es6")
 
  58  * - Math.fround, License: CC0 (required by "es6")
 
  59  * - Math.hypot, License: CC0 (required by "es6")
 
  60  * - Math.imul, License: CC0 (required by "es6")
 
  61  * - Math.log10, License: CC0 (required by "es6")
 
  62  * - Math.log1p, License: CC0 (required by "es6")
 
  63  * - Math.log2, License: CC0 (required by "es6")
 
  64  * - Math.sign, License: CC0 (required by "es6")
 
  65  * - Math.sinh, License: CC0 (required by "es6")
 
  66  * - Math.tanh, License: CC0 (required by "es6")
 
  67  * - Math.trunc, License: CC0 (required by "es6")
 
  68  * - Number.isFinite, License: MIT (required by "es6")
 
  69  * - Number.isInteger, License: MIT (required by "es6")
 
  70  * - Number.isNaN, License: MIT (required by "es6")
 
  71  * - Number.isSafeInteger, License: MIT (required by "es6")
 
  72  * - Number.parseFloat, License: MIT (required by "es6")
 
  73  * - Number.parseInt, License: MIT (required by "es6")
 
  74  * - Function.prototype.name, License: MIT (required by "es6")
 
  75  * - Number.Epsilon, License: MIT (required by "es6")
 
  76  * - Number.MAX_SAFE_INTEGER, License: MIT (required by "es6")
 
  77  * - Number.MIN_SAFE_INTEGER, License: MIT (required by "es6")
 
  78  * - Object.freeze, License: CC0 (required by "Symbol", "es6", "Map", "Array.from", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables")
 
  79  * - Object.getOwnPropertyDescriptor, License: CC0 (required by "Object.assign", "es6", "Object.setPrototypeOf", "Symbol", "Map", "Array.from", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Object.defineProperties", "Object.create", "_ESAbstract.GetIterator", "WeakMap", "WeakSet", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "_ESAbstract.OrdinaryCreateFromConstructor", "_ESAbstract.Construct", "Array.of", "_Iterator", "_StringIterator")
 
  80  * - Object.getOwnPropertyNames, License: CC0 (required by "Object.setPrototypeOf", "es6", "Symbol", "Map", "Array.from", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables")
 
  81  * - Object.getPrototypeOf, License: CC0 (required by "Object.setPrototypeOf", "es6", "_ESAbstract.OrdinaryCreateFromConstructor", "Map", "Array.from", "Set", "WeakMap", "WeakSet", "_ESAbstract.Construct", "Array.of")
 
  82  * - Object.is, License: CC0 (required by "es6")
 
  83  * - Object.keys, License: MIT (required by "Object.assign", "es6", "Symbol", "Map", "Array.from", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Object.defineProperties", "Object.create", "Object.setPrototypeOf", "_ESAbstract.GetIterator", "WeakMap", "WeakSet", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "_ESAbstract.OrdinaryCreateFromConstructor", "_ESAbstract.Construct", "Array.of", "_Iterator", "_StringIterator")
 
  84  * - Object.assign, License: CC0 (required by "es6", "_Iterator", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "Array.prototype.@@iterator", "_StringIterator", "String.prototype.@@iterator")
 
  85  * - Object.defineProperties, License: CC0 (required by "Object.create", "Map", "es6", "Array.from", "Object.setPrototypeOf", "Set", "Symbol", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "_ESAbstract.GetIterator", "WeakMap", "WeakSet", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "_ESAbstract.OrdinaryCreateFromConstructor", "_ESAbstract.Construct", "Array.of", "_Iterator", "_StringIterator")
 
  86  * - Object.create, License: CC0 (required by "Map", "es6", "Array.from", "Object.setPrototypeOf", "Set", "Symbol", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "_ESAbstract.GetIterator", "WeakMap", "WeakSet", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "_ESAbstract.OrdinaryCreateFromConstructor", "_ESAbstract.Construct", "Array.of", "_StringIterator")
 
  87  * - _ESAbstract.OrdinaryCreateFromConstructor, License: CC0 (required by "Map", "es6", "Array.from", "Set", "WeakMap", "WeakSet", "_ESAbstract.Construct", "Array.of")
 
  88  * - _ESAbstract.Construct, License: CC0 (required by "Array.from", "es6", "Array.of", "_ESAbstract.ArraySpeciesCreate", "Array.prototype.filter", "Symbol", "Map", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.map")
 
  89  * - _ESAbstract.ArraySpeciesCreate, License: CC0 (required by "Array.prototype.filter", "Symbol", "es6", "Map", "Array.from", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "Array.prototype.map")
 
  90  * - Array.prototype.filter, License: CC0 (required by "Symbol", "es6", "Map", "Array.from", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables")
 
  91  * - Array.prototype.map, License: CC0 (required by "Symbol", "es6", "Map", "Array.from", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables")
 
  92  * - Array.of, License: CC0 (required by "es6")
 
  93  * - Object.seal, License: MIT (required by "es6")
 
  94  * - Object.setPrototypeOf, License: MIT (required by "es6", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "Array.prototype.@@iterator", "_StringIterator", "String.prototype.@@iterator")
 
  95  * - Promise, License: MIT (required by "es6")
 
  96  * - RegExp.prototype.flags, License: MIT (required by "es6")
 
  97  * - String.fromCodePoint, License: MIT (required by "es6")
 
  98  * - String.prototype.codePointAt, License: MIT (required by "es6")
 
  99  * - String.prototype.endsWith, License: CC0 (required by "es6")
 
 100  * - String.prototype.includes, License: CC0 (required by "es6", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "Array.prototype.@@iterator")
 
 101  * - String.prototype.repeat, License: CC0 (required by "es6")
 
 102  * - String.prototype.startsWith, License: CC0 (required by "es6")
 
 103  * - Symbol, License: MIT (required by "es6", "Map", "Array.from", "Set", "Symbol.hasInstance", "Symbol.isConcatSpreadable", "Symbol.iterator", "Array.prototype.@@iterator", "String.prototype.@@iterator", "Symbol.match", "Symbol.replace", "Symbol.search", "Symbol.species", "Symbol.split", "Symbol.toPrimitive", "Symbol.toStringTag", "Symbol.unscopables", "WeakMap", "WeakSet", "_Iterator", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "_StringIterator")
 
 104  * - Symbol.hasInstance, License: MIT (required by "es6")
 
 105  * - Symbol.isConcatSpreadable, License: MIT (required by "es6")
 
 106  * - Symbol.iterator, License: MIT (required by "es6", "Array.from", "Array.prototype.@@iterator", "Map", "Set", "String.prototype.@@iterator", "_ESAbstract.GetIterator", "WeakMap", "WeakSet", "_Iterator", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "_StringIterator")
 
 107  * - _ESAbstract.GetIterator, License: CC0 (required by "Array.from", "es6", "Map", "Set", "WeakMap", "WeakSet")
 
 108  * - Symbol.match, License: MIT (required by "es6")
 
 109  * - Symbol.replace, License: MIT (required by "es6")
 
 110  * - Symbol.search, License: MIT (required by "es6")
 
 111  * - Symbol.species, License: MIT (required by "es6", "Map", "Array.from", "Set")
 
 112  * - Map, License: CC0 (required by "es6", "Array.from")
 
 113  * - Set, License: CC0 (required by "es6", "Array.from")
 
 114  * - Array.from, License: CC0 (required by "es6")
 
 115  * - Symbol.split, License: MIT (required by "es6")
 
 116  * - Symbol.toPrimitive, License: MIT (required by "es6")
 
 117  * - Symbol.toStringTag, License: MIT (required by "es6", "_Iterator", "_ArrayIterator", "Array.prototype.entries", "Array.prototype.keys", "Array.prototype.values", "Array.prototype.@@iterator", "_StringIterator", "String.prototype.@@iterator")
 
 118  * - _Iterator, License: MIT (required by "_ArrayIterator", "Array.prototype.entries", "es6", "Array.prototype.keys", "Array.prototype.values", "Array.prototype.@@iterator", "_StringIterator", "String.prototype.@@iterator")
 
 119  * - _ArrayIterator, License: MIT (required by "Array.prototype.entries", "es6", "Array.prototype.keys", "Array.prototype.values", "Array.prototype.@@iterator")
 
 120  * - Array.prototype.entries, License: CC0 (required by "es6")
 
 121  * - Array.prototype.keys, License: CC0 (required by "es6")
 
 122  * - Array.prototype.values, License: MIT (required by "es6", "Array.prototype.@@iterator")
 
 123  * - Array.prototype.@@iterator, License: CC0 (required by "es6")
 
 124  * - _StringIterator, License: MIT (required by "String.prototype.@@iterator", "es6")
 
 125  * - String.prototype.@@iterator, License: CC0 (required by "es6")
 
 126  * - Symbol.unscopables, License: MIT (required by "es6")
 
 127  * - WeakMap, License: MIT (required by "es6")
 
 128  * - WeakSet, License: MIT (required by "es6") */
 
 130 (function(undefined) {
 
 132 // _ESAbstract.ArrayCreate
 
 133 // 9.4.2.2. ArrayCreate ( length [ , proto ] )
 
 134 function ArrayCreate(length /* [, proto] */) { // eslint-disable-line no-unused-vars
 
 135         // 1. Assert: length is an integer Number ≥ 0.
 
 136         // 2. If length is -0, set length to +0.
 
 137         if (1 / length === -Infinity) {
 
 140         // 3. If length>2^32-1, throw a RangeError exception.
 
 141         if (length > (Math.pow(2, 32) - 1)) {
 
 142                 throw new RangeError('Invalid array length');
 
 144         // 4. If proto is not present, set proto to the intrinsic object %ArrayPrototype%.
 
 145         // 5. Let A be a newly created Array exotic object.
 
 147         // 6. Set A's essential internal methods except for [[DefineOwnProperty]] to the default ordinary object definitions specified in 9.1.
 
 148         // 7. Set A.[[DefineOwnProperty]] as specified in 9.4.2.1.
 
 149         // 8. Set A.[[Prototype]] to proto.
 
 150         // 9. Set A.[[Extensible]] to true.
 
 151         // 10. Perform ! OrdinaryDefineOwnProperty(A, "length", PropertyDescriptor{[[Value]]: length, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false}).
 
 158 /* global IsCallable */
 
 159 // 7.3.12. Call ( F, V [ , argumentsList ] )
 
 160 function Call(F, V /* [, argumentsList] */) { // eslint-disable-line no-unused-vars
 
 161         // 1. If argumentsList is not present, set argumentsList to a new empty List.
 
 162         var argumentsList = arguments.length > 2 ? arguments[2] : [];
 
 163         // 2. If IsCallable(F) is false, throw a TypeError exception.
 
 164         if (IsCallable(F) === false) {
 
 165                 throw new TypeError(Object.prototype.toString.call(F) + 'is not a function.');
 
 167         // 3. Return ? F.[[Call]](V, argumentsList).
 
 168         return F.apply(V, argumentsList);
 
 172 // 7.3.1. Get ( O, P )
 
 173 function Get(O, P) { // eslint-disable-line no-unused-vars
 
 174         // 1. Assert: Type(O) is Object.
 
 175         // 2. Assert: IsPropertyKey(P) is true.
 
 176         // 3. Return ? O.[[Get]](P, O).
 
 180 // _ESAbstract.HasProperty
 
 181 // 7.3.10. HasProperty ( O, P )
 
 182 function HasProperty(O, P) { // eslint-disable-line no-unused-vars
 
 183         // Assert: Type(O) is Object.
 
 184         // Assert: IsPropertyKey(P) is true.
 
 185         // Return ? O.[[HasProperty]](P).
 
 189 // _ESAbstract.IsArray
 
 190 // 7.2.2. IsArray ( argument )
 
 191 function IsArray(argument) { // eslint-disable-line no-unused-vars
 
 192         // 1. If Type(argument) is not Object, return false.
 
 193         // 2. If argument is an Array exotic object, return true.
 
 194         // 3. If argument is a Proxy exotic object, then
 
 195                 // a. If argument.[[ProxyHandler]] is null, throw a TypeError exception.
 
 196                 // b. Let target be argument.[[ProxyTarget]].
 
 197                 // c. Return ? IsArray(target).
 
 200         // Polyfill.io - We can skip all the above steps and check the string returned from Object.prototype.toString().
 
 201         return Object.prototype.toString.call(argument) === '[object Array]';
 
 204 // _ESAbstract.IsCallable
 
 205 // 7.2.3. IsCallable ( argument )
 
 206 function IsCallable(argument) { // eslint-disable-line no-unused-vars
 
 207         // 1. If Type(argument) is not Object, return false.
 
 208         // 2. If argument has a [[Call]] internal method, return true.
 
 211         // Polyfill.io - Only function objects have a [[Call]] internal method. This means we can simplify this function to check that the argument has a type of function.
 
 212         return typeof argument === 'function';
 
 215 // _ESAbstract.RequireObjectCoercible
 
 216 // 7.2.1. RequireObjectCoercible ( argument )
 
 217 // The abstract operation ToObject converts argument to a value of type Object according to Table 12:
 
 218 // Table 12: ToObject Conversions
 
 220 |----------------------------------------------------------------------------------------------------------------------------------------------------|
 
 221 | Argument Type | Result                                                                                                                             |
 
 222 |----------------------------------------------------------------------------------------------------------------------------------------------------|
 
 223 | Undefined     | Throw a TypeError exception.                                                                                                       |
 
 224 | Null          | Throw a TypeError exception.                                                                                                       |
 
 225 | Boolean       | Return argument.                                                                                                                   |
 
 226 | Number        | Return argument.                                                                                                                   |
 
 227 | String        | Return argument.                                                                                                                   |
 
 228 | Symbol        | Return argument.                                                                                                                   |
 
 229 | Object        | Return argument.                                                                                                                   |
 
 230 |----------------------------------------------------------------------------------------------------------------------------------------------------|
 
 232 function RequireObjectCoercible(argument) { // eslint-disable-line no-unused-vars
 
 233         if (argument === null || argument === undefined) {
 
 239 // _ESAbstract.SameValueNonNumber
 
 240 // 7.2.12. SameValueNonNumber ( x, y )
 
 241 function SameValueNonNumber(x, y) { // eslint-disable-line no-unused-vars
 
 242         // 1. Assert: Type(x) is not Number.
 
 243         // 2. Assert: Type(x) is the same as Type(y).
 
 244         // 3. If Type(x) is Undefined, return true.
 
 245         // 4. If Type(x) is Null, return true.
 
 246         // 5. If Type(x) is String, then
 
 247                 // a. If x and y are exactly the same sequence of code units (same length and same code units at corresponding indices), return true; otherwise, return false.
 
 248         // 6. If Type(x) is Boolean, then
 
 249                 // a. If x and y are both true or both false, return true; otherwise, return false.
 
 250         // 7. If Type(x) is Symbol, then
 
 251                 // a. If x and y are both the same Symbol value, return true; otherwise, return false.
 
 252         // 8. If x and y are the same Object value, return true. Otherwise, return false.
 
 254         // Polyfill.io - We can skip all above steps because the === operator does it all for us.
 
 258 // _ESAbstract.ToBoolean
 
 259 // 7.1.2. ToBoolean ( argument )
 
 260 // The abstract operation ToBoolean converts argument to a value of type Boolean according to Table 9:
 
 262 --------------------------------------------------------------------------------------------------------------
 
 263 | Argument Type | Result                                                                                     |
 
 264 --------------------------------------------------------------------------------------------------------------
 
 265 | Undefined     | Return false.                                                                              |
 
 266 | Null          | Return false.                                                                              |
 
 267 | Boolean       | Return argument.                                                                           |
 
 268 | Number        | If argument is +0, -0, or NaN, return false; otherwise return true.                        |
 
 269 | String        | If argument is the empty String (its length is zero), return false; otherwise return true. |
 
 270 | Symbol        | Return true.                                                                               |
 
 271 | Object        | Return true.                                                                               |
 
 272 --------------------------------------------------------------------------------------------------------------
 
 274 function ToBoolean(argument) { // eslint-disable-line no-unused-vars
 
 275         return Boolean(argument);
 
 278 // _ESAbstract.ToInteger
 
 279 // 7.1.4. ToInteger ( argument )
 
 280 function ToInteger(argument) { // eslint-disable-line no-unused-vars
 
 281         // 1. Let number be ? ToNumber(argument).
 
 282         var number = Number(argument);
 
 283         // 2. If number is NaN, return +0.
 
 287         // 3. If number is +0, -0, +∞, or -∞, return number.
 
 288         if (1/number === Infinity || 1/number === -Infinity || number === Infinity || number === -Infinity) {
 
 291         // 4. Return the number value that is the same sign as number and whose magnitude is floor(abs(number)).
 
 292         return ((number < 0) ? -1 : 1) * Math.floor(Math.abs(number));
 
 295 // _ESAbstract.ToLength
 
 296 /* global ToInteger */
 
 297 // 7.1.15. ToLength ( argument )
 
 298 function ToLength(argument) { // eslint-disable-line no-unused-vars
 
 299         // 1. Let len be ? ToInteger(argument).
 
 300         var len = ToInteger(argument);
 
 301         // 2. If len ≤ +0, return +0.
 
 305         // 3. Return min(len, 253-1).
 
 306         return Math.min(len, Math.pow(2, 53) -1);
 
 309 // _ESAbstract.ToNumber
 
 310 // 7.1.3. ToNumber ( argument )
 
 311 function ToNumber(argument) { // eslint-disable-line no-unused-vars
 
 312         return Number(argument);
 
 315 // _ESAbstract.ToObject
 
 316 // 7.1.13 ToObject ( argument )
 
 317 // The abstract operation ToObject converts argument to a value of type Object according to Table 12:
 
 318 // Table 12: ToObject Conversions
 
 320 |----------------------------------------------------------------------------------------------------------------------------------------------------|
 
 321 | Argument Type | Result                                                                                                                             |
 
 322 |----------------------------------------------------------------------------------------------------------------------------------------------------|
 
 323 | Undefined     | Throw a TypeError exception.                                                                                                       |
 
 324 | Null          | Throw a TypeError exception.                                                                                                       |
 
 325 | Boolean       | Return a new Boolean object whose [[BooleanData]] internal slot is set to argument. See 19.3 for a description of Boolean objects. |
 
 326 | Number        | Return a new Number object whose [[NumberData]] internal slot is set to argument. See 20.1 for a description of Number objects.    |
 
 327 | String        | Return a new String object whose [[StringData]] internal slot is set to argument. See 21.1 for a description of String objects.    |
 
 328 | Symbol        | Return a new Symbol object whose [[SymbolData]] internal slot is set to argument. See 19.4 for a description of Symbol objects.    |
 
 329 | Object        | Return argument.                                                                                                                   |
 
 330 |----------------------------------------------------------------------------------------------------------------------------------------------------|
 
 332 function ToObject(argument) { // eslint-disable-line no-unused-vars
 
 333         if (argument === null || argument === undefined) {
 
 336   return Object(argument);
 
 340 /* global ToObject */
 
 342 function GetV(v, p) { // eslint-disable-line no-unused-vars
 
 343         // 1. Assert: IsPropertyKey(P) is true.
 
 344         // 2. Let O be ? ToObject(V).
 
 346         // 3. Return ? O.[[Get]](P, V).
 
 350 // _ESAbstract.GetMethod
 
 351 /* global GetV, IsCallable */
 
 352 // 7.3.9. GetMethod ( V, P )
 
 353 function GetMethod(V, P) { // eslint-disable-line no-unused-vars
 
 354         // 1. Assert: IsPropertyKey(P) is true.
 
 355         // 2. Let func be ? GetV(V, P).
 
 356         var func = GetV(V, P);
 
 357         // 3. If func is either undefined or null, return undefined.
 
 358         if (func === null || func === undefined) {
 
 361         // 4. If IsCallable(func) is false, throw a TypeError exception.
 
 362         if (IsCallable(func) === false) {
 
 363                 throw new TypeError('Method not callable: ' + P);
 
 369 // _ESAbstract.ToUint32
 
 370 // 7.1.6. ToUint32 ( argument )
 
 371 function ToUint32(argument) { // eslint-disable-line no-unused-vars
 
 372         // 1. Let number be ? ToNumber(argument).
 
 373         var number = Number(argument);
 
 374         // 2. If number is NaN, +0, -0, +∞, or -∞, return +0.
 
 375         if (isNaN(number) || 1/number === Infinity || 1/number === -Infinity || number === Infinity || number === -Infinity) {
 
 378         // 3. Let int be the mathematical value that is the same sign as number and whose magnitude is floor(abs(number)).
 
 379         var int = ((number < 0) ? -1 : 1) * Math.floor(Math.abs(number));
 
 380         // 4. Let int32bit be int modulo 2^32.
 
 381         var int32bit = int >>> 0;
 
 382         // 5. Return int32bit.
 
 387 // "Type(x)" is used as shorthand for "the type of x"...
 
 388 function Type(x) { // eslint-disable-line no-unused-vars
 
 401                         // typeof null is 'object'
 
 402                         if (x === null) return 'null';
 
 403                         // Polyfill.io - This is here because a Symbol polyfill will have a typeof `object`.
 
 404                         if ('Symbol' in this && x instanceof this.Symbol) return 'symbol';
 
 409 // _ESAbstract.GetPrototypeFromConstructor
 
 410 /* global Get, Type */
 
 411 // 9.1.14. GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
 
 412 function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { // eslint-disable-line no-unused-vars
 
 413         // 1. Assert: intrinsicDefaultProto is a String value that is this specification's name of an intrinsic object. The corresponding object must be an intrinsic that is intended to be used as the [[Prototype]] value of an object.
 
 414         // 2. Assert: IsCallable(constructor) is true.
 
 415         // 3. Let proto be ? Get(constructor, "prototype").
 
 416         var proto = Get(constructor, "prototype");
 
 417         // 4. If Type(proto) is not Object, then
 
 418         if (Type(proto) !== 'object') {
 
 419                 // a. Let realm be ? GetFunctionRealm(constructor).
 
 420                 // b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
 
 421                 proto = intrinsicDefaultProto;
 
 427 // _ESAbstract.IsConstructor
 
 429 // 7.2.4. IsConstructor ( argument )
 
 430 function IsConstructor(argument) { // eslint-disable-line no-unused-vars
 
 431         // 1. If Type(argument) is not Object, return false.
 
 432         if (Type(argument) !== 'object') {
 
 435         // 2. If argument has a [[Construct]] internal method, return true.
 
 438         // Polyfill.io - `new argument` is the only way  to truly test if a function is a constructor.
 
 439         // We choose to not use`new argument` because the argument could have side effects when called.
 
 440         // Instead we check to see if the argument is a function and if it has a prototype.
 
 441         // Arrow functions do not have a [[Construct]] internal method, nor do they have a prototype.
 
 442         return typeof argument === 'function' && !!argument.prototype;
 
 445 // _ESAbstract.IsRegExp
 
 446 /* global Type, Get, ToBoolean */
 
 447 // 7.2.8. IsRegExp ( argument )
 
 448 function IsRegExp(argument) { // eslint-disable-line no-unused-vars
 
 449         // 1. If Type(argument) is not Object, return false.
 
 450         if (Type(argument) !== 'object') {
 
 453         // 2. Let matcher be ? Get(argument, @@match).
 
 454         var matcher = 'Symbol' in this && 'match' in this.Symbol ? Get(argument, this.Symbol.match) : undefined;
 
 455         // 3. If matcher is not undefined, return ToBoolean(matcher).
 
 456         if (matcher !== undefined) {
 
 457                 return ToBoolean(matcher);
 
 459         // 4. If argument has a [[RegExpMatcher]] internal slot, return true.
 
 461                 var lastIndex = argument.lastIndex;
 
 462                 argument.lastIndex = 0;
 
 463                 RegExp.prototype.exec.call(argument);
 
 465         } catch (e) {} finally {
 
 466                 argument.lastIndex = lastIndex;
 
 472 // _ESAbstract.IteratorClose
 
 473 /* global GetMethod, Type, Call */
 
 474 // 7.4.6. IteratorClose ( iteratorRecord, completion )
 
 475 function IteratorClose(iteratorRecord, completion) { // eslint-disable-line no-unused-vars
 
 476         // 1. Assert: Type(iteratorRecord.[[Iterator]]) is Object.
 
 477         if (Type(iteratorRecord['[[Iterator]]']) !== 'object') {
 
 478                 throw new Error(Object.prototype.toString.call(iteratorRecord['[[Iterator]]']) + 'is not an Object.');
 
 480         // 2. Assert: completion is a Completion Record.
 
 481         // Polyfill.io - Ignoring this step as there is no way to check if something is a Completion Record in userland JavaScript.
 
 483         // 3. Let iterator be iteratorRecord.[[Iterator]].
 
 484         var iterator = iteratorRecord['[[Iterator]]'];
 
 485         // 4. Let return be ? GetMethod(iterator, "return").
 
 486         // Polyfill.io - We name it  returnMethod because return is a keyword and can not be used as an identifier (E.G. variable name, function name etc).
 
 487         var returnMethod = GetMethod(iterator, "return");
 
 488         // 5. If return is undefined, return Completion(completion).
 
 489         if (returnMethod === undefined) {
 
 492         // 6. Let innerResult be Call(return, iterator, « »).
 
 494                 var innerResult = Call(returnMethod, iterator);
 
 496                 var innerException = error;
 
 498         // 7. If completion.[[Type]] is throw, return Completion(completion).
 
 502         // 8. If innerResult.[[Type]] is throw, return Completion(innerResult).
 
 503         if (innerException) {
 
 504                 throw innerException;
 
 506         // 9. If Type(innerResult.[[Value]]) is not Object, throw a TypeError exception.
 
 507         if (Type(innerResult) !== 'object') {
 
 508                 throw new TypeError("Iterator's return method returned a non-object.");
 
 510         // 10. Return Completion(completion).
 
 514 // _ESAbstract.IteratorComplete
 
 515 /* global Type, ToBoolean, Get */
 
 516 // 7.4.3 IteratorComplete ( iterResult )
 
 517 function IteratorComplete(iterResult) { // eslint-disable-line no-unused-vars
 
 518         // 1. Assert: Type(iterResult) is Object.
 
 519         if (Type(iterResult) !== 'object') {
 
 520                 throw new Error(Object.prototype.toString.call(iterResult) + 'is not an Object.');
 
 522         // 2. Return ToBoolean(? Get(iterResult, "done")).
 
 523         return ToBoolean(Get(iterResult, "done"));
 
 526 // _ESAbstract.IteratorNext
 
 527 /* global Call, Type */
 
 528 // 7.4.2. IteratorNext ( iteratorRecord [ , value ] )
 
 529 function IteratorNext(iteratorRecord /* [, value] */) { // eslint-disable-line no-unused-vars
 
 530         // 1. If value is not present, then
 
 531         if (arguments.length < 2) {
 
 532                 // a. Let result be ? Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]], « »).
 
 533                 var result = Call(iteratorRecord['[[NextMethod]]'], iteratorRecord['[[Iterator]]']);
 
 536                 // a. Let result be ? Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]], « value »).
 
 537                 result = Call(iteratorRecord['[[NextMethod]]'], iteratorRecord['[[Iterator]]'], [arguments[1]]);
 
 539         // 3. If Type(result) is not Object, throw a TypeError exception.
 
 540         if (Type(result) !== 'object') {
 
 541                 throw new TypeError('bad iterator');
 
 547 // _ESAbstract.IteratorStep
 
 548 /* global IteratorNext, IteratorComplete */
 
 549 // 7.4.5. IteratorStep ( iteratorRecord )
 
 550 function IteratorStep(iteratorRecord) { // eslint-disable-line no-unused-vars
 
 551         // 1. Let result be ? IteratorNext(iteratorRecord).
 
 552         var result = IteratorNext(iteratorRecord);
 
 553         // 2. Let done be ? IteratorComplete(result).
 
 554         var done = IteratorComplete(result);
 
 555         // 3. If done is true, return false.
 
 563 // _ESAbstract.IteratorValue
 
 564 /* global Type, Get */
 
 565 // 7.4.4 IteratorValue ( iterResult )
 
 566 function IteratorValue(iterResult) { // eslint-disable-line no-unused-vars
 
 567         // Assert: Type(iterResult) is Object.
 
 568         if (Type(iterResult) !== 'object') {
 
 569                 throw new Error(Object.prototype.toString.call(iterResult) + 'is not an Object.');
 
 571         // Return ? Get(iterResult, "value").
 
 572         return Get(iterResult, "value");
 
 575 // _ESAbstract.OrdinaryToPrimitive
 
 576 /* global Get, IsCallable, Call, Type */
 
 577 // 7.1.1.1. OrdinaryToPrimitive ( O, hint )
 
 578 function OrdinaryToPrimitive(O, hint) { // eslint-disable-line no-unused-vars
 
 579         // 1. Assert: Type(O) is Object.
 
 580         // 2. Assert: Type(hint) is String and its value is either "string" or "number".
 
 581         // 3. If hint is "string", then
 
 582         if (hint === 'string') {
 
 583                 // a. Let methodNames be « "toString", "valueOf" ».
 
 584                 var methodNames = ['toString', 'valueOf'];
 
 587                 // a. Let methodNames be « "valueOf", "toString" ».
 
 588                 methodNames = ['valueOf', 'toString'];
 
 590         // 5. For each name in methodNames in List order, do
 
 591         for (var i = 0; i < methodNames.length; ++i) {
 
 592                 var name = methodNames[i];
 
 593                 // a. Let method be ? Get(O, name).
 
 594                 var method = Get(O, name);
 
 595                 // b. If IsCallable(method) is true, then
 
 596                 if (IsCallable(method)) {
 
 597                         // i. Let result be ? Call(method, O).
 
 598                         var result = Call(method, O);
 
 599                         // ii. If Type(result) is not Object, return result.
 
 600                         if (Type(result) !== 'object') {
 
 605         // 6. Throw a TypeError exception.
 
 606         throw new TypeError('Cannot convert to primitive.');
 
 609 // _ESAbstract.SameValue
 
 610 /* global Type, SameValueNonNumber */
 
 611 // 7.2.10. SameValue ( x, y )
 
 612 function SameValue(x, y) { // eslint-disable-line no-unused-vars
 
 613         // 1. If Type(x) is different from Type(y), return false.
 
 614         if (Type(x) !== Type(y)) {
 
 617         // 2. If Type(x) is Number, then
 
 618         if (Type(x) === 'number') {
 
 619                 // a. If x is NaN and y is NaN, return true.
 
 620                 if (isNaN(x) && isNaN(y)) {
 
 623                 // Polyfill.io - 0 === -0 is true, but they are not the same value.
 
 624                 // b. If x is +0 and y is -0, return false.
 
 625                 // c. If x is -0 and y is +0, return false.
 
 626                 if (x === 0 && y === 0 && 1/x !== 1/y) {
 
 629                 // d. If x is the same Number value as y, return true.
 
 636         // 3. Return SameValueNonNumber(x, y).
 
 637         return SameValueNonNumber(x, y);
 
 640 // _ESAbstract.SameValueZero
 
 641 /* global Type, SameValueNonNumber */
 
 642 // 7.2.11. SameValueZero ( x, y )
 
 643 function SameValueZero (x, y) { // eslint-disable-line no-unused-vars
 
 644         // 1. If Type(x) is different from Type(y), return false.
 
 645         if (Type(x) !== Type(y)) {
 
 648         // 2. If Type(x) is Number, then
 
 649         if (Type(x) === 'number') {
 
 650                 // a. If x is NaN and y is NaN, return true.
 
 651                 if (isNaN(x) && isNaN(y)) {
 
 654                 // b. If x is +0 and y is -0, return true.
 
 655                 if (1/x === Infinity && 1/y === -Infinity) {
 
 658                 // c. If x is -0 and y is +0, return true.
 
 659                 if (1/x === -Infinity && 1/y === Infinity) {
 
 662                 // d. If x is the same Number value as y, return true.
 
 669         // 3. Return SameValueNonNumber(x, y).
 
 670         return SameValueNonNumber(x, y);
 
 673 // _ESAbstract.ToPrimitive
 
 674 /* global Type, GetMethod, Call, OrdinaryToPrimitive */
 
 675 // 7.1.1. ToPrimitive ( input [ , PreferredType ] )
 
 676 function ToPrimitive(input /* [, PreferredType] */) { // eslint-disable-line no-unused-vars
 
 677         var PreferredType = arguments.length > 1 ? arguments[1] : undefined;
 
 678         // 1. Assert: input is an ECMAScript language value.
 
 679         // 2. If Type(input) is Object, then
 
 680         if (Type(input) === 'object') {
 
 681                 // a. If PreferredType is not present, let hint be "default".
 
 682                 if (arguments.length < 2) {
 
 683                         var hint = 'default';
 
 684                         // b. Else if PreferredType is hint String, let hint be "string".
 
 685                 } else if (PreferredType === String) {
 
 687                         // c. Else PreferredType is hint Number, let hint be "number".
 
 688                 } else if (PreferredType === Number) {
 
 691                 // d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
 
 692                 var exoticToPrim = typeof this.Symbol === 'function' && typeof this.Symbol.toPrimitive === 'symbol' ? GetMethod(input, this.Symbol.toPrimitive) : undefined;
 
 693                 // e. If exoticToPrim is not undefined, then
 
 694                 if (exoticToPrim !== undefined) {
 
 695                         // i. Let result be ? Call(exoticToPrim, input, « hint »).
 
 696                         var result = Call(exoticToPrim, input, [hint]);
 
 697                         // ii. If Type(result) is not Object, return result.
 
 698                         if (Type(result) !== 'object') {
 
 701                         // iii. Throw a TypeError exception.
 
 702                         throw new TypeError('Cannot convert exotic object to primitive.');
 
 704                 // f. If hint is "default", set hint to "number".
 
 705                 if (hint === 'default') {
 
 708                 // g. Return ? OrdinaryToPrimitive(input, hint).
 
 709                 return OrdinaryToPrimitive(input, hint);
 
 715 // _ESAbstract.ToString
 
 716 /* global Type, ToPrimitive */
 
 717 // 7.1.12. ToString ( argument )
 
 718 // The abstract operation ToString converts argument to a value of type String according to Table 11:
 
 719 // Table 11: ToString Conversions
 
 721 |---------------|--------------------------------------------------------|
 
 722 | Argument Type | Result                                                 |
 
 723 |---------------|--------------------------------------------------------|
 
 724 | Undefined     | Return "undefined".                                    |
 
 725 |---------------|--------------------------------------------------------|
 
 726 | Null          | Return "null".                                         |
 
 727 |---------------|--------------------------------------------------------|
 
 728 | Boolean       | If argument is true, return "true".                    |
 
 729 |               | If argument is false, return "false".                  |
 
 730 |---------------|--------------------------------------------------------|
 
 731 | Number        | Return NumberToString(argument).                       |
 
 732 |---------------|--------------------------------------------------------|
 
 733 | String        | Return argument.                                       |
 
 734 |---------------|--------------------------------------------------------|
 
 735 | Symbol        | Throw a TypeError exception.                           |
 
 736 |---------------|--------------------------------------------------------|
 
 737 | Object        | Apply the following steps:                             |
 
 738 |               | Let primValue be ? ToPrimitive(argument, hint String). |
 
 739 |               | Return ? ToString(primValue).                          |
 
 740 |---------------|--------------------------------------------------------|
 
 742 function ToString(argument) { // eslint-disable-line no-unused-vars
 
 743         switch(Type(argument)) {
 
 745                         throw new TypeError('Cannot convert a Symbol value to a string');
 
 748                         var primValue = ToPrimitive(argument, 'string');
 
 749                         return ToString(primValue);
 
 751                         return String(argument);
 
 755 // _ESAbstract.UTF16Decode
 
 756 // 10.1.2. Static Semantics: UTF16Decode( lead, trail )
 
 757 function UTF16Decode(lead, trail) { // eslint-disable-line no-unused-vars
 
 758         // 1. Assert: 0xD800 ≤ lead ≤ 0xDBFF and 0xDC00 ≤ trail ≤ 0xDFFF.
 
 759         // 2. Let cp be (lead - 0xD800) × 0x400 + (trail - 0xDC00) + 0x10000.
 
 760         var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;
 
 761         // 3. Return the code point cp.
 
 765 // _ESAbstract.UTF16Encoding
 
 766 // 10.1.1. Static Semantics: UTF16Encoding ( cp )
 
 767 function UTF16Encoding(cp) { // eslint-disable-line no-unused-vars
 
 768         // 1. Assert: 0 ≤ cp ≤ 0x10FFFF.
 
 769         // 2. If cp ≤ 0xFFFF, return cp.
 
 773                 // 3. Let cu1 be floor((cp - 0x10000) / 0x400) + 0xD800.
 
 774                 var cu1 = Math.floor((cp - 0x10000) / 0x400) + 0xD800;
 
 775                 // 4. Let cu2 be ((cp - 0x10000) modulo 0x400) + 0xDC00.
 
 776                 var cu2 = ((cp - 0x10000) % 0x400) + 0xDC00;
 
 777                 // 5. Return the code unit sequence consisting of cu1 followed by cu2.
 
 784  Copyright (c) 2010, Linden Research, Inc.
 
 785  Copyright (c) 2014, Joshua Bell
 
 787  Permission is hereby granted, free of charge, to any person obtaining a copy
 
 788  of this software and associated documentation files (the "Software"), to deal
 
 789  in the Software without restriction, including without limitation the rights
 
 790  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
 791  copies of the Software, and to permit persons to whom the Software is
 
 792  furnished to do so, subject to the following conditions:
 
 794  The above copyright notice and this permission notice shall be included in
 
 795  all copies or substantial portions of the Software.
 
 797  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
 798  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
 799  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
 800  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
 801  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
 802  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 
 807 // Original can be found at:
 
 808 //   https://bitbucket.org/lindenlab/llsd
 
 809 // Modifications by Joshua Bell inexorabletash@gmail.com
 
 810 //   https://github.com/inexorabletash/polyfill
 
 812 // ES3/ES5 implementation of the Krhonos Typed Array Specification
 
 813 //   Ref: http://www.khronos.org/registry/typedarray/specs/latest/
 
 817 //  * Allows typed_array.get/set() as alias for subscripts (typed_array[])
 
 818 //  * Gradually migrating structure from Khronos spec to ES2015 spec
 
 821 //  * Beyond 10000 or so entries, polyfilled array accessors (ta[0],
 
 822 //    etc) become memory-prohibitive, so array creation will fail. Set
 
 823 //    self.TYPED_ARRAY_POLYFILL_NO_ARRAY_ACCESSORS=true to disable
 
 824 //    creation of accessors. Your code will need to use the
 
 825 //    non-standard get()/set() instead, and will need to add those to
 
 826 //    native arrays for interop.
 
 829   var undefined = (void 0); // Paranoia
 
 831   // Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to
 
 832   // create, and consume so much memory, that the browser appears frozen.
 
 833   var MAX_ARRAY_LENGTH = 1e5;
 
 835   // Approximations of internal ECMAScript conversion functions
 
 838     case 'undefined': return 'undefined';
 
 839     case 'boolean': return 'boolean';
 
 840     case 'number': return 'number';
 
 841     case 'string': return 'string';
 
 842     default: return v === null ? 'null' : 'object';
 
 846   // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues:
 
 847   function Class(v) { return Object.prototype.toString.call(v).replace(/^\[object *|\]$/g, ''); }
 
 848   function IsCallable(o) { return typeof o === 'function'; }
 
 849   function ToObject(v) {
 
 850     if (v === null || v === undefined) throw TypeError();
 
 853   function ToInt32(v) { return v >> 0; }
 
 854   function ToUint32(v) { return v >>> 0; }
 
 856   // Snapshot intrinsics
 
 866   // emulate ES5 getter/setter API using legacy APIs
 
 867   // http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx
 
 868   // (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but
 
 869   // note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless)
 
 872     var orig = Object.defineProperty;
 
 873     var dom_only = !(function(){try{return Object.defineProperty({},'x',{});}catch(_){return false;}}());
 
 875     if (!orig || dom_only) {
 
 876       Object.defineProperty = function (o, prop, desc) {
 
 877         // In IE8 try built-in implementation for defining properties on DOM prototypes.
 
 879           try { return orig(o, prop, desc); } catch (_) {}
 
 881           throw TypeError('Object.defineProperty called on non-object');
 
 882         if (Object.prototype.__defineGetter__ && ('get' in desc))
 
 883           Object.prototype.__defineGetter__.call(o, prop, desc.get);
 
 884         if (Object.prototype.__defineSetter__ && ('set' in desc))
 
 885           Object.prototype.__defineSetter__.call(o, prop, desc.set);
 
 887           o[prop] = desc.value;
 
 893   // ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value)
 
 894   // for index in 0 ... obj.length
 
 895   function makeArrayAccessors(obj) {
 
 896     if ('TYPED_ARRAY_POLYFILL_NO_ARRAY_ACCESSORS' in global)
 
 899     if (obj.length > MAX_ARRAY_LENGTH) throw RangeError('Array too large for polyfill');
 
 901     function makeArrayAccessor(index) {
 
 902       Object.defineProperty(obj, index, {
 
 903         'get': function() { return obj._getter(index); },
 
 904         'set': function(v) { obj._setter(index, v); },
 
 911     for (i = 0; i < obj.length; i += 1) {
 
 912       makeArrayAccessor(i);
 
 916   // Internal conversion functions:
 
 917   //    pack<Type>()   - take a number (interpreted as Type), output a byte array
 
 918   //    unpack<Type>() - take a byte array, output a Type-like number
 
 920   function as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; }
 
 921   function as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; }
 
 923   function packI8(n) { return [n & 0xff]; }
 
 924   function unpackI8(bytes) { return as_signed(bytes[0], 8); }
 
 926   function packU8(n) { return [n & 0xff]; }
 
 927   function unpackU8(bytes) { return as_unsigned(bytes[0], 8); }
 
 929   function packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; }
 
 931   function packI16(n) { return [n & 0xff, (n >> 8) & 0xff]; }
 
 932   function unpackI16(bytes) { return as_signed(bytes[1] << 8 | bytes[0], 16); }
 
 934   function packU16(n) { return [n & 0xff, (n >> 8) & 0xff]; }
 
 935   function unpackU16(bytes) { return as_unsigned(bytes[1] << 8 | bytes[0], 16); }
 
 937   function packI32(n) { return [n & 0xff, (n >> 8) & 0xff, (n >> 16) & 0xff, (n >> 24) & 0xff]; }
 
 938   function unpackI32(bytes) { return as_signed(bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0], 32); }
 
 940   function packU32(n) { return [n & 0xff, (n >> 8) & 0xff, (n >> 16) & 0xff, (n >> 24) & 0xff]; }
 
 941   function unpackU32(bytes) { return as_unsigned(bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0], 32); }
 
 943   function packIEEE754(v, ebits, fbits) {
 
 945     var bias = (1 << (ebits - 1)) - 1;
 
 947     function roundToEven(n) {
 
 948       var w = floor(n), f = n - w;
 
 953       return w % 2 ? w + 1 : w;
 
 956     // Compute sign, exponent, fraction
 
 960       // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping
 
 961       e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0;
 
 962     } else if (v === Infinity || v === -Infinity) {
 
 963       e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0;
 
 964     } else if (v === 0) {
 
 965       e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0;
 
 970       if (v >= pow(2, 1 - bias)) {
 
 972         e = min(floor(log(v) / LN2), 1023);
 
 973         var significand = v / pow(2, e);
 
 974         if (significand < 1) {
 
 978         if (significand >= 2) {
 
 982         var d = pow(2, fbits);
 
 983         f = roundToEven(significand * d) - d;
 
 991           e = (1 << ebits) - 1;
 
 997         f = roundToEven(v / pow(2, 1 - bias - fbits));
 
1001     // Pack sign, exponent, fraction
 
1003     for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); }
 
1004     for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); }
 
1005     bits.push(s ? 1 : 0);
 
1007     var str = bits.join('');
 
1011     while (str.length) {
 
1012       bytes.unshift(parseInt(str.substring(0, 8), 2));
 
1013       str = str.substring(8);
 
1018   function unpackIEEE754(bytes, ebits, fbits) {
 
1020     var bits = [], i, j, b, str,
 
1023     for (i = 0; i < bytes.length; ++i) {
 
1025       for (j = 8; j; j -= 1) {
 
1026         bits.push(b % 2 ? 1 : 0); b = b >> 1;
 
1030     str = bits.join('');
 
1032     // Unpack sign, exponent, fraction
 
1033     bias = (1 << (ebits - 1)) - 1;
 
1034     s = parseInt(str.substring(0, 1), 2) ? -1 : 1;
 
1035     e = parseInt(str.substring(1, 1 + ebits), 2);
 
1036     f = parseInt(str.substring(1 + ebits), 2);
 
1039     if (e === (1 << ebits) - 1) {
 
1040       return f !== 0 ? NaN : s * Infinity;
 
1043       return s * pow(2, e - bias) * (1 + f / pow(2, fbits));
 
1044     } else if (f !== 0) {
 
1046       return s * pow(2, -(bias - 1)) * (f / pow(2, fbits));
 
1048       return s < 0 ? -0 : 0;
 
1052   function unpackF64(b) { return unpackIEEE754(b, 11, 52); }
 
1053   function packF64(v) { return packIEEE754(v, 11, 52); }
 
1054   function unpackF32(b) { return unpackIEEE754(b, 8, 23); }
 
1055   function packF32(v) { return packIEEE754(v, 8, 23); }
 
1058   // 3 The ArrayBuffer Type
 
1063     function ArrayBuffer(length) {
 
1064       length = ToInt32(length);
 
1065       if (length < 0) throw RangeError('ArrayBuffer size is not a small enough positive integer.');
 
1066       Object.defineProperty(this, 'byteLength', {value: length});
 
1067       Object.defineProperty(this, '_bytes', {value: Array(length)});
 
1069       for (var i = 0; i < length; i += 1)
 
1073     global.ArrayBuffer = global.ArrayBuffer || ArrayBuffer;
 
1076     // 5 The Typed Array View Types
 
1079     function $TypedArray$() {
 
1081       // %TypedArray% ( length )
 
1082       if (!arguments.length || typeof arguments[0] !== 'object') {
 
1083         return (function(length) {
 
1084           length = ToInt32(length);
 
1085           if (length < 0) throw RangeError('length is not a small enough positive integer.');
 
1086           Object.defineProperty(this, 'length', {value: length});
 
1087           Object.defineProperty(this, 'byteLength', {value: length * this.BYTES_PER_ELEMENT});
 
1088           Object.defineProperty(this, 'buffer', {value: new ArrayBuffer(this.byteLength)});
 
1089           Object.defineProperty(this, 'byteOffset', {value: 0});
 
1091          }).apply(this, arguments);
 
1094       // %TypedArray% ( typedArray )
 
1095       if (arguments.length >= 1 &&
 
1096           Type(arguments[0]) === 'object' &&
 
1097           arguments[0] instanceof $TypedArray$) {
 
1098         return (function(typedArray){
 
1099           if (this.constructor !== typedArray.constructor) throw TypeError();
 
1101           var byteLength = typedArray.length * this.BYTES_PER_ELEMENT;
 
1102           Object.defineProperty(this, 'buffer', {value: new ArrayBuffer(byteLength)});
 
1103           Object.defineProperty(this, 'byteLength', {value: byteLength});
 
1104           Object.defineProperty(this, 'byteOffset', {value: 0});
 
1105           Object.defineProperty(this, 'length', {value: typedArray.length});
 
1107           for (var i = 0; i < this.length; i += 1)
 
1108             this._setter(i, typedArray._getter(i));
 
1110         }).apply(this, arguments);
 
1113       // %TypedArray% ( array )
 
1114       if (arguments.length >= 1 &&
 
1115           Type(arguments[0]) === 'object' &&
 
1116           !(arguments[0] instanceof $TypedArray$) &&
 
1117           !(arguments[0] instanceof ArrayBuffer || Class(arguments[0]) === 'ArrayBuffer')) {
 
1118         return (function(array) {
 
1120           var byteLength = array.length * this.BYTES_PER_ELEMENT;
 
1121           Object.defineProperty(this, 'buffer', {value: new ArrayBuffer(byteLength)});
 
1122           Object.defineProperty(this, 'byteLength', {value: byteLength});
 
1123           Object.defineProperty(this, 'byteOffset', {value: 0});
 
1124           Object.defineProperty(this, 'length', {value: array.length});
 
1126           for (var i = 0; i < this.length; i += 1) {
 
1128             this._setter(i, Number(s));
 
1130         }).apply(this, arguments);
 
1133       // %TypedArray% ( buffer, byteOffset=0, length=undefined )
 
1134       if (arguments.length >= 1 &&
 
1135           Type(arguments[0]) === 'object' &&
 
1136           (arguments[0] instanceof ArrayBuffer || Class(arguments[0]) === 'ArrayBuffer')) {
 
1137         return (function(buffer, byteOffset, length) {
 
1139           byteOffset = ToUint32(byteOffset);
 
1140           if (byteOffset > buffer.byteLength)
 
1141             throw RangeError('byteOffset out of range');
 
1143           // The given byteOffset must be a multiple of the element
 
1144           // size of the specific type, otherwise an exception is raised.
 
1145           if (byteOffset % this.BYTES_PER_ELEMENT)
 
1146             throw RangeError('buffer length minus the byteOffset is not a multiple of the element size.');
 
1148           if (length === undefined) {
 
1149             var byteLength = buffer.byteLength - byteOffset;
 
1150             if (byteLength % this.BYTES_PER_ELEMENT)
 
1151               throw RangeError('length of buffer minus byteOffset not a multiple of the element size');
 
1152             length = byteLength / this.BYTES_PER_ELEMENT;
 
1155             length = ToUint32(length);
 
1156             byteLength = length * this.BYTES_PER_ELEMENT;
 
1159           if ((byteOffset + byteLength) > buffer.byteLength)
 
1160             throw RangeError('byteOffset and length reference an area beyond the end of the buffer');
 
1162           Object.defineProperty(this, 'buffer', {value: buffer});
 
1163           Object.defineProperty(this, 'byteLength', {value: byteLength});
 
1164           Object.defineProperty(this, 'byteOffset', {value: byteOffset});
 
1165           Object.defineProperty(this, 'length', {value: length});
 
1167         }).apply(this, arguments);
 
1170       // %TypedArray% ( all other argument combinations )
 
1174     // Properties of the %TypedArray Instrinsic Object
 
1176     // %TypedArray%.from ( source , mapfn=undefined, thisArg=undefined )
 
1177     Object.defineProperty($TypedArray$, 'from', {value: function(iterable) {
 
1178       return new this(iterable);
 
1181     // %TypedArray%.of ( ...items )
 
1182     Object.defineProperty($TypedArray$, 'of', {value: function(/*...items*/) {
 
1183       return new this(arguments);
 
1186     // %TypedArray%.prototype
 
1187     var $TypedArrayPrototype$ = {};
 
1188     $TypedArray$.prototype = $TypedArrayPrototype$;
 
1190     // WebIDL: getter type (unsigned long index);
 
1191     Object.defineProperty($TypedArray$.prototype, '_getter', {value: function(index) {
 
1192       if (arguments.length < 1) throw SyntaxError('Not enough arguments');
 
1194       index = ToUint32(index);
 
1195       if (index >= this.length)
 
1198       var bytes = [], i, o;
 
1199       for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;
 
1200            i < this.BYTES_PER_ELEMENT;
 
1202         bytes.push(this.buffer._bytes[o]);
 
1204       return this._unpack(bytes);
 
1207     // NONSTANDARD: convenience alias for getter: type get(unsigned long index);
 
1208     Object.defineProperty($TypedArray$.prototype, 'get', {value: $TypedArray$.prototype._getter});
 
1210     // WebIDL: setter void (unsigned long index, type value);
 
1211     Object.defineProperty($TypedArray$.prototype, '_setter', {value: function(index, value) {
 
1212       if (arguments.length < 2) throw SyntaxError('Not enough arguments');
 
1214       index = ToUint32(index);
 
1215       if (index >= this.length)
 
1218       var bytes = this._pack(value), i, o;
 
1219       for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;
 
1220            i < this.BYTES_PER_ELEMENT;
 
1222         this.buffer._bytes[o] = bytes[i];
 
1226     // get %TypedArray%.prototype.buffer
 
1227     // get %TypedArray%.prototype.byteLength
 
1228     // get %TypedArray%.prototype.byteOffset
 
1229     // -- applied directly to the object in the constructor
 
1231     // %TypedArray%.prototype.constructor
 
1232     Object.defineProperty($TypedArray$.prototype, 'constructor', {value: $TypedArray$});
 
1234     // %TypedArray%.prototype.copyWithin (target, start, end = this.length )
 
1235     Object.defineProperty($TypedArray$.prototype, 'copyWithin', {value: function(target, start) {
 
1236       var end = arguments[2];
 
1238       var o = ToObject(this);
 
1239       var lenVal = o.length;
 
1240       var len = ToUint32(lenVal);
 
1242       var relativeTarget = ToInt32(target);
 
1244       if (relativeTarget < 0)
 
1245         to = max(len + relativeTarget, 0);
 
1247         to = min(relativeTarget, len);
 
1248       var relativeStart = ToInt32(start);
 
1250       if (relativeStart < 0)
 
1251         from = max(len + relativeStart, 0);
 
1253         from = min(relativeStart, len);
 
1255       if (end === undefined)
 
1258         relativeEnd = ToInt32(end);
 
1260       if (relativeEnd < 0)
 
1261         final = max(len + relativeEnd, 0);
 
1263         final = min(relativeEnd, len);
 
1264       var count = min(final - from, len - to);
 
1266       if (from < to && to < from + count) {
 
1268         from = from + count - 1;
 
1269         to = to + count - 1;
 
1274         o._setter(to, o._getter(from));
 
1275         from = from + direction;
 
1276         to = to + direction;
 
1282     // %TypedArray%.prototype.entries ( )
 
1283     // -- defined in es6.js to shim browsers w/ native TypedArrays
 
1285     // %TypedArray%.prototype.every ( callbackfn, thisArg = undefined )
 
1286     Object.defineProperty($TypedArray$.prototype, 'every', {value: function(callbackfn) {
 
1287       if (this === undefined || this === null) throw TypeError();
 
1288       var t = Object(this);
 
1289       var len = ToUint32(t.length);
 
1290       if (!IsCallable(callbackfn)) throw TypeError();
 
1291       var thisArg = arguments[1];
 
1292       for (var i = 0; i < len; i++) {
 
1293         if (!callbackfn.call(thisArg, t._getter(i), i, t))
 
1299     // %TypedArray%.prototype.fill (value, start = 0, end = this.length )
 
1300     Object.defineProperty($TypedArray$.prototype, 'fill', {value: function(value) {
 
1301       var start = arguments[1],
 
1304       var o = ToObject(this);
 
1305       var lenVal = o.length;
 
1306       var len = ToUint32(lenVal);
 
1308       var relativeStart = ToInt32(start);
 
1310       if (relativeStart < 0)
 
1311         k = max((len + relativeStart), 0);
 
1313         k = min(relativeStart, len);
 
1315       if (end === undefined)
 
1318         relativeEnd = ToInt32(end);
 
1320       if (relativeEnd < 0)
 
1321         final = max((len + relativeEnd), 0);
 
1323         final = min(relativeEnd, len);
 
1325         o._setter(k, value);
 
1331     // %TypedArray%.prototype.filter ( callbackfn, thisArg = undefined )
 
1332     Object.defineProperty($TypedArray$.prototype, 'filter', {value: function(callbackfn) {
 
1333       if (this === undefined || this === null) throw TypeError();
 
1334       var t = Object(this);
 
1335       var len = ToUint32(t.length);
 
1336       if (!IsCallable(callbackfn)) throw TypeError();
 
1338       var thisp = arguments[1];
 
1339       for (var i = 0; i < len; i++) {
 
1340         var val = t._getter(i); // in case fun mutates this
 
1341         if (callbackfn.call(thisp, val, i, t))
 
1344       return new this.constructor(res);
 
1347     // %TypedArray%.prototype.find (predicate, thisArg = undefined)
 
1348     Object.defineProperty($TypedArray$.prototype, 'find', {value: function(predicate) {
 
1349       var o = ToObject(this);
 
1350       var lenValue = o.length;
 
1351       var len = ToUint32(lenValue);
 
1352       if (!IsCallable(predicate)) throw TypeError();
 
1353       var t = arguments.length > 1 ? arguments[1] : undefined;
 
1356         var kValue = o._getter(k);
 
1357         var testResult = predicate.call(t, kValue, k, o);
 
1358         if (Boolean(testResult))
 
1365     // %TypedArray%.prototype.findIndex ( predicate, thisArg = undefined )
 
1366     Object.defineProperty($TypedArray$.prototype, 'findIndex', {value: function(predicate) {
 
1367       var o = ToObject(this);
 
1368       var lenValue = o.length;
 
1369       var len = ToUint32(lenValue);
 
1370       if (!IsCallable(predicate)) throw TypeError();
 
1371       var t = arguments.length > 1 ? arguments[1] : undefined;
 
1374         var kValue = o._getter(k);
 
1375         var testResult = predicate.call(t, kValue, k, o);
 
1376         if (Boolean(testResult))
 
1383     // %TypedArray%.prototype.forEach ( callbackfn, thisArg = undefined )
 
1384     Object.defineProperty($TypedArray$.prototype, 'forEach', {value: function(callbackfn) {
 
1385       if (this === undefined || this === null) throw TypeError();
 
1386       var t = Object(this);
 
1387       var len = ToUint32(t.length);
 
1388       if (!IsCallable(callbackfn)) throw TypeError();
 
1389       var thisp = arguments[1];
 
1390       for (var i = 0; i < len; i++)
 
1391         callbackfn.call(thisp, t._getter(i), i, t);
 
1394     // %TypedArray%.prototype.indexOf (searchElement, fromIndex = 0 )
 
1395     Object.defineProperty($TypedArray$.prototype, 'indexOf', {value: function(searchElement) {
 
1396       if (this === undefined || this === null) throw TypeError();
 
1397       var t = Object(this);
 
1398       var len = ToUint32(t.length);
 
1399       if (len === 0) return -1;
 
1401       if (arguments.length > 0) {
 
1402         n = Number(arguments[1]);
 
1405         } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
 
1406           n = (n > 0 || -1) * floor(abs(n));
 
1409       if (n >= len) return -1;
 
1410       var k = n >= 0 ? n : max(len - abs(n), 0);
 
1411       for (; k < len; k++) {
 
1412         if (t._getter(k) === searchElement) {
 
1419     // %TypedArray%.prototype.join ( separator )
 
1420     Object.defineProperty($TypedArray$.prototype, 'join', {value: function(separator) {
 
1421       if (this === undefined || this === null) throw TypeError();
 
1422       var t = Object(this);
 
1423       var len = ToUint32(t.length);
 
1424       var tmp = Array(len);
 
1425       for (var i = 0; i < len; ++i)
 
1426         tmp[i] = t._getter(i);
 
1427       return tmp.join(separator === undefined ? ',' : separator); // Hack for IE7
 
1430     // %TypedArray%.prototype.keys ( )
 
1431     // -- defined in es6.js to shim browsers w/ native TypedArrays
 
1433     // %TypedArray%.prototype.lastIndexOf ( searchElement, fromIndex = this.length-1 )
 
1434     Object.defineProperty($TypedArray$.prototype, 'lastIndexOf', {value: function(searchElement) {
 
1435       if (this === undefined || this === null) throw TypeError();
 
1436       var t = Object(this);
 
1437       var len = ToUint32(t.length);
 
1438       if (len === 0) return -1;
 
1440       if (arguments.length > 1) {
 
1441         n = Number(arguments[1]);
 
1444         } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
 
1445           n = (n > 0 || -1) * floor(abs(n));
 
1448       var k = n >= 0 ? min(n, len - 1) : len - abs(n);
 
1449       for (; k >= 0; k--) {
 
1450         if (t._getter(k) === searchElement)
 
1456     // get %TypedArray%.prototype.length
 
1457     // -- applied directly to the object in the constructor
 
1459     // %TypedArray%.prototype.map ( callbackfn, thisArg = undefined )
 
1460     Object.defineProperty($TypedArray$.prototype, 'map', {value: function(callbackfn) {
 
1461       if (this === undefined || this === null) throw TypeError();
 
1462       var t = Object(this);
 
1463       var len = ToUint32(t.length);
 
1464       if (!IsCallable(callbackfn)) throw TypeError();
 
1465       var res = []; res.length = len;
 
1466       var thisp = arguments[1];
 
1467       for (var i = 0; i < len; i++)
 
1468         res[i] = callbackfn.call(thisp, t._getter(i), i, t);
 
1469       return new this.constructor(res);
 
1472     // %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
 
1473     Object.defineProperty($TypedArray$.prototype, 'reduce', {value: function(callbackfn) {
 
1474       if (this === undefined || this === null) throw TypeError();
 
1475       var t = Object(this);
 
1476       var len = ToUint32(t.length);
 
1477       if (!IsCallable(callbackfn)) throw TypeError();
 
1478       // no value to return if no initial value and an empty array
 
1479       if (len === 0 && arguments.length === 1) throw TypeError();
 
1482       if (arguments.length >= 2) {
 
1483         accumulator = arguments[1];
 
1485         accumulator = t._getter(k++);
 
1488         accumulator = callbackfn.call(undefined, accumulator, t._getter(k), k, t);
 
1494     // %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
 
1495     Object.defineProperty($TypedArray$.prototype, 'reduceRight', {value: function(callbackfn) {
 
1496       if (this === undefined || this === null) throw TypeError();
 
1497       var t = Object(this);
 
1498       var len = ToUint32(t.length);
 
1499       if (!IsCallable(callbackfn)) throw TypeError();
 
1500       // no value to return if no initial value, empty array
 
1501       if (len === 0 && arguments.length === 1) throw TypeError();
 
1504       if (arguments.length >= 2) {
 
1505         accumulator = arguments[1];
 
1507         accumulator = t._getter(k--);
 
1510         accumulator = callbackfn.call(undefined, accumulator, t._getter(k), k, t);
 
1516     // %TypedArray%.prototype.reverse ( )
 
1517     Object.defineProperty($TypedArray$.prototype, 'reverse', {value: function() {
 
1518       if (this === undefined || this === null) throw TypeError();
 
1519       var t = Object(this);
 
1520       var len = ToUint32(t.length);
 
1521       var half = floor(len / 2);
 
1522       for (var i = 0, j = len - 1; i < half; ++i, --j) {
 
1523         var tmp = t._getter(i);
 
1524         t._setter(i, t._getter(j));
 
1530     // %TypedArray%.prototype.set(array, offset = 0 )
 
1531     // %TypedArray%.prototype.set(typedArray, offset = 0 )
 
1532     // WebIDL: void set(TypedArray array, optional unsigned long offset);
 
1533     // WebIDL: void set(sequence<type> array, optional unsigned long offset);
 
1534     Object.defineProperty($TypedArray$.prototype, 'set', {value: function(index, value) {
 
1535       if (arguments.length < 1) throw SyntaxError('Not enough arguments');
 
1536       var array, sequence, offset, len,
 
1538           byteOffset, byteLength, tmp;
 
1540       if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) {
 
1541         // void set(TypedArray array, optional unsigned long offset);
 
1542         array = arguments[0];
 
1543         offset = ToUint32(arguments[1]);
 
1545         if (offset + array.length > this.length) {
 
1546           throw RangeError('Offset plus length of array is out of range');
 
1549         byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT;
 
1550         byteLength = array.length * this.BYTES_PER_ELEMENT;
 
1552         if (array.buffer === this.buffer) {
 
1554           for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) {
 
1555             tmp[i] = array.buffer._bytes[s];
 
1557           for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) {
 
1558             this.buffer._bytes[d] = tmp[i];
 
1561           for (i = 0, s = array.byteOffset, d = byteOffset;
 
1562                i < byteLength; i += 1, s += 1, d += 1) {
 
1563             this.buffer._bytes[d] = array.buffer._bytes[s];
 
1566       } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') {
 
1567         // void set(sequence<type> array, optional unsigned long offset);
 
1568         sequence = arguments[0];
 
1569         len = ToUint32(sequence.length);
 
1570         offset = ToUint32(arguments[1]);
 
1572         if (offset + len > this.length) {
 
1573           throw RangeError('Offset plus length of array is out of range');
 
1576         for (i = 0; i < len; i += 1) {
 
1578           this._setter(offset + i, Number(s));
 
1581         throw TypeError('Unexpected argument type(s)');
 
1585     // %TypedArray%.prototype.slice ( start, end )
 
1586     Object.defineProperty($TypedArray$.prototype, 'slice', {value: function(start, end) {
 
1587       var o = ToObject(this);
 
1588       var lenVal = o.length;
 
1589       var len = ToUint32(lenVal);
 
1590       var relativeStart = ToInt32(start);
 
1591       var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
 
1592       var relativeEnd = (end === undefined) ? len : ToInt32(end);
 
1593       var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
 
1594       var count = final - k;
 
1595       var c = o.constructor;
 
1596       var a = new c(count);
 
1599         var kValue = o._getter(k);
 
1600         a._setter(n, kValue);
 
1607     // %TypedArray%.prototype.some ( callbackfn, thisArg = undefined )
 
1608     Object.defineProperty($TypedArray$.prototype, 'some', {value: function(callbackfn) {
 
1609       if (this === undefined || this === null) throw TypeError();
 
1610       var t = Object(this);
 
1611       var len = ToUint32(t.length);
 
1612       if (!IsCallable(callbackfn)) throw TypeError();
 
1613       var thisp = arguments[1];
 
1614       for (var i = 0; i < len; i++) {
 
1615         if (callbackfn.call(thisp, t._getter(i), i, t)) {
 
1622     // %TypedArray%.prototype.sort ( comparefn )
 
1623     Object.defineProperty($TypedArray$.prototype, 'sort', {value: function(comparefn) {
 
1624       if (this === undefined || this === null) throw TypeError();
 
1625       var t = Object(this);
 
1626       var len = ToUint32(t.length);
 
1627       var tmp = Array(len);
 
1628       for (var i = 0; i < len; ++i)
 
1629         tmp[i] = t._getter(i);
 
1630       function sortCompare(x, y) {
 
1631         if (x !== x && y !== y) return +0;
 
1632         if (x !== x) return 1;
 
1633         if (y !== y) return -1;
 
1634         if (comparefn !== undefined) {
 
1635           return comparefn(x, y);
 
1637         if (x < y) return -1;
 
1638         if (x > y) return 1;
 
1641       tmp.sort(sortCompare);
 
1642       for (i = 0; i < len; ++i)
 
1643         t._setter(i, tmp[i]);
 
1647     // %TypedArray%.prototype.subarray(begin = 0, end = this.length )
 
1648     // WebIDL: TypedArray subarray(long begin, optional long end);
 
1649     Object.defineProperty($TypedArray$.prototype, 'subarray', {value: function(start, end) {
 
1650       function clamp(v, min, max) { return v < min ? min : v > max ? max : v; }
 
1652       start = ToInt32(start);
 
1655       if (arguments.length < 1) { start = 0; }
 
1656       if (arguments.length < 2) { end = this.length; }
 
1658       if (start < 0) { start = this.length + start; }
 
1659       if (end < 0) { end = this.length + end; }
 
1661       start = clamp(start, 0, this.length);
 
1662       end = clamp(end, 0, this.length);
 
1664       var len = end - start;
 
1669       return new this.constructor(
 
1670         this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len);
 
1673     // %TypedArray%.prototype.toLocaleString ( )
 
1674     // %TypedArray%.prototype.toString ( )
 
1675     // %TypedArray%.prototype.values ( )
 
1676     // %TypedArray%.prototype [ @@iterator ] ( )
 
1677     // get %TypedArray%.prototype [ @@toStringTag ]
 
1678     // -- defined in es6.js to shim browsers w/ native TypedArrays
 
1680     function makeTypedArray(elementSize, pack, unpack) {
 
1681       // Each TypedArray type requires a distinct constructor instance with
 
1682       // identical logic, which this produces.
 
1683       var TypedArray = function() {
 
1684         Object.defineProperty(this, 'constructor', {value: TypedArray});
 
1685         $TypedArray$.apply(this, arguments);
 
1686         makeArrayAccessors(this);
 
1688       if ('__proto__' in TypedArray) {
 
1689         TypedArray.__proto__ = $TypedArray$;
 
1691         TypedArray.from = $TypedArray$.from;
 
1692         TypedArray.of = $TypedArray$.of;
 
1695       TypedArray.BYTES_PER_ELEMENT = elementSize;
 
1697       var TypedArrayPrototype = function() {};
 
1698       TypedArrayPrototype.prototype = $TypedArrayPrototype$;
 
1700       TypedArray.prototype = new TypedArrayPrototype();
 
1702       Object.defineProperty(TypedArray.prototype, 'BYTES_PER_ELEMENT', {value: elementSize});
 
1703       Object.defineProperty(TypedArray.prototype, '_pack', {value: pack});
 
1704       Object.defineProperty(TypedArray.prototype, '_unpack', {value: unpack});
 
1709     var Int8Array = makeTypedArray(1, packI8, unpackI8);
 
1710     var Uint8Array = makeTypedArray(1, packU8, unpackU8);
 
1711     var Uint8ClampedArray = makeTypedArray(1, packU8Clamped, unpackU8);
 
1712     var Int16Array = makeTypedArray(2, packI16, unpackI16);
 
1713     var Uint16Array = makeTypedArray(2, packU16, unpackU16);
 
1714     var Int32Array = makeTypedArray(4, packI32, unpackI32);
 
1715     var Uint32Array = makeTypedArray(4, packU32, unpackU32);
 
1716     var Float32Array = makeTypedArray(4, packF32, unpackF32);
 
1717     var Float64Array = makeTypedArray(8, packF64, unpackF64);
 
1719     global.Int8Array = global.Int8Array || Int8Array;
 
1720     global.Uint8Array = global.Uint8Array || Uint8Array;
 
1721     global.Uint8ClampedArray = global.Uint8ClampedArray || Uint8ClampedArray;
 
1722     global.Int16Array = global.Int16Array || Int16Array;
 
1723     global.Uint16Array = global.Uint16Array || Uint16Array;
 
1724     global.Int32Array = global.Int32Array || Int32Array;
 
1725     global.Uint32Array = global.Uint32Array || Uint32Array;
 
1726     global.Float32Array = global.Float32Array || Float32Array;
 
1727     global.Float64Array = global.Float64Array || Float64Array;
 
1731   // 6 The DataView View Type
 
1735     function r(array, index) {
 
1736       return IsCallable(array.get) ? array.get(index) : array[index];
 
1739     var IS_BIG_ENDIAN = (function() {
 
1740       var u16array = new Uint16Array([0x1234]),
 
1741           u8array = new Uint8Array(u16array.buffer);
 
1742       return r(u8array, 0) === 0x12;
 
1745     // DataView(buffer, byteOffset=0, byteLength=undefined)
 
1746     // WebIDL: Constructor(ArrayBuffer buffer,
 
1747     //                     optional unsigned long byteOffset,
 
1748     //                     optional unsigned long byteLength)
 
1749     function DataView(buffer, byteOffset, byteLength) {
 
1750       if (!(buffer instanceof ArrayBuffer || Class(buffer) === 'ArrayBuffer')) throw TypeError();
 
1752       byteOffset = ToUint32(byteOffset);
 
1753       if (byteOffset > buffer.byteLength)
 
1754         throw RangeError('byteOffset out of range');
 
1756       if (byteLength === undefined)
 
1757         byteLength = buffer.byteLength - byteOffset;
 
1759         byteLength = ToUint32(byteLength);
 
1761       if ((byteOffset + byteLength) > buffer.byteLength)
 
1762         throw RangeError('byteOffset and length reference an area beyond the end of the buffer');
 
1764       Object.defineProperty(this, 'buffer', {value: buffer});
 
1765       Object.defineProperty(this, 'byteLength', {value: byteLength});
 
1766       Object.defineProperty(this, 'byteOffset', {value: byteOffset});
 
1769     // get DataView.prototype.buffer
 
1770     // get DataView.prototype.byteLength
 
1771     // get DataView.prototype.byteOffset
 
1772     // -- applied directly to instances by the constructor
 
1774     function makeGetter(arrayType) {
 
1775       return function GetViewValue(byteOffset, littleEndian) {
 
1776         byteOffset = ToUint32(byteOffset);
 
1778         if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength)
 
1779           throw RangeError('Array index out of range');
 
1781         byteOffset += this.byteOffset;
 
1783         var uint8Array = new Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT),
 
1785         for (var i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1)
 
1786           bytes.push(r(uint8Array, i));
 
1788         if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN))
 
1791         return r(new arrayType(new Uint8Array(bytes).buffer), 0);
 
1795     Object.defineProperty(DataView.prototype, 'getUint8', {value: makeGetter(Uint8Array)});
 
1796     Object.defineProperty(DataView.prototype, 'getInt8', {value: makeGetter(Int8Array)});
 
1797     Object.defineProperty(DataView.prototype, 'getUint16', {value: makeGetter(Uint16Array)});
 
1798     Object.defineProperty(DataView.prototype, 'getInt16', {value: makeGetter(Int16Array)});
 
1799     Object.defineProperty(DataView.prototype, 'getUint32', {value: makeGetter(Uint32Array)});
 
1800     Object.defineProperty(DataView.prototype, 'getInt32', {value: makeGetter(Int32Array)});
 
1801     Object.defineProperty(DataView.prototype, 'getFloat32', {value: makeGetter(Float32Array)});
 
1802     Object.defineProperty(DataView.prototype, 'getFloat64', {value: makeGetter(Float64Array)});
 
1804     function makeSetter(arrayType) {
 
1805       return function SetViewValue(byteOffset, value, littleEndian) {
 
1806         byteOffset = ToUint32(byteOffset);
 
1807         if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength)
 
1808           throw RangeError('Array index out of range');
 
1811         var typeArray = new arrayType([value]),
 
1812             byteArray = new Uint8Array(typeArray.buffer),
 
1813             bytes = [], i, byteView;
 
1815         for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1)
 
1816           bytes.push(r(byteArray, i));
 
1818         // Flip if necessary
 
1819         if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN))
 
1823         byteView = new Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT);
 
1824         byteView.set(bytes);
 
1828     Object.defineProperty(DataView.prototype, 'setUint8', {value: makeSetter(Uint8Array)});
 
1829     Object.defineProperty(DataView.prototype, 'setInt8', {value: makeSetter(Int8Array)});
 
1830     Object.defineProperty(DataView.prototype, 'setUint16', {value: makeSetter(Uint16Array)});
 
1831     Object.defineProperty(DataView.prototype, 'setInt16', {value: makeSetter(Int16Array)});
 
1832     Object.defineProperty(DataView.prototype, 'setUint32', {value: makeSetter(Uint32Array)});
 
1833     Object.defineProperty(DataView.prototype, 'setInt32', {value: makeSetter(Int32Array)});
 
1834     Object.defineProperty(DataView.prototype, 'setFloat32', {value: makeSetter(Float32Array)});
 
1835     Object.defineProperty(DataView.prototype, 'setFloat64', {value: makeSetter(Float64Array)});
 
1837     global.DataView = global.DataView || DataView;
 
1842 if (!("defineProperty"in Object&&function(){try{var e={}
 
1843 return Object.defineProperty(e,"test",{value:42}),!0}catch(t){return!1}}()
 
1846 // Object.defineProperty
 
1847 (function (nativeDefineProperty) {
 
1849         var supportsAccessors = Object.prototype.hasOwnProperty('__defineGetter__');
 
1850         var ERR_ACCESSORS_NOT_SUPPORTED = 'Getters & setters cannot be defined on this javascript engine';
 
1851         var ERR_VALUE_ACCESSORS = 'A property cannot both have accessors and be writable or have a value';
 
1853         // Polyfill.io - This does not use CreateMethodProperty because our CreateMethodProperty function uses Object.defineProperty.
 
1854         Object['defineProperty'] = function defineProperty(object, property, descriptor) {
 
1856                 // Where native support exists, assume it
 
1857                 if (nativeDefineProperty && (object === window || object === document || object === Element.prototype || object instanceof Element)) {
 
1858                         return nativeDefineProperty(object, property, descriptor);
 
1861                 if (object === null || !(object instanceof Object || typeof object === 'object')) {
 
1862                         throw new TypeError('Object.defineProperty called on non-object');
 
1865                 if (!(descriptor instanceof Object)) {
 
1866                         throw new TypeError('Property description must be an object');
 
1869                 var propertyString = String(property);
 
1870                 var hasValueOrWritable = 'value' in descriptor || 'writable' in descriptor;
 
1871                 var getterType = 'get' in descriptor && typeof descriptor.get;
 
1872                 var setterType = 'set' in descriptor && typeof descriptor.set;
 
1874                 // handle descriptor.get
 
1876                         if (getterType !== 'function') {
 
1877                                 throw new TypeError('Getter must be a function');
 
1879                         if (!supportsAccessors) {
 
1880                                 throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
 
1882                         if (hasValueOrWritable) {
 
1883                                 throw new TypeError(ERR_VALUE_ACCESSORS);
 
1885                         Object.__defineGetter__.call(object, propertyString, descriptor.get);
 
1887                         object[propertyString] = descriptor.value;
 
1890                 // handle descriptor.set
 
1892                         if (setterType !== 'function') {
 
1893                                 throw new TypeError('Setter must be a function');
 
1895                         if (!supportsAccessors) {
 
1896                                 throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
 
1898                         if (hasValueOrWritable) {
 
1899                                 throw new TypeError(ERR_VALUE_ACCESSORS);
 
1901                         Object.__defineSetter__.call(object, propertyString, descriptor.set);
 
1904                 // OK to define value unconditionally - if a getter has been specified as well, an error would be thrown above
 
1905                 if ('value' in descriptor) {
 
1906                         object[propertyString] = descriptor.value;
 
1911 }(Object.defineProperty));
 
1916 // _ESAbstract.CreateDataProperty
 
1917 // 7.3.4. CreateDataProperty ( O, P, V )
 
1919 // This abstract operation creates a property whose attributes are set to the same defaults used for properties created by the ECMAScript language assignment operator.
 
1920 // Normally, the property will not already exist. If it does exist and is not configurable or if O is not extensible, [[DefineOwnProperty]] will return false.
 
1921 function CreateDataProperty(O, P, V) { // eslint-disable-line no-unused-vars
 
1922         // 1. Assert: Type(O) is Object.
 
1923         // 2. Assert: IsPropertyKey(P) is true.
 
1924         // 3. Let newDesc be the PropertyDescriptor{ [[Value]]: V, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true }.
 
1931         // 4. Return ? O.[[DefineOwnProperty]](P, newDesc).
 
1933                 Object.defineProperty(O, P, newDesc);
 
1940 // _ESAbstract.CreateDataPropertyOrThrow
 
1941 /* global CreateDataProperty */
 
1942 // 7.3.6. CreateDataPropertyOrThrow ( O, P, V )
 
1943 function CreateDataPropertyOrThrow(O, P, V) { // eslint-disable-line no-unused-vars
 
1944         // 1. Assert: Type(O) is Object.
 
1945         // 2. Assert: IsPropertyKey(P) is true.
 
1946         // 3. Let success be ? CreateDataProperty(O, P, V).
 
1947         var success = CreateDataProperty(O, P, V);
 
1948         // 4. If success is false, throw a TypeError exception.
 
1950                 throw new TypeError('Cannot assign value `' + Object.prototype.toString.call(V) + '` to property `' + Object.prototype.toString.call(P) + '` on object `' + Object.prototype.toString.call(O) + '`');
 
1952         // 5. Return success.
 
1956 // _ESAbstract.CreateIterResultObject
 
1957 /* global Type, CreateDataProperty */
 
1958 // 7.4.7. CreateIterResultObject ( value, done )
 
1959 function CreateIterResultObject(value, done) { // eslint-disable-line no-unused-vars
 
1960         // 1. Assert: Type(done) is Boolean.
 
1961         if (Type(done) !== 'boolean') {
 
1964         // 2. Let obj be ObjectCreate(%ObjectPrototype%).
 
1966         // 3. Perform CreateDataProperty(obj, "value", value).
 
1967         CreateDataProperty(obj, "value", value);
 
1968         // 4. Perform CreateDataProperty(obj, "done", done).
 
1969         CreateDataProperty(obj, "done", done);
 
1974 // _ESAbstract.CreateMethodProperty
 
1975 // 7.3.5. CreateMethodProperty ( O, P, V )
 
1976 function CreateMethodProperty(O, P, V) { // eslint-disable-line no-unused-vars
 
1977         // 1. Assert: Type(O) is Object.
 
1978         // 2. Assert: IsPropertyKey(P) is true.
 
1979         // 3. Let newDesc be the PropertyDescriptor{[[Value]]: V, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}.
 
1986         // 4. Return ? O.[[DefineOwnProperty]](P, newDesc).
 
1987         Object.defineProperty(O, P, newDesc);
 
1989 if (!("isArray"in Array
 
1993 /* global CreateMethodProperty, IsArray */
 
1994 // 22.1.2.2. Array.isArray ( arg )
 
1995 CreateMethodProperty(Array, 'isArray', function isArray(arg) {
 
1996         // 1. Return ? IsArray(arg).
 
1997         return IsArray(arg);
 
2002 if (!("copyWithin"in Array.prototype&&function(){try{var t=function n(){}
 
2003 t.prototype[0]="foo"
 
2005 o[1]=1,o[2]=2,o.length=3
 
2006 var r=Array.prototype.copyWithin.call(o,1,0)
 
2007 return!(!r[0]||Object.prototype.hasOwnProperty.call(r,"0")||!Object.prototype.hasOwnProperty.call(r,"1")||"foo"!==r[0]||"foo"!==r[1]||1!==r[2]||3!==r.length)}catch(e){return!1}}()
 
2010 // Array.prototype.copyWithin
 
2011 /* global CreateMethodProperty, HasProperty, ToInteger */
 
2012 // 22.1.3.3 Array.prototype.copyWithin ( target, start [ , end ] )
 
2013 CreateMethodProperty(Array.prototype, 'copyWithin', function copyWithin(target, start /* [ , end ] */ ) {
 
2015         var end = arguments[2];
 
2017         // 22.1.3.3.1 Let O be ? ToObject(this value).
 
2018         if (this === null || this === undefined) {
 
2019                 throw new TypeError('Cannot call method on ' + this);
 
2022         var o = Object(this);
 
2024         // 22.1.3.3.2 Let len be ? ToLength(? Get(O, "length")).
 
2025         var len = ToInteger(o.length);
 
2029         if (len === Infinity) {
 
2030                 len = Math.pow(2, 53) - 1;
 
2032                 len = Math.min(len, Math.pow(2, 53) - 1);
 
2034         len = Math.max(len, 0);
 
2036         // 22.1.3.3.3 Let relativeTarget be ? ToInteger(target).
 
2037         var relativeTarget = ToInteger(target);
 
2039         // 22.1.3.3.4 If relativeTarget < 0, let to be max((len + relativeTarget), 0); else let to be min(relativeTarget, len).
 
2041         if (relativeTarget < 0) {
 
2042                 to = Math.max(len + relativeTarget, 0);
 
2044                 to = Math.min(relativeTarget, len);
 
2047         // 22.1.3.3.5 Let relativeStart be ? ToInteger(start).
 
2048         var relativeStart = ToInteger(start);
 
2050         // 22.1.3.3.6 If relativeStart < 0, let from be max((len + relativeStart), 0); else let from be min(relativeStart, len).
 
2052         if (relativeStart < 0) {
 
2053                 from = Math.max(len + relativeStart, 0);
 
2055                 from = Math.min(relativeStart, len);
 
2058         // 22.1.3.3.7 If end is undefined, let relativeEnd be len; else let relativeEnd be ? ToInteger(end).
 
2060         if (end === undefined) {
 
2063                 relativeEnd = ToInteger(end);
 
2066         // 22.1.3.3.8 If relativeEnd < 0, let final be max((len + relativeEnd), 0); else let final be min(relativeEnd, len).
 
2068         if (relativeEnd < 0) {
 
2069                 final = Math.max(len + relativeEnd, 0);
 
2071                 final = Math.min(relativeEnd, len);
 
2074         // 22.1.3.3.9 Let count be min(final-from, len-to).
 
2075         var count = Math.min(final - from, len - to);
 
2077         // 22.1.3.3.10 If from<to and to<from+count, then
 
2079         if (from < to && to < from + count) {
 
2080                 // 22.1.3.3.10.a Let direction be -1.
 
2083                 // 22.1.3.3.10.b Let from be from + count - 1.
 
2084                 from = from + count - 1;
 
2086                 // 22.1.3.3.10.c Let to be to + count - 1.
 
2087                 to = to + count - 1;
 
2089                 // 22.1.3.3.11 Else,
 
2090                 // 22.1.3.3.11.a Let direction be 1.
 
2094         // 22.1.3.3.12 Repeat, while count > 0
 
2096                 // 22.1.3.3.12.a Let fromKey be ! ToString(from).
 
2097                 var fromKey = String(from);
 
2098                 // 22.1.3.3.12.b Let toKey be ! ToString(to).
 
2099                 var toKey = String(to);
 
2100                 // 22.1.3.3.12.c Let fromPresent be ? HasProperty(O, fromKey).
 
2101                 var fromPresent = HasProperty(o, fromKey);
 
2102                 // 22.1.3.3.12.d If fromPresent is true, then
 
2104                         // 22.1.3.3.12.d.i Let fromVal be ? Get(O, fromKey).
 
2105                         var fromVal = o[fromKey];
 
2106                         // 22.1.3.3.12.d.ii Perform ? Set(O, toKey, fromVal, true).
 
2109                         // 22.1.3.3.12.e Else fromPresent is false,
 
2110                         // 22.1.3.3.12.e.i Perform ? DeletePropertyOrThrow(O, toKey).
 
2113                 // 22.1.3.3.12.f Let from be from + direction.
 
2114                 from = from + direction;
 
2115                 // 22.1.3.3.12.g Let to be to + direction.
 
2116                 to = to + direction;
 
2117                 // 22.1.3.3.12.h Let count be count - 1.
 
2120         // 22.1.3.3.13 Return O.
 
2126 if (!("fill"in Array.prototype
 
2129 // Array.prototype.fill
 
2130 /* global CreateMethodProperty, Get, ToInteger, ToLength, ToObject, ToString */
 
2131 // 22.1.3.6. Array.prototype.fill ( value [ , start [ , end ] ] )
 
2132 CreateMethodProperty(Array.prototype, 'fill', function fill(value /* [ , start [ , end ] ] */) {
 
2133         var start = arguments[1];
 
2134         var end = arguments[2];
 
2135         // 1. Let O be ? ToObject(this value).
 
2136         var O = ToObject(this);
 
2137         // 2. Let len be ? ToLength(? Get(O, "length")).
 
2138         var len = ToLength(Get(O, "length"));
 
2139         // 3. Let relativeStart be ? ToInteger(start).
 
2140         var relativeStart = ToInteger(start);
 
2141         // 4. If relativeStart < 0, let k be max((len + relativeStart), 0); else let k be min(relativeStart, len)
 
2142         var k = relativeStart < 0 ? Math.max((len + relativeStart), 0) : Math.min(relativeStart, len);
 
2143         // 5. If end is undefined, let relativeEnd be len; else let relativeEnd be ? ToInteger(end).
 
2144         var relativeEnd = end === undefined ? len : ToInteger(end);
 
2145         // 6. If relativeEnd < 0, let final be max((len + relativeEnd), 0); else let final be min(relativeEnd, len).
 
2146         var final = relativeEnd < 0 ? Math.max((len + relativeEnd), 0) : Math.min(relativeEnd, len);
 
2147         // 7. Repeat, while k < final
 
2149                 // a. Let Pk be ! ToString(k).
 
2150                 var Pk = ToString(k);
 
2151                 // b. Perform ? Set(O, Pk, value, true).
 
2153                 // c. Increase k by 1.
 
2162 if (!("find"in Array.prototype
 
2165 // Array.prototype.find
 
2166 /* global Call, CreateMethodProperty, Get, IsCallable, ToBoolean, ToLength, ToObject, ToString */
 
2167 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
 
2168 CreateMethodProperty(Array.prototype, 'find', function find( predicate /* [ , thisArg ] */) {
 
2169         // 1. Let O be ? ToObject(this value).
 
2170         var O = ToObject(this);
 
2171         // 2. Let len be ? ToLength(? Get(O, "length")).
 
2172         var len = ToLength(Get(O, "length"));
 
2173         // 3. If IsCallable(predicate) is false, throw a TypeError exception.
 
2174         if (IsCallable(predicate) === false) {
 
2175                 throw new TypeError(predicate + ' is not a function');
 
2177         // 4. If thisArg is present, let T be thisArg; else let T be undefined.
 
2178         var T = arguments.length > 1 ? arguments[1] : undefined;
 
2181         // 6. Repeat, while k < len
 
2183                 // a. Let Pk be ! ToString(k).
 
2184                 var Pk = ToString(k);
 
2185                 // b. Let kValue be ? Get(O, Pk).
 
2186                 var kValue = Get(O, Pk);
 
2187                 // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
 
2188                 var testResult = ToBoolean(Call(predicate, T, [kValue, k, O ]));
 
2189                 // d. If testResult is true, return kValue.
 
2193                 // e. Increase k by 1.
 
2196         // 7. Return undefined.
 
2202 if (!("findIndex"in Array.prototype
 
2205 // Array.prototype.findIndex
 
2206 /* global Call, CreateMethodProperty, Get, IsCallable, ToBoolean, ToLength, ToObject, ToString */
 
2207 // 22.1.3.9. Array.prototype.findIndex ( predicate [ , thisArg ] )
 
2208 CreateMethodProperty(Array.prototype, 'findIndex', function findIndex(predicate /* [ , thisArg ] */) {
 
2209         // 1. Let O be ? ToObject(this value).
 
2210         var O = ToObject(this);
 
2211         // 2. Let len be ? ToLength(? Get(O, "length")).
 
2212         var len = ToLength(Get(O, "length"));
 
2213         // 3. If IsCallable(predicate) is false, throw a TypeError exception.
 
2214         if (IsCallable(predicate) === false) {
 
2215                 throw new TypeError(predicate + ' is not a function');
 
2217         // 4. If thisArg is present, let T be thisArg; else let T be undefined.
 
2218         var T = arguments.length > 1 ? arguments[1] : undefined;
 
2221         // 6. Repeat, while k < len
 
2223                 // a. Let Pk be ! ToString(k).
 
2224                 var Pk = ToString(k);
 
2225                 // b. Let kValue be ? Get(O, Pk).
 
2226                 var kValue = Get(O, Pk);
 
2227                 // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
 
2228                 var testResult = ToBoolean(Call(predicate, T, [kValue, k, O]));
 
2229                 // d. If testResult is true, return k.
 
2233                 // e. Increase k by 1.
 
2242 if (!("forEach"in Array.prototype
 
2245 // Array.prototype.forEach
 
2246 /* global Call, CreateMethodProperty, Get, HasProperty, IsCallable, ToLength, ToObject, ToString */
 
2247 // 22.1.3.10. Array.prototype.forEach ( callbackfn [ , thisArg ] )
 
2248 CreateMethodProperty(Array.prototype, 'forEach', function forEach(callbackfn /* [ , thisArg ] */) {
 
2249         // 1. Let O be ? ToObject(this value).
 
2250         var O = ToObject(this);
 
2251         // Polyfill.io - If O is a String object, split it into an array in order to iterate correctly.
 
2252         // We will use arrayLike in place of O when we are iterating through the list.
 
2253         var arraylike = O instanceof String ? O.split('') : O;
 
2254         // 2. Let len be ? ToLength(? Get(O, "length")).
 
2255         var len = ToLength(Get(O, "length"));
 
2256         // 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
 
2257         if (IsCallable(callbackfn) === false) {
 
2258                 throw new TypeError(callbackfn + ' is not a function');
 
2260         // 4. If thisArg is present, let T be thisArg; else let T be undefined.
 
2261         var T = arguments.length > 1 ? arguments[1] : undefined;
 
2264         // 6. Repeat, while k < len
 
2266                 // a. Let Pk be ! ToString(k).
 
2267                 var Pk = ToString(k);
 
2268                 // b. Let kPresent be ? HasProperty(O, Pk).
 
2269                 var kPresent = HasProperty(arraylike, Pk);
 
2270                 // c. If kPresent is true, then
 
2272                         // i. Let kValue be ? Get(O, Pk).
 
2273                         var kValue = Get(arraylike, Pk);
 
2274                         // ii. Perform ? Call(callbackfn, T, « kValue, k, O »).
 
2275                         Call(callbackfn, T, [kValue, k, O]);
 
2277                 // d. Increase k by 1.
 
2280         // 7. Return undefined.
 
2286 if (!("bind"in Function.prototype
 
2289 // Function.prototype.bind
 
2290 /* global CreateMethodProperty, IsCallable */
 
2291 // 19.2.3.2. Function.prototype.bind ( thisArg, ...args )
 
2292 // https://github.com/es-shims/es5-shim/blob/d6d7ff1b131c7ba14c798cafc598bb6780d37d3b/es5-shim.js#L182
 
2293 CreateMethodProperty(Function.prototype, 'bind', function bind(that) { // .length is 1
 
2294         // add necessary es5-shim utilities
 
2296         var $Object = Object;
 
2297         var ArrayPrototype = $Array.prototype;
 
2298         var Empty = function Empty() { };
 
2299         var array_slice = ArrayPrototype.slice;
 
2300         var array_concat = ArrayPrototype.concat;
 
2301         var array_push = ArrayPrototype.push;
 
2303         // /add necessary es5-shim utilities
 
2305         // 1. Let Target be the this value.
 
2307         // 2. If IsCallable(Target) is false, throw a TypeError exception.
 
2308         if (!IsCallable(target)) {
 
2309                 throw new TypeError('Function.prototype.bind called on incompatible ' + target);
 
2311         // 3. Let A be a new (possibly empty) internal list of all of the
 
2312         //   argument values provided after thisArg (arg1, arg2 etc), in order.
 
2313         // XXX slicedArgs will stand in for "A" if used
 
2314         var args = array_slice.call(arguments, 1); // for normal call
 
2315         // 4. Let F be a new native ECMAScript object.
 
2316         // 11. Set the [[Prototype]] internal property of F to the standard
 
2317         //   built-in Function prototype object as specified in 15.3.3.1.
 
2318         // 12. Set the [[Call]] internal property of F as described in
 
2320         // 13. Set the [[Construct]] internal property of F as described in
 
2322         // 14. Set the [[HasInstance]] internal property of F as described in
 
2325         var binder = function () {
 
2327                 if (this instanceof bound) {
 
2328                         // 15.3.4.5.2 [[Construct]]
 
2329                         // When the [[Construct]] internal method of a function object,
 
2330                         // F that was created using the bind function is called with a
 
2331                         // list of arguments ExtraArgs, the following steps are taken:
 
2332                         // 1. Let target be the value of F's [[TargetFunction]]
 
2333                         //   internal property.
 
2334                         // 2. If target has no [[Construct]] internal method, a
 
2335                         //   TypeError exception is thrown.
 
2336                         // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
 
2338                         // 4. Let args be a new list containing the same values as the
 
2339                         //   list boundArgs in the same order followed by the same
 
2340                         //   values as the list ExtraArgs in the same order.
 
2341                         // 5. Return the result of calling the [[Construct]] internal
 
2342                         //   method of target providing args as the arguments.
 
2344                         var result = target.apply(
 
2346                                 array_concat.call(args, array_slice.call(arguments))
 
2348                         if ($Object(result) === result) {
 
2354                         // 15.3.4.5.1 [[Call]]
 
2355                         // When the [[Call]] internal method of a function object, F,
 
2356                         // which was created using the bind function is called with a
 
2357                         // this value and a list of arguments ExtraArgs, the following
 
2359                         // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
 
2361                         // 2. Let boundThis be the value of F's [[BoundThis]] internal
 
2363                         // 3. Let target be the value of F's [[TargetFunction]] internal
 
2365                         // 4. Let args be a new list containing the same values as the
 
2366                         //   list boundArgs in the same order followed by the same
 
2367                         //   values as the list ExtraArgs in the same order.
 
2368                         // 5. Return the result of calling the [[Call]] internal method
 
2369                         //   of target providing boundThis as the this value and
 
2370                         //   providing args as the arguments.
 
2372                         // equiv: target.call(this, ...boundArgs, ...args)
 
2373                         return target.apply(
 
2375                                 array_concat.call(args, array_slice.call(arguments))
 
2382         // 15. If the [[Class]] internal property of Target is "Function", then
 
2383         //     a. Let L be the length property of Target minus the length of A.
 
2384         //     b. Set the length own property of F to either 0 or L, whichever is
 
2386         // 16. Else set the length own property of F to 0.
 
2388         var boundLength = max(0, target.length - args.length);
 
2390         // 17. Set the attributes of the length own property of F to the values
 
2391         //   specified in 15.3.5.1.
 
2393         for (var i = 0; i < boundLength; i++) {
 
2394                 array_push.call(boundArgs, '$' + i);
 
2397         // XXX Build a dynamic function with desired amount of arguments is the only
 
2398         // way to set the length property of a function.
 
2399         // In environments where Content Security Policies enabled (Chrome extensions,
 
2400         // for ex.) all use of eval or Function costructor throws an exception.
 
2401         // However in all of these environments Function.prototype.bind exists
 
2402         // and so this code will never be executed.
 
2403         bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);
 
2405         if (target.prototype) {
 
2406                 Empty.prototype = target.prototype;
 
2407                 bound.prototype = new Empty();
 
2408                 // Clean up dangling references.
 
2409                 Empty.prototype = null;
 
2413         // 18. Set the [[Extensible]] internal property of F to true.
 
2416         // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
 
2417         // 20. Call the [[DefineOwnProperty]] internal method of F with
 
2418         //   arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
 
2419         //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
 
2421         // 21. Call the [[DefineOwnProperty]] internal method of F with
 
2422         //   arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
 
2423         //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
 
2427         // NOTE Function objects created using Function.prototype.bind do not
 
2428         // have a prototype property or the [[Code]], [[FormalParameters]], and
 
2429         // [[Scope]] internal properties.
 
2430         // XXX can't delete prototype in pure-js.
 
2438 if (!("acosh"in Math
 
2442 /* global CreateMethodProperty */
 
2443 // 20.2.2.3. Math.acosh ( x )
 
2444 CreateMethodProperty(Math, 'acosh', function acosh(x) {
 
2445         // If x is NaN, the result is NaN.
 
2449         // If x is less than 1, the result is NaN.
 
2453         // If x is 1, the result is +0.
 
2457         // If x is +∞, the result is +∞.
 
2458         if (x === Infinity) {
 
2461         return Math.log(x + Math.sqrt(x * x - 1));
 
2466 if (!("asinh"in Math
 
2470 /* global CreateMethodProperty */
 
2471 // 20.2.2.5. Math.asinh ( x )
 
2472 CreateMethodProperty(Math, 'asinh', function asinh(x) {
 
2473         // If x is NaN, the result is NaN.
 
2477         // If x is +0, the result is +0.
 
2478         if (x === 0 && 1/x === Infinity) {
 
2481         // If x is -0, the result is -0.
 
2482         if (x === 0 && 1/x === -Infinity) {
 
2485         // If x is +∞, the result is +∞.
 
2486         if (x === Infinity) {
 
2489         // If x is -∞, the result is -∞.
 
2490         if (x === -Infinity) {
 
2493         return Math.log(x + Math.sqrt(x * x + 1));
 
2498 if (!("atanh"in Math
 
2502 /* global CreateMethodProperty */
 
2503 // 20.2.2.7. Math.atanh ( x )
 
2504 CreateMethodProperty(Math, 'atanh', function atanh(x) {
 
2505         // If x is NaN, the result is NaN.
 
2509         // If x is less than -1, the result is NaN.
 
2513         // If x is greater than 1, the result is NaN.
 
2517         // If x is -1, the result is -∞.
 
2521         // If x is +1, the result is +∞.
 
2525         // If x is +0, the result is +0.
 
2526         if (x === 0 && 1/x === Infinity) {
 
2529         // If x is -0, the result is -0.
 
2530         if (x === 0 && 1/x === -Infinity) {
 
2533         return Math.log((1 + x) / (1 - x)) / 2;
 
2542 /* global CreateMethodProperty */
 
2543 // 20.2.2.9. Math.cbrt ( x )
 
2544 CreateMethodProperty(Math, 'cbrt', function cbrt(x) {
 
2545         // If x is NaN, the result is NaN.
 
2549         // If x is +0, the result is +0.
 
2550         if (x === 0 && 1/x === Infinity) {
 
2553         // If x is -0, the result is -0.
 
2554         if (x === 0 && 1/x === -Infinity) {
 
2557         // If x is +∞, the result is +∞.
 
2558         if (x === Infinity) {
 
2561         // If x is -∞, the result is -∞.
 
2562         if (x === -Infinity) {
 
2565         var y = Math.pow(Math.abs(x), 1 / 3);
 
2566         return x < 0 ? -y : y;
 
2571 if (!("clz32"in Math
 
2575 /* global CreateMethodProperty, ToUint32 */
 
2576 // 20.2.2.11. Math.clz32 ( x )
 
2577 CreateMethodProperty(Math, 'clz32', function clz32(x) {
 
2578         // 1. Let n be ToUint32(x).
 
2579         var n = ToUint32(x);
 
2580         // 2. Let p be the number of leading zero bits in the 32-bit binary representation of n.
 
2581         var p = n ? 32 - n.toString(2).length : 32;
 
2592 /* global CreateMethodProperty */
 
2593 // 20.2.2.1. 3Math.cosh ( x )
 
2594 CreateMethodProperty(Math, 'cosh', function cosh(x) {
 
2595         // If x is NaN, the result is NaN.
 
2599         // If x is +0, the result is 1.
 
2600         if (x === 0 && 1/x === Infinity) {
 
2603         // If x is -0, the result is 1.
 
2604         if (x === 0 && 1/x === -Infinity) {
 
2607         // If x is +∞, the result is +∞.
 
2608         if (x === Infinity) {
 
2611         // If x is -∞, the result is +∞.
 
2612         if (x === -Infinity) {
 
2617                 var y = Math.exp(0.5 * x);
 
2620         var y = Math.exp(x);
 
2621         return (y + 1 / y) / 2;
 
2626 if (!("expm1"in Math
 
2630 /* global CreateMethodProperty */
 
2631 // 20.2.2.15. Math.expm1 ( x )
 
2632 CreateMethodProperty(Math, 'expm1', function expm1(x) {
 
2633         // If x is NaN, the result is NaN.
 
2637         // If x is +0, the result is +0.
 
2638         if (x === 0 && 1/x === Infinity) {
 
2641         // If x is -0, the result is -0.
 
2642         if (x === 0 && 1/x === -Infinity) {
 
2645         // If x is +∞, the result is +∞.
 
2646         if (x === Infinity) {
 
2649         // If x is -∞, the result is -1.
 
2650         if (x === -Infinity) {
 
2654         if (x > -1e-6 && x < 1e-6) {
 
2655                 return x + x * x / 2;
 
2657                 return Math.exp(x) - 1;
 
2663 if (!("fround"in Math
 
2667 /* global Float32Array, CreateMethodProperty */
 
2668 // 20.2.2.17 Math.fround ( x )
 
2669 CreateMethodProperty(Math, 'fround', function (x) {
 
2670         // 1. If x is NaN, return NaN.
 
2674         // 2. If x is one of +0, -0, +∞, -∞, return x.
 
2675         if (1 / x === +Infinity || 1 / x === -Infinity || x === +Infinity || x === -Infinity) {
 
2678         // 3. Let x32 be the result of converting x to a value in IEEE 754-2008 binary32 format using roundTiesToEven.
 
2679         // 4. Let x64 be the result of converting x32 to a value in IEEE 754-2008 binary64 format.
 
2680         // 5. Return the ECMAScript Number value corresponding to x64.
 
2681         return (new Float32Array([x]))[0];
 
2686 if (!("hypot"in Math
 
2690 /* global CreateMethodProperty */
 
2691 // 20.2.2.18. Math.hypot ( value1, value2, ...values )
 
2692 CreateMethodProperty(Math, 'hypot', function hypot(value1, value2) { // eslint-disable-line no-unused-vars
 
2693         // If no arguments are passed, the result is +0.
 
2694         if (arguments.length === 0) {
 
2699         for (var i = 0; i < arguments.length; ++i) {
 
2700                 // If any argument is +∞, the result is +∞.
 
2701                 if (arguments[i] === Infinity) {
 
2705                 // If any argument is -∞, the result is +∞.
 
2706                 if (arguments[i] === -Infinity) {
 
2710                 // If no argument is +∞ or -∞, and any argument is NaN, the result is NaN.
 
2711                 // If all arguments are either +0 or -0, the result is +0.
 
2712                 // Polyfill.io - The two conditions above are handled in the math.
 
2714                 var arg = Math.abs(Number(arguments[i]));
 
2716                         y = y * Math.pow(max / arg, 2);
 
2719                 if (arg !== 0 || max !== 0) {
 
2720                         y = y + Math.pow(arg / max, 2);
 
2724   return max * Math.sqrt(y);
 
2733 /* global CreateMethodProperty, ToUint32 */
 
2734 // 20.2.2.19. Math.imul ( x, y )
 
2735 CreateMethodProperty(Math, 'imul', function imul(x, y) {
 
2736         // 1. Let a be ToUint32(x).
 
2737         var a = ToUint32(x);
 
2738         // 2. Let b be ToUint32(y).
 
2739         var b = ToUint32(y);
 
2740         var UINT16 = 0xffff;
 
2741         var aHigh = a >>> 16 & UINT16;
 
2742         var aLow = UINT16 & a;
 
2743         var bHigh = b >>> 16 & UINT16;
 
2744         var bLow = UINT16 & b;
 
2745         // the shift by 0 fixes the sign on the high part
 
2746         // the final |0 converts the unsigned value into a signed value
 
2747         return aLow * bLow + (aHigh * bLow + aLow * bHigh << 16 >>> 0) | 0;
 
2751 if (!("log10"in Math
 
2755 /* global CreateMethodProperty */
 
2756 // 20.2.2.22. Math.log10 ( x )
 
2757 CreateMethodProperty(Math, 'log10', function log10(x) {
 
2758         return Math.log(x) / Math.LN10;
 
2763 if (!("log1p"in Math
 
2767 /* global CreateMethodProperty */
 
2768 // 20.2.2.21. Math.log1p ( x )
 
2769 CreateMethodProperty(Math, 'log1p', function log1p(x) {
 
2771         if (-1 < x && x < 1) {
 
2772                 // Polyfill.io - For numbers in the range −1 < x < 1
 
2773                 // Because we are using log, the precision of the result will be identical to log(1).
 
2774                 // To fix this we avoid using log and use the Taylor Series expansion of log.
 
2775                 // This series converges when |x| < 1. As we can not sum to infinity,
 
2776                 // we instead sum the first 300 parts of the series to give a close approximation.
 
2777                 // |x|<1, log(1+x) = x - x^2/2 + x^3/3 - ... + (-1)^(n-1)*x^n/n + ...
 
2779                 for (var i = 2; i <= 300; i++) {
 
2780                         y += Math.pow((-1), (i - 1)) * Math.pow(x, i) / i;
 
2785         return Math.log(1 + x);
 
2793 /* global CreateMethodProperty */
 
2794 // 20.2.2.23. Math.log2 ( x )
 
2795 CreateMethodProperty(Math, 'log2', function log2(x) {
 
2796         return Math.log(x) / Math.LN2;
 
2805 /* global CreateMethodProperty */
 
2806 // 20.2.2.29. Math.sign ( x )
 
2807 CreateMethodProperty(Math, 'sign', function sign(x) {
 
2809         // If x is NaN, the result is NaN.
 
2813         // If x is -0, the result is -0.
 
2814         if (1 / x === -Infinity) {
 
2817         // If x is +0, the result is +0.
 
2818         if (1 / x === Infinity) {
 
2821         // If x is negative and not -0, the result is -1.
 
2825         // If x is positive and not +0, the result is +1.
 
2837 /* global CreateMethodProperty */
 
2838 // 20.2.2.31. Math.sinh ( x )
 
2839 CreateMethodProperty(Math, 'sinh', function sinh(x) {
 
2840         var s = (x < 0) ? -1 : 1;
 
2841         var absx = Math.abs(x);
 
2843                 if (absx < Math.pow(2, -28)) {
 
2846                 var t = Math.exp(absx) - 1;
 
2848                         return (s * (2 * t - t * t / (t + 1)))/2;
 
2850                 return (s * (t + t / (t + 1)))/2;
 
2852         if (absx < 709.7822265625) {
 
2853                 return (s * Math.exp(absx))/2;
 
2855         var w = Math.exp(0.5 * absx);
 
2866 /* global CreateMethodProperty */
 
2867 // 20.2.2.34. Math.tanh ( x )
 
2868 CreateMethodProperty(Math, 'tanh', function tanh(x) {
 
2871         return x === Infinity ? 1 : x === -Infinity ? -1 : (y = Math.exp(2 * x), (y - 1) / (y + 1));
 
2876 if (!("trunc"in Math
 
2880 /* global CreateMethodProperty */
 
2881 CreateMethodProperty(Math, 'trunc', function trunc(x) {
 
2882         return x < 0 ? Math.ceil(x) : Math.floor(x);
 
2887 if (!("isFinite"in Number
 
2891 /* global CreateMethodProperty, Type */
 
2894         // 20.1.2.2. Number.isFinite ( number )
 
2895         CreateMethodProperty(Number, 'isFinite', function isFinite(number) {
 
2896                 // 1. If Type(number) is not Number, return false.
 
2897                 if (Type(number) !== 'number') {
 
2900                 // 2. If number is NaN, +∞, or -∞, return false.
 
2901                 // 3. Otherwise, return true.
 
2902                 // Polyfill.io - We use isFinite as it implements steps 2 and 3.
 
2903                 return that.isFinite(number);
 
2909 if (!("isInteger"in Number
 
2913 /* global CreateMethodProperty, ToInteger, Type */
 
2914 // 20.1.2.3. Number.isInteger ( number )
 
2915 CreateMethodProperty(Number, 'isInteger', function isInteger(number) {
 
2916         // 1. If Type(number) is not Number, return false.
 
2917         if (Type(number) !== 'number') {
 
2920         // 2. If number is NaN, +∞, or -∞, return false.
 
2921         if (isNaN(number) || number === Infinity || number === -Infinity) {
 
2924         // 3. Let integer be ToInteger(number).
 
2925         var integer = ToInteger(number);
 
2926         // 4. If integer is not equal to number, return false.
 
2927         if (integer !== number) {
 
2930         // 5. Otherwise, return true.
 
2936 if (!("isNaN"in Number
 
2940 /* global CreateMethodProperty, Type */
 
2943         // 20.1.2.4. Number.isNaN ( number )
 
2944         CreateMethodProperty(Number, 'isNaN', function isNaN(number) {
 
2945                 // 1. If Type(number) is not Number, return false.
 
2946                 if (Type(number) !== 'number') {
 
2949                 // 2. If number is NaN, return true.
 
2950                 if (that.isNaN(number)) {
 
2953                 // 3. Otherwise, return false.
 
2960 if (!("isSafeInteger"in Number
 
2963 // Number.isSafeInteger
 
2964 /* global CreateMethodProperty, Type, ToInteger */
 
2965 // 20.1.2.5. Number.isSafeInteger ( number )
 
2966 CreateMethodProperty(Number, 'isSafeInteger', function isSafeInteger(number) {
 
2967         // 1. If Type(number) is not Number, return false.
 
2968         if (Type(number) !== 'number') {
 
2971         // 2. If number is NaN, +∞, or -∞, return false.
 
2972         if (isNaN(number) || number === Infinity || number === -Infinity) {
 
2975         // 3. Let integer be ToInteger(number).
 
2976         var integer = ToInteger(number);
 
2977         // 4. If integer is not equal to number, return false.
 
2978         if (integer !== number) {
 
2981         // 5. If abs(integer) ≤ 2^53-1, return true.
 
2982         if (Math.abs(integer) <= (Math.pow(2, 53) - 1)) {
 
2985         // 6. Otherwise, return false.
 
2991 if (!("parseFloat"in Number
 
2994 // Number.parseFloat
 
2995 /* global CreateMethodProperty */
 
2996 // 20.1.2.12. Number.parseFloat ( string )
 
2997 // The value of the Number.parseFloat data property is the same built-in function object that is the value of the  parseFloat property of the global object defined in 18.2.4.
 
2998 CreateMethodProperty(Number, 'parseFloat', parseFloat);
 
3002 if (!("parseInt"in Number
 
3006 /* global CreateMethodProperty */
 
3007 // 20.1.2.13. Number.parseInt ( string, radix )
 
3008 // The value of the Number.parseInt data property is the same built-in function object that is the value of the  parseInt property of the global object defined in 18.2.5.
 
3009 CreateMethodProperty(Number, 'parseInt', parseInt);
 
3013 if (!("name"in Function.prototype&&"x"===function x(){}.name
 
3016 // Function.prototype.name
 
3020         accessorName = 'name',
 
3021         fnNameMatchRegex = /^\s*function\s+([^\(\s]*)\s*/,
 
3022         $Function = Function,
 
3023         FunctionName = 'Function',
 
3024         FunctionProto = $Function.prototype,
 
3025         FunctionProtoCtor = FunctionProto.constructor,
 
3027         getFunctionName = function(fn) {
 
3030                 if (fn === $Function || fn === FunctionProtoCtor) {
 
3031                         name = FunctionName;
 
3033                 else if (fn !== FunctionProto) {
 
3034                         match = ('' + fn).match(fnNameMatchRegex);
 
3035                         name = match && match[1];
 
3041         Object.defineProperty(FunctionProto, accessorName, {
 
3042                 get: function Function$name() {
 
3045                         fnName = getFunctionName(fn);
 
3047                         // Since named function definitions have immutable names, also memoize the
 
3048                         // output by defining the `name` property directly on this Function
 
3049                         // instance so the accessor function will not need to be invoked again.
 
3050                         if (fn !== FunctionProto) {
 
3051                                 Object.defineProperty(fn, accessorName, {
 
3066 if (!("EPSILON"in Number
 
3070 // 20.1.2.1. Number.EPSILON
 
3071 // The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1 that is representable as a Number value, which is approximately 2.2204460492503130808472633361816 x 10-16.
 
3072 // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
 
3073 Object.defineProperty(Number, 'EPSILON', {
 
3075         configurable: false,
 
3077         value: Math.pow(2, -52)
 
3082 if (!("MAX_SAFE_INTEGER"in Number
 
3085 // Number.MAX_SAFE_INTEGER
 
3086 // 20.1.2.6. Number.MAX_SAFE_INTEGER
 
3087 // The value of Number.MAX_SAFE_INTEGER is 9007199254740991 (2^53-1).
 
3088 // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
 
3089 Object.defineProperty(Number, 'MAX_SAFE_INTEGER', {
 
3091         configurable: false,
 
3093         value: Math.pow(2, 53) - 1
 
3098 if (!("MIN_SAFE_INTEGER"in Number
 
3101 // Number.MIN_SAFE_INTEGER
 
3102 // 20.1.2.8. Number.MIN_SAFE_INTEGER
 
3103 // The value of Number.MIN_SAFE_INTEGER is -9007199254740991 (-(253-1)).
 
3104 // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
 
3105 Object.defineProperty(Number, 'MIN_SAFE_INTEGER', {
 
3107         configurable: false,
 
3109         value: -(Math.pow(2, 53) - 1)
 
3114 if (!("freeze"in Object
 
3118 /* global CreateMethodProperty */
 
3119 // 19.1.2.6. Object.freeze ( O )
 
3120 CreateMethodProperty(Object, 'freeze', function freeze(O) {
 
3121         // This feature cannot be implemented fully as a polyfill.
 
3122         // We choose to silently fail which allows "securable" code
 
3123         // to "gracefully" degrade to working but insecure code.
 
3129 if (!("getOwnPropertyDescriptor"in Object&&"function"==typeof Object.getOwnPropertyDescriptor&&function(){try{var t={}
 
3130 return t.test=0,0===Object.getOwnPropertyDescriptor(t,"test").value}catch(e){return!1}}()
 
3133 // Object.getOwnPropertyDescriptor
 
3134 /* global CreateMethodProperty */
 
3136         var call = Function.prototype.call;
 
3137         var prototypeOfObject = Object.prototype;
 
3138         var owns = call.bind(prototypeOfObject.hasOwnProperty);
 
3142         var supportsAccessors;
 
3143         if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
 
3144             lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
 
3145             lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
 
3147         function doesGetOwnPropertyDescriptorWork(object) {
 
3149                 object.sentinel = 0;
 
3150                 return Object.getOwnPropertyDescriptor(
 
3154             } catch (exception) {
 
3158         // check whether getOwnPropertyDescriptor works if it's given. Otherwise,
 
3160         if (Object.defineProperty) {
 
3161             var getOwnPropertyDescriptorWorksOnObject =
 
3162                 doesGetOwnPropertyDescriptorWork({});
 
3163             var getOwnPropertyDescriptorWorksOnDom = typeof document == "undefined" ||
 
3164                 doesGetOwnPropertyDescriptorWork(document.createElement("div"));
 
3165             if (!getOwnPropertyDescriptorWorksOnDom ||
 
3166                 !getOwnPropertyDescriptorWorksOnObject
 
3168                 var getOwnPropertyDescriptorFallback = Object.getOwnPropertyDescriptor;
 
3172         if (!Object.getOwnPropertyDescriptor || getOwnPropertyDescriptorFallback) {
 
3173             var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a non-object: ";
 
3175             CreateMethodProperty(Object, 'getOwnPropertyDescriptor', function getOwnPropertyDescriptor(object, property) {
 
3176                 if ((typeof object != "object" && typeof object != "function") || object === null) {
 
3177                     throw new TypeError(ERR_NON_OBJECT + object);
 
3180                 // make a valiant attempt to use the real getOwnPropertyDescriptor
 
3181                 // for I8's DOM elements.
 
3182                 if (getOwnPropertyDescriptorFallback) {
 
3184                         return getOwnPropertyDescriptorFallback.call(Object, object, property);
 
3185                     } catch (exception) {
 
3186                         // try the shim if the real one doesn't work
 
3190                 // If object does not owns property return undefined immediately.
 
3191                 if (!owns(object, property)) {
 
3195                 // If object has a property then it's for sure both `enumerable` and
 
3197                 var descriptor = { enumerable: true, configurable: true };
 
3199                 // If JS engine supports accessor properties then property may be a
 
3200                 // getter or setter.
 
3201                 if (supportsAccessors) {
 
3202                     // Unfortunately `__lookupGetter__` will return a getter even
 
3203                     // if object has own non getter property along with a same named
 
3204                     // inherited getter. To avoid misbehavior we temporary remove
 
3205                     // `__proto__` so that `__lookupGetter__` will return getter only
 
3206                     // if it's owned by an object.
 
3207                     var prototype = object.__proto__;
 
3208                     object.__proto__ = prototypeOfObject;
 
3210                     var getter = lookupGetter(object, property);
 
3211                     var setter = lookupSetter(object, property);
 
3213                     // Once we have getter and setter we can put values back.
 
3214                     object.__proto__ = prototype;
 
3216                     if (getter || setter) {
 
3218                             descriptor.get = getter;
 
3221                             descriptor.set = setter;
 
3223                         // If it was accessor property we're done and return here
 
3224                         // in order to avoid adding `value` to the descriptor.
 
3229                 // If we got this far we know that object has an own property that is
 
3230                 // not an accessor so we set it as a value and return descriptor.
 
3231                 descriptor.value = object[property];
 
3232                         descriptor.writable = true;
 
3240 if (!("getOwnPropertyNames"in Object
 
3243 // Object.getOwnPropertyNames
 
3244 /* global CreateMethodProperty */
 
3246 var toString = ({}).toString;
 
3247 var split = ''.split;
 
3249 CreateMethodProperty(Object, 'getOwnPropertyNames', function getOwnPropertyNames(object) {
 
3253         // Non-enumerable properties cannot be discovered but can be checked for by name.
 
3254         // Define those used internally by JS to allow an incomplete solution
 
3255         var commonProps = ['length', "name", "arguments", "caller", "prototype", "observe", "unobserve"];
 
3257         if (typeof object === 'undefined' || object === null) {
 
3258                 throw new TypeError('Cannot convert undefined or null to object');
 
3261         // Polyfill.io fallback for non-array-like strings which exist in some ES3 user-agents (IE 8)
 
3262         object = toString.call(object) == '[object String]' ? split.call(object, '') : Object(object);
 
3264         // Enumerable properties only
 
3265         for (key in object) {
 
3266                 if (Object.prototype.hasOwnProperty.call(object, key)) {
 
3271         // Check for and add the common non-enumerable properties
 
3272         for (var i=0, s=commonProps.length; i<s; i++) {
 
3273                 if (commonProps[i] in object) buffer.push(commonProps[i]);
 
3281 if (!("getPrototypeOf"in Object
 
3284 // Object.getPrototypeOf
 
3285 /* global CreateMethodProperty */
 
3286 // Based on: https://github.com/es-shims/es5-shim/blob/master/es5-sham.js
 
3288 // https://github.com/es-shims/es5-shim/issues#issue/2
 
3289 // http://ejohn.org/blog/objectgetprototypeof/
 
3290 // recommended by fschaefer on github
 
3292 // sure, and webreflection says ^_^
 
3293 // ... this will nerever possibly return null
 
3294 // ... Opera Mini breaks here with infinite loops
 
3295 CreateMethodProperty(Object, 'getPrototypeOf', function getPrototypeOf(object) {
 
3296         if (object !== Object(object)) {
 
3297                 throw new TypeError('Object.getPrototypeOf called on non-object');
 
3299         var proto = object.__proto__;
 
3300         if (proto || proto === null) {
 
3302         } else if (typeof object.constructor == 'function' && object instanceof object.constructor) {
 
3303     return object.constructor.prototype;
 
3304   } else if (object instanceof Object) {
 
3305                 return Object.prototype;
 
3307                 // Correctly return null for Objects created with `Object.create(null)`
 
3308                 // (shammed or native) or `{ __proto__: null}`.  Also returns null for
 
3309                 // cross-realm objects on browsers that lack `__proto__` support (like
 
3310                 // IE <11), but that's the best we can do.
 
3321 /* global CreateMethodProperty, SameValue */
 
3322 // 19.1.2.12. Object.is ( value1, value2 )
 
3323 CreateMethodProperty(Object, 'is', function is(value1, value2) {
 
3324         // 1. Return SameValue(value1, value2).
 
3325         return SameValue(value1, value2);
 
3330 if (!("keys"in Object&&function(){return 2===Object.keys(arguments).length}(1,2)&&function(){try{return Object.keys(""),!0}catch(t){return!1}}()
 
3334 /* global CreateMethodProperty */
 
3335 CreateMethodProperty(Object, "keys", (function() {
 
3338         // modified from https://github.com/es-shims/object-keys
 
3340         var has = Object.prototype.hasOwnProperty;
 
3341         var toStr = Object.prototype.toString;
 
3342         var isEnumerable = Object.prototype.propertyIsEnumerable;
 
3343         var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
 
3344         var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
 
3351                 'propertyIsEnumerable',
 
3354         var equalsConstructorPrototype = function (o) {
 
3355                 var ctor = o.constructor;
 
3356                 return ctor && ctor.prototype === o;
 
3358         var excludedKeys = {
 
3362                 $frameElement: true,
 
3376                 $webkitIndexedDB: true,
 
3377                 $webkitStorageInfo: true,
 
3380         var hasAutomationEqualityBug = (function () {
 
3382                 if (typeof window === 'undefined') { return false; }
 
3383                 for (var k in window) {
 
3385                                 if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
 
3387                                                 equalsConstructorPrototype(window[k]);
 
3398         var equalsConstructorPrototypeIfNotBuggy = function (o) {
 
3400                 if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
 
3401                         return equalsConstructorPrototype(o);
 
3404                         return equalsConstructorPrototype(o);
 
3410         function isArgumentsObject(value) {
 
3411                 var str = toStr.call(value);
 
3412                 var isArgs = str === '[object Arguments]';
 
3414                         isArgs = str !== '[object Array]' &&
 
3416                                 typeof value === 'object' &&
 
3417                                 typeof value.length === 'number' &&
 
3418                                 value.length >= 0 &&
 
3419                                 toStr.call(value.callee) === '[object Function]';
 
3424         return function keys(object) {
 
3425                 var isFunction = toStr.call(object) === '[object Function]';
 
3426                 var isArguments = isArgumentsObject(object);
 
3427                 var isString = toStr.call(object) === '[object String]';
 
3430                 if (object === undefined || object === null) {
 
3431                         throw new TypeError('Cannot convert undefined or null to object');
 
3434                 var skipProto = hasProtoEnumBug && isFunction;
 
3435                 if (isString && object.length > 0 && !has.call(object, 0)) {
 
3436                         for (var i = 0; i < object.length; ++i) {
 
3437                                 theKeys.push(String(i));
 
3441                 if (isArguments && object.length > 0) {
 
3442                         for (var j = 0; j < object.length; ++j) {
 
3443                                 theKeys.push(String(j));
 
3446                         for (var name in object) {
 
3447                                 if (!(skipProto && name === 'prototype') && has.call(object, name)) {
 
3448                                         theKeys.push(String(name));
 
3453                 if (hasDontEnumBug) {
 
3454                         var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
 
3456                         for (var k = 0; k < dontEnums.length; ++k) {
 
3457                                 if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
 
3458                                         theKeys.push(dontEnums[k]);
 
3468 if (!("assign"in Object
 
3472 /* global CreateMethodProperty, Get, ToObject */
 
3473 // 19.1.2.1 Object.assign ( target, ...sources )
 
3474 CreateMethodProperty(Object, 'assign', function assign(target, source) { // eslint-disable-line no-unused-vars
 
3475         // 1. Let to be ? ToObject(target).
 
3476         var to = ToObject(target);
 
3478         // 2. If only one argument was passed, return to.
 
3479         if (arguments.length === 1) {
 
3483         // 3. Let sources be the List of argument values starting with the second argument
 
3484         var sources = Array.prototype.slice.call(arguments, 1);
 
3486         // 4. For each element nextSource of sources, in ascending index order, do
 
3491         for (index1 = 0; index1 < sources.length; index1++) {
 
3492                 var nextSource = sources[index1];
 
3493                 // a. If nextSource is undefined or null, let keys be a new empty List.
 
3494                 if (nextSource === undefined || nextSource === null) {
 
3498                         // i. Let from be ! ToObject(nextSource).
 
3499                         from = ToObject(nextSource);
 
3500                         // ii. Let keys be ? from.[[OwnPropertyKeys]]().
 
3502                                 This step in our polyfill is not complying with the specification.
 
3503                                 [[OwnPropertyKeys]] is meant to return ALL keys, including non-enumerable and symbols.
 
3504                                 TODO: When we have Reflect.ownKeys, use that instead as it is the userland equivalent of [[OwnPropertyKeys]].
 
3506                         keys = Object.keys(from);
 
3509                 // c. For each element nextKey of keys in List order, do
 
3510                 for (index2 = 0; index2 < keys.length; index2++) {
 
3511                         var nextKey = keys[index2];
 
3514                                 // i. Let desc be ? from.[[GetOwnProperty]](nextKey).
 
3515                                 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
 
3516                                 // ii. If desc is not undefined and desc.[[Enumerable]] is true, then
 
3517                                 enumerable = desc !== undefined && desc.enumerable === true;
 
3519                                 // Polyfill.io - We use Object.prototype.propertyIsEnumerable as a fallback
 
3520                                 // because `Object.getOwnPropertyDescriptor(window.location, 'hash')` causes Internet Explorer 11 to crash.
 
3521                                 enumerable = Object.prototype.propertyIsEnumerable.call(from, nextKey);
 
3524                                 // 1. Let propValue be ? Get(from, nextKey).
 
3525                                 var propValue = Get(from, nextKey);
 
3526                                 // 2. Perform ? Set(to, nextKey, propValue, true).
 
3527                                 to[nextKey] = propValue;
 
3537 if (!("defineProperties"in Object
 
3540 // Object.defineProperties
 
3541 /* global CreateMethodProperty, Get, ToObject, Type */
 
3542 // 19.1.2.3. Object.defineProperties ( O, Properties )
 
3543 CreateMethodProperty(Object, 'defineProperties', function defineProperties(O, Properties) {
 
3544         // 1. If Type(O) is not Object, throw a TypeError exception.
 
3545         if (Type(O) !== 'object') {
 
3546                 throw new TypeError('Object.defineProperties called on non-object');
 
3548         // 2. Let props be ? ToObject(Properties).
 
3549         var props = ToObject(Properties);
 
3550         // 3. Let keys be ? props.[[OwnPropertyKeys]]().
 
3552                 Polyfill.io - This step in our polyfill is not complying with the specification.
 
3553                 [[OwnPropertyKeys]] is meant to return ALL keys, including non-enumerable and symbols.
 
3554                 TODO: When we have Reflect.ownKeys, use that instead as it is the userland equivalent of [[OwnPropertyKeys]].
 
3556         var keys = Object.keys(props);
 
3557         // 4. Let descriptors be a new empty List.
 
3558         var descriptors = [];
 
3559         // 5. For each element nextKey of keys in List order, do
 
3560         for (var i = 0; i < keys.length; i++) {
 
3561                 var nextKey = keys[i];
 
3562                 // a. Let propDesc be ? props.[[GetOwnProperty]](nextKey).
 
3563                 var propDesc = Object.getOwnPropertyDescriptor(props, nextKey);
 
3564                 // b. If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
 
3565                 if (propDesc !== undefined && propDesc.enumerable) {
 
3566                         // i. Let descObj be ? Get(props, nextKey).
 
3567                         var descObj = Get(props, nextKey);
 
3568                         // ii. Let desc be ? ToPropertyDescriptor(descObj).
 
3569                         // Polyfill.io - We skip this step because Object.defineProperty deals with it.
 
3570                         // TODO: Implement this step?
 
3572                         // iii. Append the pair (a two element List) consisting of nextKey and desc to the end of descriptors.
 
3573                         descriptors.push([nextKey, desc]);
 
3576         // 6. For each pair from descriptors in list order, do
 
3577         for (var i = 0; i < descriptors.length; i++){
 
3578                 // a. Let P be the first element of pair.
 
3579                 var P = descriptors[i][0];
 
3580                 // b. Let desc be the second element of pair.
 
3581                 var desc = descriptors[i][1];
 
3582                 // c. Perform ? DefinePropertyOrThrow(O, P, desc).
 
3583                 Object.defineProperty(O, P, desc);
 
3591 if (!("create"in Object
 
3595 /* global CreateMethodProperty, Type */
 
3596 CreateMethodProperty(Object, 'create', function create(O, properties) {
 
3597         // 1. If Type(O) is neither Object nor Null, throw a TypeError exception.
 
3598         if (Type(O) !== 'object' && Type(O) !== 'null') {
 
3599                 throw new TypeError('Object prototype may only be an Object or null');
 
3601         // 2. Let obj be ObjectCreate(O).
 
3602         var obj = new Function('e', 'function Object() {}Object.prototype=e;return new Object')(O);
 
3604         obj.constructor.prototype = O;
 
3606         // 3. If Properties is not undefined, then
 
3607         if (1 in arguments) {
 
3608                 // a. Return ? ObjectDefineProperties(obj, Properties).
 
3609                 return Object.defineProperties(obj, properties);
 
3618 // _ESAbstract.OrdinaryCreateFromConstructor
 
3619 /* global GetPrototypeFromConstructor */
 
3620 // 9.1.13. OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
 
3621 function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { // eslint-disable-line no-unused-vars
 
3622         var internalSlotsList = arguments[2] || {};
 
3623         // 1. Assert: intrinsicDefaultProto is a String value that is this specification's name of an intrinsic object.
 
3624         // The corresponding object must be an intrinsic that is intended to be used as the[[Prototype]] value of an object.
 
3626         // 2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
 
3627         var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto);
 
3629         // 3. Return ObjectCreate(proto, internalSlotsList).
 
3630         // Polyfill.io - We do not pass internalSlotsList to Object.create because Object.create does not use the default ordinary object definitions specified in 9.1.
 
3631         var obj = Object.create(proto);
 
3632         for (var name in internalSlotsList) {
 
3633                 if (Object.prototype.hasOwnProperty.call(internalSlotsList, name)) {
 
3634                         Object.defineProperty(obj, name, {
 
3638                                 value: internalSlotsList[name]
 
3645 // _ESAbstract.Construct
 
3646 /* global IsConstructor, OrdinaryCreateFromConstructor, Call */
 
3647 // 7.3.13. Construct ( F [ , argumentsList [ , newTarget ]] )
 
3648 function Construct(F /* [ , argumentsList [ , newTarget ]] */) { // eslint-disable-line no-unused-vars
 
3649         // 1. If newTarget is not present, set newTarget to F.
 
3650         var newTarget = arguments.length > 2 ? arguments[2] : F;
 
3652         // 2. If argumentsList is not present, set argumentsList to a new empty List.
 
3653         var argumentsList = arguments.length > 1 ? arguments[1] : [];
 
3655         // 3. Assert: IsConstructor(F) is true.
 
3656         if (!IsConstructor(F)) {
 
3657                 throw new TypeError('F must be a constructor.');
 
3660         // 4. Assert: IsConstructor(newTarget) is true.
 
3661         if (!IsConstructor(newTarget)) {
 
3662                 throw new TypeError('newTarget must be a constructor.');
 
3665         // 5. Return ? F.[[Construct]](argumentsList, newTarget).
 
3666         // Polyfill.io - If newTarget is the same as F, it is equivalent to new F(...argumentsList).
 
3667         if (newTarget === F) {
 
3668                 return new (Function.prototype.bind.apply(F, [null].concat(argumentsList)))();
 
3670                 // Polyfill.io - This is mimicking section 9.2.2 step 5.a.
 
3671                 var obj = OrdinaryCreateFromConstructor(newTarget, Object.prototype);
 
3672                 return Call(F, obj, argumentsList);
 
3676 // _ESAbstract.ArraySpeciesCreate
 
3677 /* global IsArray, ArrayCreate, Get, Type, IsConstructor, Construct */
 
3678 // 9.4.2.3. ArraySpeciesCreate ( originalArray, length )
 
3679 function ArraySpeciesCreate(originalArray, length) { // eslint-disable-line no-unused-vars
 
3680         // 1. Assert: length is an integer Number ≥ 0.
 
3681         // 2. If length is -0, set length to +0.
 
3682         if (1/length === -Infinity) {
 
3686         // 3. Let isArray be ? IsArray(originalArray).
 
3687         var isArray = IsArray(originalArray);
 
3689         // 4. If isArray is false, return ? ArrayCreate(length).
 
3690         if (isArray === false) {
 
3691                 return ArrayCreate(length);
 
3694         // 5. Let C be ? Get(originalArray, "constructor").
 
3695         var C = Get(originalArray, 'constructor');
 
3697         // Polyfill.io - We skip this section as not sure how to make a cross-realm normal Array, a same-realm Array.
 
3698         // 6. If IsConstructor(C) is true, then
 
3699         // if (IsConstructor(C)) {
 
3700                 // a. Let thisRealm be the current Realm Record.
 
3701                 // b. Let realmC be ? GetFunctionRealm(C).
 
3702                 // c. If thisRealm and realmC are not the same Realm Record, then
 
3703                         // i. If SameValue(C, realmC.[[Intrinsics]].[[%Array%]]) is true, set C to undefined.
 
3705         // 7. If Type(C) is Object, then
 
3706         if (Type(C) === 'object') {
 
3707                 // a. Set C to ? Get(C, @@species).
 
3708                 C = 'Symbol' in this && 'species' in this.Symbol ? Get(C, this.Symbol.species) : undefined;
 
3709                 // b. If C is null, set C to undefined.
 
3714         // 8. If C is undefined, return ? ArrayCreate(length).
 
3715         if (C === undefined) {
 
3716                 return ArrayCreate(length);
 
3718         // 9. If IsConstructor(C) is false, throw a TypeError exception.
 
3719         if (!IsConstructor(C)) {
 
3720                 throw new TypeError('C must be a constructor');
 
3722         // 10. Return ? Construct(C, « length »).
 
3723         return Construct(C, [length]);
 
3725 if (!("filter"in Array.prototype
 
3728 // Array.prototype.filter
 
3729 /* global CreateMethodProperty, ToObject, ToLength, Get, IsCallable, ArraySpeciesCreate, ToString, HasProperty, ToBoolean, Call, CreateDataPropertyOrThrow */
 
3730 // 22.1.3.7. Array.prototype.filter ( callbackfn [ , thisArg ] )
 
3731 CreateMethodProperty(Array.prototype, 'filter', function filter(callbackfn /* [ , thisArg ] */) {
 
3732         // 1. Let O be ? ToObject(this value).
 
3733         var O = ToObject(this);
 
3734         // 2. Let len be ? ToLength(? Get(O, "length")).
 
3735         var len = ToLength(Get(O, "length"));
 
3736         // 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
 
3737         if (IsCallable(callbackfn) === false) {
 
3738                 throw new TypeError(callbackfn + ' is not a function');
 
3740         // 4. If thisArg is present, let T be thisArg; else let T be undefined.
 
3741         var T = arguments.length > 1 ? arguments[1] : undefined;
 
3742         // 5. Let A be ? ArraySpeciesCreate(O, 0).
 
3743         var A = ArraySpeciesCreate(O, 0);
 
3748         // 8. Repeat, while k < len
 
3750                 // a. Let Pk be ! ToString(k).
 
3751                 var Pk = ToString(k);
 
3752                 // b. Let kPresent be ? HasProperty(O, Pk).
 
3753                 var kPresent = HasProperty(O, Pk);
 
3754                 // c. If kPresent is true, then
 
3756                         // i. Let kValue be ? Get(O, Pk).
 
3757                         var kValue = Get(O, Pk);
 
3758                         // ii. Let selected be ToBoolean(? Call(callbackfn, T, « kValue, k, O »)).
 
3759                         var selected = ToBoolean(Call(callbackfn, T, [kValue, k, O]));
 
3760                         // iii. If selected is true, then
 
3762                                 // 1. Perform ? CreateDataPropertyOrThrow(A, ! ToString(to), kValue)
 
3763                                 CreateDataPropertyOrThrow(A, ToString(to), kValue);
 
3764                                 // 2. Increase to by 1.
 
3769                 // d. Increase k by 1.
 
3778 if (!("map"in Array.prototype
 
3781 // Array.prototype.map
 
3782 /* global ArraySpeciesCreate, Call, CreateDataPropertyOrThrow, CreateMethodProperty, Get, HasProperty, IsCallable, ToLength, ToObject, ToString */
 
3783 /* global CreateMethodProperty, ToObject, ToLength, Get, ArraySpeciesCreate, ToString, HasProperty, Call, CreateDataPropertyOrThrow */
 
3784 // 22.1.3.16. Array.prototype.map ( callbackfn [ , thisArg ] )
 
3785 CreateMethodProperty(Array.prototype, 'map', function map(callbackfn /* [ , thisArg ] */) {
 
3786         // 1. Let O be ? ToObject(this value).
 
3787         var O = ToObject(this);
 
3788         // 2. Let len be ? ToLength(? Get(O, "length")).
 
3789         var len = ToLength(Get(O, "length"));
 
3790         // 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
 
3791         if (IsCallable(callbackfn) === false) {
 
3792                 throw new TypeError(callbackfn + ' is not a function');
 
3794         // 4. If thisArg is present, let T be thisArg; else let T be undefined.
 
3795         var T = arguments.length > 1 ? arguments[1] : undefined;
 
3796         // 5. Let A be ? ArraySpeciesCreate(O, len).
 
3797         var A = ArraySpeciesCreate(O, len);
 
3800         // 7. Repeat, while k < len
 
3802                 // a. Let Pk be ! ToString(k).
 
3803                 var Pk = ToString(k);
 
3804                 // b. Let kPresent be ? HasProperty(O, Pk).
 
3805                 var kPresent = HasProperty(O, Pk);
 
3806                 // c. If kPresent is true, then
 
3808                         // i. Let kValue be ? Get(O, Pk).
 
3809                         var kValue = Get(O, Pk);
 
3810                         // ii. Let mappedValue be ? Call(callbackfn, T, « kValue, k, O »).
 
3811                         var mappedValue = Call(callbackfn, T, [kValue, k, O]);
 
3812                         // iii. Perform ? CreateDataPropertyOrThrow(A, Pk, mappedValue).
 
3813                         CreateDataPropertyOrThrow(A, Pk, mappedValue);
 
3815                 // d. Increase k by 1.
 
3828 /* global ArrayCreate, Construct, CreateDataPropertyOrThrow, CreateMethodProperty, IsConstructor, ToString */
 
3829 // 22.1.2.3. Array.of ( ...items )
 
3830 CreateMethodProperty(Array, 'of', function of() {
 
3831         // 1. Let len be the actual number of arguments passed to this function.
 
3832         var len = arguments.length;
 
3833         // 2. Let items be the List of arguments passed to this function.
 
3834         var items = arguments;
 
3835         // 3. Let C be the this value.
 
3837         // 4. If IsConstructor(C) is true, then
 
3838         if (IsConstructor(C)) {
 
3839                 // a. Let A be ? Construct(C, « len »).
 
3840                 var A = Construct(C, [len]);
 
3843                 // a. Let A be ? ArrayCreate(len).
 
3844                 var A = ArrayCreate(len);
 
3848         // 7. Repeat, while k < len
 
3850                 // a. Let kValue be items[k].
 
3851                 var kValue = items[k];
 
3852                 // b. Let Pk be ! ToString(k).
 
3853                 var Pk = ToString(k);
 
3854                 // c. Perform ? CreateDataPropertyOrThrow(A, Pk, kValue).
 
3855                 CreateDataPropertyOrThrow(A, Pk, kValue);
 
3856                 // d. Increase k by 1.
 
3860         // 8. Perform ? Set(A, "length", len, true)
 
3868 if (!("seal"in Object&&function(){try{return Object.seal("1"),!0}catch(t){return!1}}
 
3872 /* global CreateMethodProperty, Type */
 
3873 // 19.1.2.19 Object.seal ( O )
 
3874 (function(originalObjectSeal) {
 
3875     CreateMethodProperty(Object, 'seal', function seal(O) {
 
3876         // 1. If Type(O) is not Object, return O.
 
3877         if (Type(O) === 'object') {
 
3880         // 2. Let status be ? SetIntegrityLevel(O, "sealed").
 
3881         // 3. If status is false, throw a TypeError exception.
 
3883         return originalObjectSeal ? originalObjectSeal(O) : O;
 
3891 // Object.setPrototypeOf
 
3892 /* global CreateMethodProperty */
 
3893 // ES6-shim 0.16.0 (c) 2013-2014 Paul Miller (http://paulmillr.com)
 
3894 // ES6-shim may be freely distributed under the MIT license.
 
3895 // For more details and documentation:
 
3896 // https://github.com/paulmillr/es6-shim/
 
3898  // NOTE:  This versions needs object ownership
 
3899   //        because every promoted object needs to be reassigned
 
3900   //        otherwise uncompatible browsers cannot work as expected
 
3902   // NOTE:  This might need es5-shim or polyfills upfront
 
3903   //        because it's based on ES5 API.
 
3904   //        (probably just an IE <= 8 problem)
 
3906   // NOTE:  nodejs is fine in version 0.8, 0.10, and future versions.
 
3908         if (Object.setPrototypeOf) { return; }
 
3910         /*jshint proto: true */
 
3911         // @author    Andrea Giammarchi - @WebReflection
 
3913         var getOwnPropertyNames = Object.getOwnPropertyNames;
 
3914         var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
 
3915         var create = Object.create;
 
3916         var defineProperty = Object.defineProperty;
 
3917         var getPrototypeOf = Object.getPrototypeOf;
 
3918         var objProto = Object.prototype;
 
3920         var copyDescriptors = function (target, source) {
 
3921                 // define into target descriptors from source
 
3922                 getOwnPropertyNames(source).forEach(function (key) {
 
3926                                 getOwnPropertyDescriptor(source, key)
 
3931         // used as fallback when no promotion is possible
 
3932         var createAndCopy = function setPrototypeOf(origin, proto) {
 
3933                 return copyDescriptors(create(proto), origin);
 
3937                 // this might fail for various reasons
 
3938                 // ignore if Chrome cought it at runtime
 
3939                 set = getOwnPropertyDescriptor(objProto, '__proto__').set;
 
3941                 // setter not poisoned, it can promote
 
3943                 sPOf = function setPrototypeOf(origin, proto) {
 
3944                         set.call(origin, proto);
 
3948                 // do one or more feature detections
 
3949                 set = { __proto__: null };
 
3950                 // if proto does not work, needs to fallback
 
3951                 // some Opera, Rhino, ducktape
 
3952                 if (set instanceof Object) {
 
3953                         sPOf = createAndCopy;
 
3955                         // verify if null objects are buggy
 
3956                         /* eslint-disable no-proto */
 
3957                         set.__proto__ = objProto;
 
3958                         /* eslint-enable no-proto */
 
3959                         // if null objects are buggy
 
3960                         // nodejs 0.8 to 0.10
 
3961                         if (set instanceof Object) {
 
3962                                 sPOf = function setPrototypeOf(origin, proto) {
 
3963                                         // use such bug to promote
 
3964                                         /* eslint-disable no-proto */
 
3965                                         origin.__proto__ = proto;
 
3966                                         /* eslint-enable no-proto */
 
3970                                 // try to use proto or fallback
 
3971                                 // Safari, old Firefox, many others
 
3972                                 sPOf = function setPrototypeOf(origin, proto) {
 
3973                                         // if proto is not null
 
3974                                         if (getPrototypeOf(origin)) {
 
3975                                                 // use __proto__ to promote
 
3976                                                 /* eslint-disable no-proto */
 
3977                                                 origin.__proto__ = proto;
 
3978                                                 /* eslint-enable no-proto */
 
3981                                                 // otherwise unable to promote: fallback
 
3982                                                 return createAndCopy(origin, proto);
 
3988         CreateMethodProperty(Object, 'setPrototypeOf', sPOf);
 
3990 if (!("Promise"in this
 
3994 !function(n){function t(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return n[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var e={};t.m=n,t.c=e,t.i=function(n){return n},t.d=function(n,e,r){t.o(n,e)||Object.defineProperty(n,e,{configurable:!1,enumerable:!0,get:r})},t.n=function(n){var e=n&&n.__esModule?function(){return n["default"]}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},t.p="",t(t.s=100)}({100:/*!***********************!*\
 
3995   !*** ./src/global.js ***!
 
3996   \***********************/
 
3997 function(n,t,e){(function(n){var t=e(/*! ./yaku */5);try{n.Promise=t,window.Promise=t}catch(r){}}).call(t,e(/*! ./../~/webpack/buildin/global.js */2))},2:/*!***********************************!*\
 
3998   !*** (webpack)/buildin/global.js ***!
 
3999   \***********************************/
 
4000 function(n,t){var e;e=function(){return this}();try{e=e||Function("return this")()||(0,eval)("this")}catch(r){"object"==typeof window&&(e=window)}n.exports=e},5:/*!*********************!*\
 
4001   !*** ./src/yaku.js ***!
 
4002   \*********************/
 
4003 function(n,t,e){(function(t){!function(){"use strict";function e(){return rn[q][B]||D}function r(n){return n&&"object"==typeof n}function o(n){return"function"==typeof n}function i(n,t){return n instanceof t}function u(n){return i(n,M)}function c(n,t,e){if(!t(n))throw h(e)}function f(){try{return R.apply(S,arguments)}catch(n){return nn.e=n,nn}}function s(n,t){return R=n,S=t,f}function a(n,t){function e(){for(var e=0;e<o;)t(r[e],r[e+1]),r[e++]=P,r[e++]=P;o=0,r.length>n&&(r.length=n)}var r=A(n),o=0;return function(n,t){r[o++]=n,r[o++]=t,2===o&&rn.nextTick(e)}}function l(n,t){var e,r,u,c,f=0;if(!n)throw h(Q);var a=n[rn[q][z]];if(o(a))r=a.call(n);else{if(!o(n.next)){if(i(n,A)){for(e=n.length;f<e;)t(n[f],f++);return f}throw h(Q)}r=n}for(;!(u=r.next()).done;)if((c=s(t)(u.value,f++))===nn)throw o(r[G])&&r[G](),c.e;return f}function h(n){return new TypeError(n)}function v(n){return(n?"":V)+(new M).stack}function _(n,t){var e="on"+n.toLowerCase(),r=O[e];H&&H.listeners(n).length?n===Z?H.emit(n,t._v,t):H.emit(n,t):r?r({reason:t._v,promise:t}):rn[n](t._v,t)}function p(n){return n&&n._s}function d(n){if(p(n))return new n(tn);var t,e,r;return t=new n(function(n,o){if(t)throw h();e=n,r=o}),c(e,o),c(r,o),t}function w(n,t){var e=!1;return function(r){e||(e=!0,L&&(n[N]=v(!0)),t===Y?k(n,r):x(n,t,r))}}function y(n,t,e,r){return o(e)&&(t._onFulfilled=e),o(r)&&(n[J]&&_(X,n),t._onRejected=r),L&&(t._p=n),n[n._c++]=t,n._s!==$&&on(n,t),t}function m(n){if(n._umark)return!0;n._umark=!0;for(var t,e=0,r=n._c;e<r;)if(t=n[e++],t._onRejected||m(t))return!0}function j(n,t){function e(n){return r.push(n.replace(/^\s+|\s+$/g,""))}var r=[];return L&&(t[N]&&e(t[N]),function o(n){n&&K in n&&(o(n._next),e(n[K]+""),o(n._p))}(t)),(n&&n.stack?n.stack:n)+("\n"+r.join("\n")).replace(en,"")}function g(n,t){return n(t)}function x(n,t,e){var r=0,o=n._c;if(n._s===$)for(n._s=t,n._v=e,t===U&&(L&&u(e)&&(e.longStack=j(e,n)),un(n));r<o;)on(n,n[r++]);return n}function k(n,t){if(t===n&&t)return x(n,U,h(W)),n;if(t!==C&&(o(t)||r(t))){var e=s(b)(t);if(e===nn)return x(n,U,e.e),n;o(e)?(L&&p(t)&&(n._next=t),p(t)?T(n,t,e):rn.nextTick(function(){T(n,t,e)})):x(n,Y,t)}else x(n,Y,t);return n}function b(n){return n.then}function T(n,t,e){var r=s(e,t)(function(e){t&&(t=C,k(n,e))},function(e){t&&(t=C,x(n,U,e))});r===nn&&t&&(x(n,U,r.e),t=C)}var P,R,S,C=null,F="object"==typeof self,O=F?self:t,E=O.Promise,H=O.process,I=O.console,L=!1,A=Array,M=Error,U=1,Y=2,$=3,q="Symbol",z="iterator",B="species",D=q+"("+B+")",G="return",J="_uh",K="_pt",N="_st",Q="Invalid argument",V="\nFrom previous ",W="Chaining cycle detected for promise",X="rejectionHandled",Z="unhandledRejection",nn={e:C},tn=function(){},en=/^.+\/node_modules\/yaku\/.+\n?/gm,rn=function(n){var t,e=this;if(!r(e)||e._s!==P)throw h("Invalid this");if(e._s=$,L&&(e[K]=v()),n!==tn){if(!o(n))throw h(Q);t=s(n)(w(e,Y),w(e,U)),t===nn&&x(e,U,t.e)}};rn["default"]=rn,function(n,t){for(var e in t)n[e]=t[e]}(rn.prototype,{then:function(n,t){if(this._s===undefined)throw h();return y(this,d(rn.speciesConstructor(this,rn)),n,t)},"catch":function(n){return this.then(P,n)},"finally":function(n){return this.then(function(t){return rn.resolve(n()).then(function(){return t})},function(t){return rn.resolve(n()).then(function(){throw t})})},_c:0,_p:C}),rn.resolve=function(n){return p(n)?n:k(d(this),n)},rn.reject=function(n){return x(d(this),U,n)},rn.race=function(n){var t=this,e=d(t),r=function(n){x(e,Y,n)},o=function(n){x(e,U,n)},i=s(l)(n,function(n){t.resolve(n).then(r,o)});return i===nn?t.reject(i.e):e},rn.all=function(n){function t(n){x(o,U,n)}var e,r=this,o=d(r),i=[];return(e=s(l)(n,function(n,u){r.resolve(n).then(function(n){i[u]=n,--e||x(o,Y,i)},t)}))===nn?r.reject(e.e):(e||x(o,Y,[]),o)},rn.Symbol=O[q]||{},s(function(){Object.defineProperty(rn,e(),{get:function(){return this}})})(),rn.speciesConstructor=function(n,t){var r=n.constructor;return r?r[e()]||t:t},rn.unhandledRejection=function(n,t){I&&I.error("Uncaught (in promise)",L?t.longStack:j(n,t))},rn.rejectionHandled=tn,rn.enableLongStackTrace=function(){L=!0},rn.nextTick=F?function(n){E?new E(function(n){n()}).then(n):setTimeout(n)}:H.nextTick,rn._s=1;var on=a(999,function(n,t){var e,r;return(r=n._s!==U?t._onFulfilled:t._onRejected)===P?void x(t,n._s,n._v):(e=s(g)(r,n._v))===nn?void x(t,U,e.e):void k(t,e)}),un=a(9,function(n){m(n)||(n[J]=1,_(Z,n))});try{n.exports=rn}catch(cn){O.Yaku=rn}}()}).call(t,e(/*! ./../~/webpack/buildin/global.js */2))}});
 
4006 if (!("flags"in RegExp.prototype
 
4009 // RegExp.prototype.flags
 
4010 /* global Get, ToBoolean, Type */
 
4011 Object.defineProperty(RegExp.prototype, 'flags', {
 
4015                 // 21.2.5.3.1 Let R be the this value.
 
4018                 // 21.2.5.3.2 If Type(R) is not Object, throw a TypeError exception.
 
4019                 if (Type(R) !== 'object') {
 
4020                         throw new TypeError('Method called on incompatible type: must be an object.');
 
4022                 // 21.2.5.3.3 Let result be the empty String.
 
4025                 // 21.2.5.3.4 Let global be ToBoolean(? Get(R, "global")).
 
4026                 var global = ToBoolean(Get(R, 'global'));
 
4028                 // 21.2.5.3.5 If global is true, append the code unit 0x0067 (LATIN SMALL LETTER G) as the last code unit of result.
 
4033                 // 21.2.5.3.6 Let ignoreCase be ToBoolean(? Get(R, "ignoreCase")).
 
4034                 var ignoreCase = ToBoolean(Get(R, 'ignoreCase'));
 
4036                 // 21.2.5.3.7 If ignoreCase is true, append the code unit 0x0069 (LATIN SMALL LETTER I) as the last code unit of result.
 
4041                 // 21.2.5.3.8 Let multiline be ToBoolean(? Get(R, "multiline")).
 
4042                 var multiline = ToBoolean(Get(R, 'multiline'));
 
4044                 // 21.2.5.3.9 If multiline is true, append the code unit 0x006D (LATIN SMALL LETTER M) as the last code unit of result.
 
4049                 // 21.2.5.3.10 Let unicode be ToBoolean(? Get(R, "unicode")).
 
4050                 var unicode = ToBoolean(Get(R, 'unicode'));
 
4052                 // 21.2.5.3.11 If unicode is true, append the code unit 0x0075 (LATIN SMALL LETTER U) as the last code unit of result.
 
4057                 // 21.2.5.3.12 Let sticky be ToBoolean(? Get(R, "sticky")).
 
4058                 var sticky = ToBoolean(Get(R, 'sticky'));
 
4060                 // 21.2.5.3.13 If sticky is true, append the code unit 0x0079 (LATIN SMALL LETTER Y) as the last code unit of result.
 
4065                 // 21.2.5.3.14 Return result.
 
4072 if (!("fromCodePoint"in String&&1===String.fromCodePoint.length
 
4075 // String.fromCodePoint
 
4076 /* global CreateMethodProperty, IsArray, SameValue, ToInteger, ToNumber, UTF16Encoding */
 
4078 // 21.1.2.2. String.fromCodePoint ( ...codePoints )
 
4079 CreateMethodProperty(String, 'fromCodePoint', function fromCodePoint(_) { // eslint-disable-line no-unused-vars
 
4080         // Polyfill.io - List to store the characters whilst iterating over the code points.
 
4082         // 1. Let codePoints be a List containing the arguments passed to this function.
 
4083         var codePoints = arguments;
 
4084         // 2. Let length be the number of elements in codePoints.
 
4085         var length = arguments.length;
 
4086         // 3. Let elements be a new empty List.
 
4088         // 4. Let nextIndex be 0.
 
4090         // 5. Repeat, while nextIndex < length
 
4091         while (nextIndex < length) {
 
4092                 // Polyfill.io - We reset the elements List as we store the partial results in the result List.
 
4094                 // a. Let next be codePoints[nextIndex].
 
4095                 var next = codePoints[nextIndex];
 
4096                 // b. Let nextCP be ? ToNumber(next).
 
4097                 var nextCP = ToNumber(next);
 
4098                 // c. If SameValue(nextCP, ToInteger(nextCP)) is false, throw a RangeError exception.
 
4099                 if (SameValue(nextCP, ToInteger(nextCP)) === false) {
 
4100                         throw new RangeError('Invalid code point ' + Object.prototype.toString.call(nextCP));
 
4102                 // d. If nextCP < 0 or nextCP > 0x10FFFF, throw a RangeError exception.
 
4103                 if (nextCP < 0 || nextCP > 0x10FFFF) {
 
4104                         throw new RangeError('Invalid code point ' + Object.prototype.toString.call(nextCP));
 
4106                 // e. Append the elements of the UTF16Encoding of nextCP to the end of elements.
 
4107                 // Polyfill.io - UTF16Encoding can return a single codepoint or a list of multiple codepoints.
 
4108                 var cp = UTF16Encoding(nextCP);
 
4110                         elements = elements.concat(cp);
 
4114                 // f. Let nextIndex be nextIndex + 1.
 
4115                 nextIndex = nextIndex + 1;
 
4117                 // Polyfill.io - Retrieving the characters whilst iterating enables the function to work in a memory efficient and performant way.
 
4118                 result.push(String.fromCharCode.apply(null, elements));
 
4120         // 6. Return the String value whose elements are, in order, the elements in the List elements. If length is 0, the empty string is returned.
 
4121         return length === 0 ? '' : result.join('');
 
4126 if (!("codePointAt"in String.prototype
 
4129 // String.prototype.codePointAt
 
4130 /* global CreateMethodProperty, RequireObjectCoercible, ToInteger, ToString, UTF16Decode */
 
4131 // 21.1.3.3. String.prototype.codePointAt ( pos )
 
4132 CreateMethodProperty(String.prototype, 'codePointAt', function codePointAt(pos) {
 
4133         // 1. Let O be ? RequireObjectCoercible(this value).
 
4134         var O = RequireObjectCoercible(this);
 
4135         // 2. Let S be ? ToString(O).
 
4136         var S = ToString(O);
 
4137         // 3. Let position be ? ToInteger(pos).
 
4138         var position = ToInteger(pos);
 
4139         // 4. Let size be the length of S.
 
4140         var size = S.length;
 
4141         // 5. If position < 0 or position ≥ size, return undefined.
 
4142         if (position < 0 || position >= size) {
 
4145         // 6. Let first be the numeric value of the code unit at index position within the String S.
 
4146         var first = String.prototype.charCodeAt.call(S, position);
 
4147         // 7. If first < 0xD800 or first > 0xDBFF or position+1 = size, return first.
 
4148         if (first < 0xD800 || first > 0xDBFF || position + 1 === size) {
 
4151         // 8. Let second be the numeric value of the code unit at index position+1 within the String S.
 
4152         var second = String.prototype.charCodeAt.call(S, position + 1);
 
4153         // 9. If second < 0xDC00 or second > 0xDFFF, return first.
 
4154         if (second < 0xDC00 || second > 0xDFFF) {
 
4157         // 10. Return UTF16Decode(first, second).
 
4158         // 21.1.3.3.10 Return UTF16Decode(first, second).
 
4159         return UTF16Decode(first, second);
 
4164 if (!("endsWith"in String.prototype
 
4167 // String.prototype.endsWith
 
4168 /* global CreateMethodProperty, IsRegExp, RequireObjectCoercible, ToInteger, ToString */
 
4169 // 21.1.3.6. String.prototype.endsWith ( searchString [ , endPosition ] )
 
4170 CreateMethodProperty(String.prototype, 'endsWith', function endsWith(searchString /* [ , endPosition ] */) {
 
4172         var endPosition = arguments.length > 1 ? arguments[1] : undefined;
 
4173         // 1. Let O be ? RequireObjectCoercible(this value).
 
4174         var O = RequireObjectCoercible(this);
 
4175         // 2. Let S be ? ToString(O).
 
4176         var S = ToString(O);
 
4177         // 3. Let isRegExp be ? IsRegExp(searchString).
 
4178         var isRegExp = IsRegExp(searchString);
 
4179         // 4. If isRegExp is true, throw a TypeError exception.
 
4181                 throw new TypeError('First argument to String.prototype.endsWith must not be a regular expression');
 
4183         // 5. Let searchStr be ? ToString(searchString).
 
4184         var searchStr = ToString(searchString);
 
4185         // 6. Let len be the length of S.
 
4187         // 7. If endPosition is undefined, let pos be len, else let pos be ? ToInteger(endPosition).
 
4188         var pos = endPosition === undefined ? len : ToInteger(endPosition);
 
4189         // 8. Let end be min(max(pos, 0), len).
 
4190         var end = Math.min(Math.max(pos, 0), len);
 
4191         // 9. Let searchLength be the length of searchStr.
 
4192         var searchLength = searchStr.length;
 
4193         // 10. Let start be end - searchLength.
 
4194         var start = end - searchLength;
 
4195         // 11. If start is less than 0, return false.
 
4199         // 12. If the sequence of elements of S starting at start of length searchLength is the same as the full element sequence of searchStr, return true.
 
4200         if (S.substr(start, searchLength) === searchStr) {
 
4203         // 13. Otherwise, return false.
 
4209 if (!("includes"in String.prototype
 
4212 // String.prototype.includes
 
4213 /* global CreateMethodProperty, IsRegExp, RequireObjectCoercible, ToInteger, ToString */
 
4214 // 21.1.3.7. String.prototype.includes ( searchString [ , position ] )
 
4215 CreateMethodProperty(String.prototype, 'includes', function includes(searchString /* [ , position ] */) {
 
4217         var position = arguments.length > 1 ? arguments[1] : undefined;
 
4218         // 1. Let O be ? RequireObjectCoercible(this value).
 
4219         var O = RequireObjectCoercible(this);
 
4220         // 2. Let S be ? ToString(O).
 
4221         var S = ToString(O);
 
4222         // 3. Let isRegExp be ? IsRegExp(searchString).
 
4223         var isRegExp = IsRegExp(searchString);
 
4224         // 4. If isRegExp is true, throw a TypeError exception.
 
4226                 throw new TypeError('First argument to String.prototype.includes must not be a regular expression');
 
4228         // 5. Let searchStr be ? ToString(searchString).
 
4229         var searchStr = ToString(searchString);
 
4230         // 6. Let pos be ? ToInteger(position). (If position is undefined, this step produces the value 0.)
 
4231         var pos = ToInteger(position);
 
4232         // 7. Let len be the length of S.
 
4234         // 8. Let start be min(max(pos, 0), len).
 
4235         var start = Math.min(Math.max(pos, 0), len);
 
4236         // 9. Let searchLen be the length of searchStr.
 
4237         // var searchLength = searchStr.length;
 
4238         // 10. If there exists any integer k not smaller than start such that k + searchLen is not greater than len, and for all nonnegative integers j less than searchLen, the code unit at index k+j within S is the same as the code unit at index j within searchStr, return true; but if there is no such integer k, return false.
 
4239         return String.prototype.indexOf.call(S, searchStr, start) !== -1;
 
4244 if (!("repeat"in String.prototype
 
4247 // String.prototype.repeat
 
4248 /* global CreateMethodProperty, RequireObjectCoercible, ToInteger, ToString */
 
4249 // 21.1.3.15String.prototype.repeat ( count )
 
4250 CreateMethodProperty(String.prototype, 'repeat', function repeat(count) {
 
4252         // 1. Let O be ? RequireObjectCoercible(this value).
 
4253         var O = RequireObjectCoercible(this);
 
4254         // 2. Let S be ? ToString(O).
 
4255         var S = ToString(O);
 
4256         // 3. Let n be ? ToInteger(count).
 
4257         var n = ToInteger(count);
 
4258         // 4. If n < 0, throw a RangeError exception.
 
4260                 throw new RangeError('Invalid count value');
 
4262         // 5. If n is +∞, throw a RangeError exception.
 
4263         if (n === Infinity) {
 
4264                 throw new RangeError('Invalid count value');
 
4266         // 6. Let T be the String value that is made from n copies of S appended together. If n is 0, T is the empty String.
 
4267         var T = n === 0 ? '' : new Array(n + 1).join(S);
 
4274 if (!("startsWith"in String.prototype
 
4277 // String.prototype.startsWith
 
4278 /* global CreateMethodProperty, IsRegExp, RequireObjectCoercible, ToInteger, ToString */
 
4279 // 21.1.3.20. String.prototype.startsWith ( searchString [ , position ] )
 
4280 CreateMethodProperty(String.prototype, 'startsWith', function startsWith(searchString /* [ , position ] */) {
 
4282         var position = arguments.length > 1 ? arguments[1] : undefined;
 
4283         // 1. Let O be ? RequireObjectCoercible(this value).
 
4284         var O = RequireObjectCoercible(this);
 
4285         // 2. Let S be ? ToString(O).
 
4286         var S = ToString(O);
 
4287         // 3. Let isRegExp be ? IsRegExp(searchString).
 
4288         var isRegExp = IsRegExp(searchString);
 
4289         // 4. If isRegExp is true, throw a TypeError exception.
 
4291                 throw new TypeError('First argument to String.prototype.startsWith must not be a regular expression');
 
4293         // 5. Let searchStr be ? ToString(searchString).
 
4294         var searchStr = ToString(searchString);
 
4295         // 6. Let pos be ? ToInteger(position). (If position is undefined, this step produces the value 0.)
 
4296         var pos = ToInteger(position);
 
4297         // 7. Let len be the length of S.
 
4299         // 8. Let start be min(max(pos, 0), len).
 
4300         var start = Math.min(Math.max(pos, 0), len);
 
4301         // 9. Let searchLength be the length of searchStr.
 
4302         var searchLength = searchStr.length;
 
4303         // 10. If searchLength+start is greater than len, return false.
 
4304         if (searchLength + start > len) {
 
4307         // 11. If the sequence of elements of S starting at start of length searchLength is the same as the full element sequence of searchStr, return true.
 
4308         if (S.substr(start).indexOf(searchString) === 0) {
 
4311         // 12. Otherwise, return false.
 
4317 if (!("Symbol"in this&&0===this.Symbol.length
 
4321 // A modification of https://github.com/WebReflection/get-own-property-symbols
 
4322 // (C) Andrea Giammarchi - MIT Licensed
 
4324 (function (Object, GOPS, global) {
 
4325         'use strict'; //so that ({}).toString.call(null) returns the correct [object Null] rather than [object Window]
 
4329         var random = '' + Math.random();
 
4330         var prefix = '__\x01symbol:';
 
4331         var prefixLength = prefix.length;
 
4332         var internalSymbol = '__\x01symbol@@' + random;
 
4333         var DP = 'defineProperty';
 
4334         var DPies = 'defineProperties';
 
4335         var GOPN = 'getOwnPropertyNames';
 
4336         var GOPD = 'getOwnPropertyDescriptor';
 
4337         var PIE = 'propertyIsEnumerable';
 
4338         var ObjectProto = Object.prototype;
 
4339         var hOP = ObjectProto.hasOwnProperty;
 
4340         var pIE = ObjectProto[PIE];
 
4341         var toString = ObjectProto.toString;
 
4342         var concat = Array.prototype.concat;
 
4343         var cachedWindowNames = Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [];
 
4344         var nGOPN = Object[GOPN];
 
4345         var gOPN = function getOwnPropertyNames (obj) {
 
4346                 if (toString.call(obj) === '[object Window]') {
 
4350                                 // IE bug where layout engine calls userland gOPN for cross-domain `window` objects
 
4351                                 return concat.call([], cachedWindowNames);
 
4356         var gOPD = Object[GOPD];
 
4357         var create = Object.create;
 
4358         var keys = Object.keys;
 
4359         var freeze = Object.freeze || Object;
 
4360         var defineProperty = Object[DP];
 
4361         var $defineProperties = Object[DPies];
 
4362         var descriptor = gOPD(Object, GOPN);
 
4363         var addInternalIfNeeded = function (o, uid, enumerable) {
 
4364                 if (!hOP.call(o, internalSymbol)) {
 
4366                                 defineProperty(o, internalSymbol, {
 
4368                                         configurable: false,
 
4373                                 o[internalSymbol] = {};
 
4376                 o[internalSymbol]['@@' + uid] = enumerable;
 
4378         var createWithSymbols = function (proto, descriptors) {
 
4379                 var self = create(proto);
 
4380                 gOPN(descriptors).forEach(function (key) {
 
4381                         if (propertyIsEnumerable.call(descriptors, key)) {
 
4382                                 $defineProperty(self, key, descriptors[key]);
 
4387         var copyAsNonEnumerable = function (descriptor) {
 
4388                 var newDescriptor = create(descriptor);
 
4389                 newDescriptor.enumerable = false;
 
4390                 return newDescriptor;
 
4392         var get = function get(){};
 
4393         var onlyNonSymbols = function (name) {
 
4394                 return name != internalSymbol &&
 
4395                         !hOP.call(source, name);
 
4397         var onlySymbols = function (name) {
 
4398                 return name != internalSymbol &&
 
4399                         hOP.call(source, name);
 
4401         var propertyIsEnumerable = function propertyIsEnumerable(key) {
 
4403                 return onlySymbols(uid) ? (
 
4404                         hOP.call(this, uid) &&
 
4405                         this[internalSymbol]['@@' + uid]
 
4406                 ) : pIE.call(this, key);
 
4408         var setAndGetSymbol = function (uid) {
 
4413                         set: function (value) {
 
4414                         setDescriptor(this, uid, {
 
4420                         addInternalIfNeeded(this, uid, true);
 
4424                         defineProperty(ObjectProto, uid, descriptor);
 
4426                         ObjectProto[uid] = descriptor.value;
 
4428                 return freeze(source[uid] = defineProperty(
 
4434         var Symbol = function Symbol() {
 
4435                 var description = arguments[0];
 
4436                 if (this instanceof Symbol) {
 
4437                         throw new TypeError('Symbol is not a constructor');
 
4439                 return setAndGetSymbol(
 
4440                         prefix.concat(description || '', random, ++id)
 
4443         var source = create(null);
 
4444         var sourceConstructor = {value: Symbol};
 
4445         var sourceMap = function (uid) {
 
4448         var $defineProperty = function defineProp(o, key, descriptor) {
 
4450                 if (onlySymbols(uid)) {
 
4451                         setDescriptor(o, uid, descriptor.enumerable ?
 
4452                                 copyAsNonEnumerable(descriptor) : descriptor);
 
4453                         addInternalIfNeeded(o, uid, !!descriptor.enumerable);
 
4455                         defineProperty(o, key, descriptor);
 
4460         var onlyInternalSymbols = function (obj) {
 
4461                 return function (name) {
 
4462                         return hOP.call(obj, internalSymbol) && hOP.call(obj[internalSymbol], '@@' + name);
 
4465         var $getOwnPropertySymbols = function getOwnPropertySymbols(o) {
 
4466                 return gOPN(o).filter(o === ObjectProto ? onlyInternalSymbols(o) : onlySymbols).map(sourceMap);
 
4470         descriptor.value = $defineProperty;
 
4471         defineProperty(Object, DP, descriptor);
 
4473         descriptor.value = $getOwnPropertySymbols;
 
4474         defineProperty(Object, GOPS, descriptor);
 
4476         descriptor.value = function getOwnPropertyNames(o) {
 
4477                 return gOPN(o).filter(onlyNonSymbols);
 
4479         defineProperty(Object, GOPN, descriptor);
 
4481         descriptor.value = function defineProperties(o, descriptors) {
 
4482                 var symbols = $getOwnPropertySymbols(descriptors);
 
4483                 if (symbols.length) {
 
4484                 keys(descriptors).concat(symbols).forEach(function (uid) {
 
4485                         if (propertyIsEnumerable.call(descriptors, uid)) {
 
4486                         $defineProperty(o, uid, descriptors[uid]);
 
4490                 $defineProperties(o, descriptors);
 
4494         defineProperty(Object, DPies, descriptor);
 
4496         descriptor.value = propertyIsEnumerable;
 
4497         defineProperty(ObjectProto, PIE, descriptor);
 
4499         descriptor.value = Symbol;
 
4500         defineProperty(global, 'Symbol', descriptor);
 
4502         // defining `Symbol.for(key)`
 
4503         descriptor.value = function (key) {
 
4504                 var uid = prefix.concat(prefix, key, random);
 
4505                 return uid in ObjectProto ? source[uid] : setAndGetSymbol(uid);
 
4507         defineProperty(Symbol, 'for', descriptor);
 
4509         // defining `Symbol.keyFor(symbol)`
 
4510         descriptor.value = function (symbol) {
 
4511                 if (onlyNonSymbols(symbol))
 
4512                 throw new TypeError(symbol + ' is not a symbol');
 
4513                 return hOP.call(source, symbol) ?
 
4514                 symbol.slice(prefixLength * 2, -random.length) :
 
4518         defineProperty(Symbol, 'keyFor', descriptor);
 
4520         descriptor.value = function getOwnPropertyDescriptor(o, key) {
 
4521                 var descriptor = gOPD(o, key);
 
4522                 if (descriptor && onlySymbols(key)) {
 
4523                 descriptor.enumerable = propertyIsEnumerable.call(o, key);
 
4527         defineProperty(Object, GOPD, descriptor);
 
4529         descriptor.value = function (proto, descriptors) {
 
4530                 return arguments.length === 1 || typeof descriptors === "undefined" ?
 
4532                 createWithSymbols(proto, descriptors);
 
4534         defineProperty(Object, 'create', descriptor);
 
4536         var strictModeSupported = (function(){ 'use strict'; return this; }).call(null) === null;
 
4537         if (strictModeSupported) {
 
4538                 descriptor.value = function () {
 
4539                         var str = toString.call(this);
 
4540                         return (str === '[object String]' && onlySymbols(this)) ? '[object Symbol]' : str;
 
4543                 descriptor.value = function () {
 
4544                         // https://github.com/Financial-Times/polyfill-library/issues/164#issuecomment-486965300
 
4545                         // Polyfill.io this code is here for the situation where a browser does not
 
4546                         // support strict mode and is executing `Object.prototype.toString.call(null)`.
 
4547                         // This code ensures that we return the correct result in that situation however,
 
4548                         // this code also introduces a bug where it will return the incorrect result for
 
4549                         // `Object.prototype.toString.call(window)`. We can't have the correct result for
 
4550                         // both `window` and `null`, so we have opted for `null` as we believe this is the more 
 
4551                         // common situation. 
 
4552                         if (this === window) {
 
4553                                 return '[object Null]';
 
4556                         var str = toString.call(this);
 
4557                         return (str === '[object String]' && onlySymbols(this)) ? '[object Symbol]' : str;
 
4560         defineProperty(ObjectProto, 'toString', descriptor);
 
4562         setDescriptor = function (o, key, descriptor) {
 
4563                 var protoDescriptor = gOPD(ObjectProto, key);
 
4564                 delete ObjectProto[key];
 
4565                 defineProperty(o, key, descriptor);
 
4566                 if (o !== ObjectProto) {
 
4567                         defineProperty(ObjectProto, key, protoDescriptor);
 
4571 }(Object, 'getOwnPropertySymbols', this));
 
4575 if (!("Symbol"in this&&"hasInstance"in this.Symbol
 
4578 // Symbol.hasInstance
 
4580 Object.defineProperty(Symbol, 'hasInstance', { value: Symbol('hasInstance') });
 
4584 if (!("Symbol"in this&&"isConcatSpreadable"in this.Symbol
 
4587 // Symbol.isConcatSpreadable
 
4589 Object.defineProperty(Symbol, 'isConcatSpreadable', { value: Symbol('isConcatSpreadable') });
 
4593 if (!("Symbol"in this&&"iterator"in this.Symbol
 
4598 Object.defineProperty(Symbol, 'iterator', { value: Symbol('iterator') });
 
4603 // _ESAbstract.GetIterator
 
4604 /* global GetMethod, Symbol, Call, Type, GetV */
 
4605 // 7.4.1. GetIterator ( obj [ , method ] )
 
4606 // The abstract operation GetIterator with argument obj and optional argument method performs the following steps:
 
4607 function GetIterator(obj /*, method */) { // eslint-disable-line no-unused-vars
 
4608         // 1. If method is not present, then
 
4609                 // a. Set method to ? GetMethod(obj, @@iterator).
 
4610         var method = arguments.length > 1 ? arguments[1] : GetMethod(obj, Symbol.iterator);
 
4611         // 2. Let iterator be ? Call(method, obj).
 
4612         var iterator = Call(method, obj);
 
4613         // 3. If Type(iterator) is not Object, throw a TypeError exception.
 
4614         if (Type(iterator) !== 'object') {
 
4615                 throw new TypeError('bad iterator');
 
4617         // 4. Let nextMethod be ? GetV(iterator, "next").
 
4618         var nextMethod = GetV(iterator, "next");
 
4619         // 5. Let iteratorRecord be Record {[[Iterator]]: iterator, [[NextMethod]]: nextMethod, [[Done]]: false}.
 
4620         var iteratorRecord = Object.create(null);
 
4621         iteratorRecord['[[Iterator]]'] = iterator;
 
4622         iteratorRecord['[[NextMethod]]'] = nextMethod;
 
4623         iteratorRecord['[[Done]]'] = false;
 
4624         // 6. Return iteratorRecord.
 
4625         return iteratorRecord;
 
4627 if (!("Symbol"in this&&"match"in this.Symbol
 
4632 Object.defineProperty(Symbol, 'match', { value: Symbol('match') });
 
4636 if (!("Symbol"in this&&"replace"in this.Symbol
 
4641 Object.defineProperty(Symbol, 'replace', { value: Symbol('replace') });
 
4645 if (!("Symbol"in this&&"search"in this.Symbol
 
4650 Object.defineProperty(Symbol, 'search', { value: Symbol('search') });
 
4654 if (!("Symbol"in this&&"species"in this.Symbol
 
4659 Object.defineProperty(Symbol, 'species', { value: Symbol('species') });
 
4663 if (!("Map"in this&&function(t){try{var n=new Map([[1,1],[2,2]])
 
4664 return 0===Map.length&&2===n.size&&"Symbol"in t&&"iterator"in Symbol&&"function"==typeof n[Symbol.iterator]}catch(i){return!1}}(this)
 
4668 /* global CreateIterResultObject, CreateMethodProperty, GetIterator, IsCallable, IteratorClose, IteratorStep, IteratorValue, OrdinaryCreateFromConstructor, SameValueZero, Type, Symbol */
 
4669 (function (global) {
 
4670         var supportsGetters = (function () {
 
4673                         Object.defineProperty(a, 't', {
 
4687         // Deleted map items mess with iterator pointers, so rather than removing them mark them as deleted. Can't use undefined or null since those both valid keys so use a private symbol.
 
4688         var undefMarker = Symbol('undef');
 
4689         // 23.1.1.1 Map ( [ iterable ] )
 
4690         var Map = function Map(/* iterable */) {
 
4691                 // 1. If NewTarget is undefined, throw a TypeError exception.
 
4692                 if (!(this instanceof Map)) {
 
4693                         throw new TypeError('Constructor Map requires "new"');
 
4695                 // 2. Let map be ? OrdinaryCreateFromConstructor(NewTarget, "%MapPrototype%", « [[MapData]] »).
 
4696                 var map = OrdinaryCreateFromConstructor(this, Map.prototype, {
 
4703                 // 3. Set map.[[MapData]] to a new empty List.
 
4704                 // Polyfill.io - This step was done as part of step two.
 
4706                 // Some old engines do not support ES5 getters/setters.  Since Map only requires these for the size property, we can fall back to setting the size property statically each time the size of the map changes.
 
4707                 if (!supportsGetters) {
 
4708                         Object.defineProperty(map, 'size', {
 
4716                 // 4. If iterable is not present, let iterable be undefined.
 
4717                 var iterable = arguments.length > 0 ? arguments[0] : undefined;
 
4719                 // 5. If iterable is either undefined or null, return map.
 
4720                 if (iterable === null || iterable === undefined) {
 
4724                 // 6. Let adder be ? Get(map, "set").
 
4725                 var adder = map.set;
 
4727                 // 7. If IsCallable(adder) is false, throw a TypeError exception.
 
4728                 if (!IsCallable(adder)) {
 
4729                         throw new TypeError("Map.prototype.set is not a function");
 
4732                 // 8. Let iteratorRecord be ? GetIterator(iterable).
 
4734                         var iteratorRecord = GetIterator(iterable);
 
4737                                 // a. Let next be ? IteratorStep(iteratorRecord).
 
4738                                 var next = IteratorStep(iteratorRecord);
 
4739                                 // b. If next is false, return map.
 
4740                                 if (next === false) {
 
4743                                 // c. Let nextItem be ? IteratorValue(next).
 
4744                                 var nextItem = IteratorValue(next);
 
4745                                 // d. If Type(nextItem) is not Object, then
 
4746                                 if (Type(nextItem) !== 'object') {
 
4747                                         // i. Let error be Completion{[[Type]]: throw, [[Value]]: a newly created TypeError object, [[Target]]: empty}.
 
4749                                                 throw new TypeError('Iterator value ' + nextItem + ' is not an entry object');
 
4751                                                 // ii. Return ? IteratorClose(iteratorRecord, error).
 
4752                                                 return IteratorClose(iteratorRecord, error);
 
4756                                         // Polyfill.io - The try catch accounts for steps: f, h, and j.
 
4758                                         // e. Let k be Get(nextItem, "0").
 
4759                                         var k = nextItem[0];
 
4760                                         // f. If k is an abrupt completion, return ? IteratorClose(iteratorRecord, k).
 
4761                                         // g. Let v be Get(nextItem, "1").
 
4762                                         var v = nextItem[1];
 
4763                                         // h. If v is an abrupt completion, return ? IteratorClose(iteratorRecord, v).
 
4764                                         // i. Let status be Call(adder, map, « k.[[Value]], v.[[Value]] »).
 
4765                                         adder.call(map, k, v);
 
4767                                         // j. If status is an abrupt completion, return ? IteratorClose(iteratorRecord, status).
 
4768                                         return IteratorClose(iteratorRecord, e);
 
4772                         // Polyfill.io - For user agents which do not have iteration methods on argument objects or arrays, we can special case those.
 
4773                         if (Array.isArray(iterable) ||
 
4774                                 Object.prototype.toString.call(iterable) === '[object Arguments]' ||
 
4775                                 // IE 7 & IE 8 return '[object Object]' for the arguments object, we can detect by checking for the existence of the callee property
 
4776                                 (!!iterable.callee)) {
 
4778                                 var length = iterable.length;
 
4779                                 for (index = 0; index < length; index++) {
 
4780                                         adder.call(map, iterable[index][0], iterable[index][1]);
 
4787         // 23.1.2.1. Map.prototype
 
4788         // The initial value of Map.prototype is the intrinsic object %MapPrototype%.
 
4789         // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
 
4790         Object.defineProperty(Map, 'prototype', {
 
4791                 configurable: false,
 
4797         // 23.1.2.2 get Map [ @@species ]
 
4798         if (supportsGetters) {
 
4799                 Object.defineProperty(Map, Symbol.species, {
 
4803                                 // 1. Return the this value.
 
4809                 CreateMethodProperty(Map, Symbol.species, Map);
 
4812         // 23.1.3.1 Map.prototype.clear ( )
 
4813         CreateMethodProperty(Map.prototype, 'clear', function clear() {
 
4814                         // 1. Let M be the this value.
 
4816                         // 2. If Type(M) is not Object, throw a TypeError exception.
 
4817                         if (Type(M) !== 'object') {
 
4818                                 throw new TypeError('Method Map.prototype.clear called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4820                         // 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
 
4821                         if (M._es6Map !== true) {
 
4822                                 throw new TypeError('Method Map.prototype.clear called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4824                         // 4. Let entries be the List that is M.[[MapData]].
 
4825                         var entries = M._keys;
 
4826                         // 5. For each Record {[[Key]], [[Value]]} p that is an element of entries, do
 
4827                         for (var i = 0; i < entries.length; i++) {
 
4828                                 // 5.a. Set p.[[Key]] to empty.
 
4829                                 M._keys[i] = undefMarker;
 
4830                                 // 5.b. Set p.[[Value]] to empty.
 
4831                                 M._values[i] = undefMarker;
 
4834                         if (!supportsGetters) {
 
4835                                 this.size = this._size;
 
4837                         // 6. Return undefined.
 
4842         // 23.1.3.2. Map.prototype.constructor
 
4843         CreateMethodProperty(Map.prototype, 'constructor', Map);
 
4845         // 23.1.3.3. Map.prototype.delete ( key )
 
4846         CreateMethodProperty(Map.prototype, 'delete', function (key) {
 
4847                         // 1. Let M be the this value.
 
4849                         // 2. If Type(M) is not Object, throw a TypeError exception.
 
4850                         if (Type(M) !== 'object') {
 
4851                                 throw new TypeError('Method Map.prototype.clear called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4853                         // 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
 
4854                         if (M._es6Map !== true) {
 
4855                                 throw new TypeError('Method Map.prototype.clear called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4857                         // 4. Let entries be the List that is M.[[MapData]].
 
4858                         var entries = M._keys;
 
4859                         // 5. For each Record {[[Key]], [[Value]]} p that is an element of entries, do
 
4860                         for (var i = 0; i < entries.length; i++) {
 
4861                                 // a. If p.[[Key]] is not empty and SameValueZero(p.[[Key]], key) is true, then
 
4862                                 if (M._keys[i] !== undefMarker && SameValueZero(M._keys[i], key)) {
 
4863                                         // i. Set p.[[Key]] to empty.
 
4864                                         this._keys[i] = undefMarker;
 
4865                                         // ii. Set p.[[Value]] to empty.
 
4866                                         this._values[i] = undefMarker;
 
4867                                         this._size = --this._size;
 
4868                                         if (!supportsGetters) {
 
4869                                                 this.size = this._size;
 
4871                                         // iii. Return true.
 
4880         // 23.1.3.4. Map.prototype.entries ( )
 
4881         CreateMethodProperty(Map.prototype, 'entries', function entries () {
 
4882                         // 1. Let M be the this value.
 
4884                         // 2. Return ? CreateMapIterator(M, "key+value").
 
4885                         return CreateMapIterator(M, 'key+value');
 
4889         // 23.1.3.5. Map.prototype.forEach ( callbackfn [ , thisArg ] )
 
4890         CreateMethodProperty(Map.prototype, 'forEach', function (callbackFn) {
 
4891                         // 1. Let M be the this value.
 
4893                         // 2. If Type(M) is not Object, throw a TypeError exception.
 
4894                         if (Type(M) !== 'object') {
 
4895                                 throw new TypeError('Method Map.prototype.forEach called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4897                         // 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
 
4898                         if (M._es6Map !== true) {
 
4899                                 throw new TypeError('Method Map.prototype.forEach called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4901                         // 4. If IsCallable(callbackfn) is false, throw a TypeError exception.
 
4902                         if (!IsCallable(callbackFn)) {
 
4903                                 throw new TypeError(Object.prototype.toString.call(callbackFn) + ' is not a function.');
 
4905                         // 5. If thisArg is present, let T be thisArg; else let T be undefined.
 
4907                                 var T = arguments[1];
 
4909                         // 6. Let entries be the List that is M.[[MapData]].
 
4910                         var entries = M._keys;
 
4911                         // 7. For each Record {[[Key]], [[Value]]} e that is an element of entries, in original key insertion order, do
 
4912                         for (var i = 0; i < entries.length; i++) {
 
4913                                 // a. If e.[[Key]] is not empty, then
 
4914                                 if (M._keys[i] !== undefMarker && M._values[i] !== undefMarker ) {
 
4915                                         // i. Perform ? Call(callbackfn, T, « e.[[Value]], e.[[Key]], M »).
 
4916                                         callbackFn.call(T, M._values[i], M._keys[i], M);
 
4919                         // 8. Return undefined.
 
4924         // 23.1.3.6. Map.prototype.get ( key )
 
4925         CreateMethodProperty(Map.prototype, 'get', function get(key) {
 
4926                         // 1. Let M be the this value.
 
4928                         // 2. If Type(M) is not Object, throw a TypeError exception.
 
4929                         if (Type(M) !== 'object') {
 
4930                                 throw new TypeError('Method Map.prototype.get called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4932                         // 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
 
4933                         if (M._es6Map !== true) {
 
4934                                 throw new TypeError('Method Map.prototype.get called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4936                         // 4. Let entries be the List that is M.[[MapData]].
 
4937                         var entries = M._keys;
 
4938                         // 5. For each Record {[[Key]], [[Value]]} p that is an element of entries, do
 
4939                         for (var i = 0; i < entries.length; i++) {
 
4940                                 // a. If p.[[Key]] is not empty and SameValueZero(p.[[Key]], key) is true, return p.[[Value]].
 
4941                                 if (M._keys[i] !== undefMarker && SameValueZero(M._keys[i], key)) {
 
4942                                         return M._values[i];
 
4945                         // 6. Return undefined.
 
4949         // 23.1.3.7. Map.prototype.has ( key )
 
4950         CreateMethodProperty(Map.prototype, 'has', function has (key) {
 
4951                         // 1. Let M be the this value.
 
4953                         // 2. If Type(M) is not Object, throw a TypeError exception.
 
4954                         if (typeof M !== 'object') {
 
4955                                 throw new TypeError('Method Map.prototype.has called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4957                         // 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
 
4958                         if (M._es6Map !== true) {
 
4959                                 throw new TypeError('Method Map.prototype.has called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4961                         // 4. Let entries be the List that is M.[[MapData]].
 
4962                         var entries = M._keys;
 
4963                         // 5. For each Record {[[Key]], [[Value]]} p that is an element of entries, do
 
4964                         for (var i = 0; i < entries.length; i++) {
 
4965                                 // a. If p.[[Key]] is not empty and SameValueZero(p.[[Key]], key) is true, return true.
 
4966                                 if (M._keys[i] !== undefMarker && SameValueZero(M._keys[i], key)) {
 
4974         // 23.1.3.8. Map.prototype.keys ( )
 
4975         CreateMethodProperty(Map.prototype, 'keys', function keys () {
 
4976                         // 1. Let M be the this value.
 
4978                         // 2. Return ? CreateMapIterator(M, "key").
 
4979                         return CreateMapIterator(M, "key");
 
4982         // 23.1.3.9. Map.prototype.set ( key, value )
 
4983         CreateMethodProperty(Map.prototype, 'set', function set(key, value) {
 
4984                         // 1. Let M be the this value.
 
4986                         // 2. If Type(M) is not Object, throw a TypeError exception.
 
4987                         if (Type(M) !== 'object') {
 
4988                                 throw new TypeError('Method Map.prototype.set called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4990                         // 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
 
4991                         if (M._es6Map !== true) {
 
4992                                 throw new TypeError('Method Map.prototype.set called on incompatible receiver ' + Object.prototype.toString.call(M));
 
4994                         // 4. Let entries be the List that is M.[[MapData]].
 
4995                         var entries = M._keys;
 
4996                         // 5. For each Record {[[Key]], [[Value]]} p that is an element of entries, do
 
4997                         for (var i = 0; i < entries.length; i++) {
 
4998                                 // a. If p.[[Key]] is not empty and SameValueZero(p.[[Key]], key) is true, then
 
4999                                 if (M._keys[i] !== undefMarker && SameValueZero(M._keys[i], key)) {
 
5000                                         // i. Set p.[[Value]] to value.
 
5001                                         M._values[i] = value;
 
5006                         // 6. If key is -0, let key be +0.
 
5010                         // 7. Let p be the Record {[[Key]]: key, [[Value]]: value}.
 
5013                         p['[[Value]]'] = value;
 
5014                         // 8. Append p as the last element of entries.
 
5015                         M._keys.push(p['[[Key]]']);
 
5016                         M._values.push(p['[[Value]]']);
 
5018                         if (!supportsGetters) {
 
5025         // 23.1.3.10. get Map.prototype.size
 
5026         if (supportsGetters) {
 
5027                 Object.defineProperty(Map.prototype, 'size', {
 
5031                                 // 1. Let M be the this value.
 
5033                                 // 2. If Type(M) is not Object, throw a TypeError exception.
 
5034                                 if (Type(M) !== 'object') {
 
5035                                         throw new TypeError('Method Map.prototype.size called on incompatible receiver ' + Object.prototype.toString.call(M));
 
5037                                 // 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
 
5038                                 if (M._es6Map !== true) {
 
5039                                         throw new TypeError('Method Map.prototype.size called on incompatible receiver ' + Object.prototype.toString.call(M));
 
5041                                 // 4. Let entries be the List that is M.[[MapData]].
 
5042                                 var entries = M._keys;
 
5043                                 // 5. Let count be 0.
 
5045                                 // 6. For each Record {[[Key]], [[Value]]} p that is an element of entries, do
 
5046                                 for (var i = 0; i < entries.length; i++) {
 
5047                                         // a. If p.[[Key]] is not empty, set count to count+1.
 
5048                                         if (M._keys[i] !== undefMarker) {
 
5059         // 23.1.3.11. Map.prototype.values ( )
 
5060         CreateMethodProperty(Map.prototype, 'values', function values () {
 
5061                         // 1. Let M be the this value.
 
5063                         // 2. Return ? CreateMapIterator(M, "value").
 
5064                         return CreateMapIterator(M, 'value');
 
5068         // 23.1.3.12. Map.prototype [ @@iterator ] ( )
 
5069         // The initial value of the @@iterator property is the same function object as the initial value of the entries property.
 
5070         CreateMethodProperty(Map.prototype, Symbol.iterator, Map.prototype.entries);
 
5072         // 23.1.3.13. Map.prototype [ @@toStringTag ]
 
5073         // The initial value of the @@toStringTag property is the String value "Map".
 
5074         // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
 
5076         // Polyfill.io - Safari 8 implements Map.name but as a non-configurable property, which means it would throw an error if we try and configure it here.
 
5077         if (!('name' in Map)) {
 
5079                 Object.defineProperty(Map, 'name', {
 
5087         // 23.1.5.1. CreateMapIterator ( map, kind )
 
5088         function CreateMapIterator(map, kind) {
 
5089                 // 1. If Type(map) is not Object, throw a TypeError exception.
 
5090                 if (Type(map) !== 'object') {
 
5091                         throw new TypeError('createMapIterator called on incompatible receiver ' + Object.prototype.toString.call(map));
 
5093                 // 2. If map does not have a [[MapData]] internal slot, throw a TypeError exception.
 
5094                 if (map._es6Map !== true) {
 
5095                         throw new TypeError('createMapIterator called on incompatible receiver ' + Object.prototype.toString.call(map));
 
5097                 // 3. Let iterator be ObjectCreate(%MapIteratorPrototype%, « [[Map]], [[MapNextIndex]], [[MapIterationKind]] »).
 
5098                 var iterator = Object.create(MapIteratorPrototype);
 
5099                 // 4. Set iterator.[[Map]] to map.
 
5100                 Object.defineProperty(iterator, '[[Map]]', {
 
5106                 // 5. Set iterator.[[MapNextIndex]] to 0.
 
5107                 Object.defineProperty(iterator, '[[MapNextIndex]]', {
 
5113                 // 6. Set iterator.[[MapIterationKind]] to kind.
 
5114                 Object.defineProperty(iterator, '[[MapIterationKind]]', {
 
5120                 // 7. Return iterator.
 
5124         // 23.1.5.2. The %MapIteratorPrototype% Object
 
5125         var MapIteratorPrototype = {};
 
5126         // Polyfill.io - We use this as a quick way to check if an object is a Map Iterator instance.
 
5127         Object.defineProperty(MapIteratorPrototype, 'isMapIterator', {
 
5128                 configurable: false,
 
5134         // 23.1.5.2.1. %MapIteratorPrototype%.next ( )
 
5135         CreateMethodProperty(MapIteratorPrototype, 'next', function next() {
 
5136                         // 1. Let O be the this value.
 
5138                         // 2. If Type(O) is not Object, throw a TypeError exception.
 
5139                         if (Type(O) !== 'object') {
 
5140                                 throw new TypeError('Method %MapIteratorPrototype%.next called on incompatible receiver ' + Object.prototype.toString.call(O));
 
5142                         // 3. If O does not have all of the internal slots of a Map Iterator Instance (23.1.5.3), throw a TypeError exception.
 
5143                         if (!O.isMapIterator) {
 
5144                                 throw new TypeError('Method %MapIteratorPrototype%.next called on incompatible receiver ' + Object.prototype.toString.call(O));
 
5146                         // 4. Let m be O.[[Map]].
 
5147                         var m = O['[[Map]]'];
 
5148                         // 5. Let index be O.[[MapNextIndex]].
 
5149                         var index = O['[[MapNextIndex]]'];
 
5150                         // 6. Let itemKind be O.[[MapIterationKind]].
 
5151                         var itemKind = O['[[MapIterationKind]]'];
 
5152                         // 7. If m is undefined, return CreateIterResultObject(undefined, true).
 
5153                         if (m === undefined) {
 
5154                                 return CreateIterResultObject(undefined, true);
 
5156                         // 8. Assert: m has a [[MapData]] internal slot.
 
5158                                 throw new Error(Object.prototype.toString.call(m) + ' has a [[MapData]] internal slot.');
 
5160                         // 9. Let entries be the List that is m.[[MapData]].
 
5161                         var entries = m._keys;
 
5162                         // 10. Let numEntries be the number of elements of entries.
 
5163                         var numEntries = entries.length;
 
5164                         // 11. NOTE: numEntries must be redetermined each time this method is evaluated.
 
5165                         // 12. Repeat, while index is less than numEntries,
 
5166                         while (index < numEntries) {
 
5167                                 // a. Let e be the Record {[[Key]], [[Value]]} that is the value of entries[index].
 
5168                                 var e = Object.create(null);
 
5169                                 e['[[Key]]'] = m._keys[index];
 
5170                                 e['[[Value]]'] = m._values[index];
 
5171                                 // b. Set index to index+1.
 
5173                                 // c. Set O.[[MapNextIndex]] to index.
 
5174                                 O['[[MapNextIndex]]'] = index;
 
5175                                 // d. If e.[[Key]] is not empty, then
 
5176                                 if (e['[[Key]]'] !== undefMarker) {
 
5177                                         // i. If itemKind is "key", let result be e.[[Key]].
 
5178                                         if (itemKind === 'key') {
 
5179                                                 var result = e['[[Key]]'];
 
5180                                                 // ii. Else if itemKind is "value", let result be e.[[Value]].
 
5181                                         } else if (itemKind === 'value') {
 
5182                                                 result = e['[[Value]]'];
 
5185                                                 // 1. Assert: itemKind is "key+value".
 
5186                                                 if (itemKind !== 'key+value') {
 
5189                                                 // 2. Let result be CreateArrayFromList(« e.[[Key]], e.[[Value]] »).
 
5195                                         // iv. Return CreateIterResultObject(result, false).
 
5196                                         return CreateIterResultObject(result, false);
 
5199                         // 13. Set O.[[Map]] to undefined.
 
5200                         O['[[Map]]'] = undefined;
 
5201                         // 14. Return CreateIterResultObject(undefined, true).
 
5202                         return CreateIterResultObject(undefined, true);
 
5206         // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
 
5207         // The initial value of the @@toStringTag property is the String value "Map Iterator".
 
5208         // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
 
5210         CreateMethodProperty(MapIteratorPrototype, Symbol.iterator, function iterator() {
 
5215         // Export the object
 
5217                 CreateMethodProperty(global, 'Map', Map);
 
5219                 // IE8 throws an error here if we set enumerable to false.
 
5220                 // More info on table 2: https://msdn.microsoft.com/en-us/library/dd229916(v=vs.85).aspx
 
5221                 global['Map'] = Map;
 
5227 if (!("Set"in this&&function(){try{var t=new Set([1,2])
 
5228 return 0===Set.length&&2===t.size&&"Symbol"in this&&"iterator"in Symbol&&"function"==typeof t[Symbol.iterator]}catch(e){return!1}}()
 
5232 /* global CreateIterResultObject, CreateMethodProperty, GetIterator, IsCallable, IteratorClose, IteratorStep, IteratorValue, OrdinaryCreateFromConstructor, SameValueZero, Symbol */
 
5233 (function (global) {
 
5234         var supportsGetters = (function () {
 
5237                         Object.defineProperty(a, 't', {
 
5251         // Deleted set items mess with iterator pointers, so rather than removing them mark them as deleted. Can't use undefined or null since those both valid keys so use a private symbol.
 
5252         var undefMarker = Symbol('undef');
 
5253         // 23.2.1.1. Set ( [ iterable ] )
 
5254         var Set = function Set(/* iterable */) {
 
5255                 // 1. If NewTarget is undefined, throw a TypeError exception.
 
5256                 if (!(this instanceof Set)) {
 
5257                         throw new TypeError('Constructor Set requires "new"');
 
5259                 // 2. Let set be ? OrdinaryCreateFromConstructor(NewTarget, "%SetPrototype%", « [[SetData]] »).
 
5260                 var set = OrdinaryCreateFromConstructor(this, Set.prototype, {
 
5266                 // 3. Set set.[[SetData]] to a new empty List.
 
5267                 // Polyfill.io - This step was done as part of step two.
 
5269                 // Some old engines do not support ES5 getters/setters.  Since Set only requires these for the size property, we can fall back to setting the size property statically each time the size of the set changes.
 
5270                 if (!supportsGetters) {
 
5271                         Object.defineProperty(set, 'size', {
 
5279                 // 4. If iterable is not present, let iterable be undefined.
 
5280                 var iterable = arguments.length > 0 ? arguments[0] : undefined;
 
5282                 // 5. If iterable is either undefined or null, return set.
 
5283                 if (iterable === null || iterable === undefined) {
 
5287                 // 6. Let adder be ? Get(set, "add").
 
5288                 var adder = set.add;
 
5289                 // 7. If IsCallable(adder) is false, throw a TypeError exception.
 
5290                 if (!IsCallable(adder)) {
 
5291                         throw new TypeError("Set.prototype.add is not a function");
 
5295                         // 8. Let iteratorRecord be ? GetIterator(iterable).
 
5296                         var iteratorRecord = GetIterator(iterable);
 
5299                                 // a. Let next be ? IteratorStep(iteratorRecord).
 
5300                                 var next = IteratorStep(iteratorRecord);
 
5301                                 // b. If next is false, return set.
 
5302                                 if (next === false) {
 
5305                                 // c. Let nextValue be ? IteratorValue(next).
 
5306                                 var nextValue = IteratorValue(next);
 
5307                                 // d. Let status be Call(adder, set, « nextValue.[[Value]] »).
 
5309                                         adder.call(set, nextValue);
 
5311                                         // e. If status is an abrupt completion, return ? IteratorClose(iteratorRecord, status).
 
5312                                         return IteratorClose(iteratorRecord, e);
 
5316                         // Polyfill.io - For user agents which do not have iteration methods on argument objects or arrays, we can special case those.
 
5317                         if (Array.isArray(iterable) ||
 
5318                                 Object.prototype.toString.call(iterable) === '[object Arguments]' ||
 
5319                                 // IE 7 & IE 8 return '[object Object]' for the arguments object, we can detect by checking for the existence of the callee property
 
5320                                 (!!iterable.callee)) {
 
5322                                 var length = iterable.length;
 
5323                                 for (index = 0; index < length; index++) {
 
5324                                         adder.call(set, iterable[index]);
 
5333         // 23.2.2.1. Set.prototype
 
5334         // The initial value of Set.prototype is the intrinsic %SetPrototype% object.
 
5335         // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
 
5336         Object.defineProperty(Set, 'prototype', {
 
5337                 configurable: false,
 
5343         // 23.2.2.2 get Set [ @@species ]
 
5344         if (supportsGetters) {
 
5345                 Object.defineProperty(Set, Symbol.species, {
 
5349                                 // 1. Return the this value.
 
5355                 CreateMethodProperty(Set, Symbol.species, Set);
 
5358         // 23.2.3.1. Set.prototype.add ( value )
 
5359         CreateMethodProperty(Set.prototype, 'add', function add(value) {
 
5360                         // 1. Let S be the this value.
 
5362                         // 2. If Type(S) is not Object, throw a TypeError exception.
 
5363                         if (typeof S !== 'object') {
 
5364                                 throw new TypeError('Method Set.prototype.add called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5366                         // 3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
 
5367                         if (S._es6Set !== true) {
 
5368                                 throw new TypeError('Method Set.prototype.add called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5370                         // 4. Let entries be the List that is S.[[SetData]].
 
5371                         var entries = S._values;
 
5372                         // 5. For each e that is an element of entries, do
 
5373                         for (var i = 0; i < entries.length; i++) {
 
5375                                 // a. If e is not empty and SameValueZero(e, value) is true, then
 
5376                                 if (e !== undefMarker && SameValueZero(e, value)) {
 
5381                         // 6. If value is -0, let value be +0.
 
5382                         if (1/value === -Infinity) {
 
5385                         // 7. Append value as the last element of entries.
 
5386                         S._values.push(value);
 
5388                         this._size = ++this._size;
 
5389                         if (!supportsGetters) {
 
5390                                 this.size = this._size;
 
5396         // 23.2.3.2. Set.prototype.clear ( )
 
5397         CreateMethodProperty(Set.prototype, 'clear', function clear() {
 
5398                         // 1. Let S be the this value.
 
5400                         // 2. If Type(S) is not Object, throw a TypeError exception.
 
5401                         if (typeof S !== 'object') {
 
5402                                 throw new TypeError('Method Set.prototype.clear called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5404                         // 3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
 
5405                         if (S._es6Set !== true) {
 
5406                                 throw new TypeError('Method Set.prototype.clear called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5408                         // 4. Let entries be the List that is S.[[SetData]].
 
5409                         var entries = S._values;
 
5410                         // 5. For each e that is an element of entries, do
 
5411                         for (var i = 0; i < entries.length; i++) {
 
5412                                 // a. Replace the element of entries whose value is e with an element whose value is empty.
 
5413                                 entries[i] = undefMarker;
 
5416                         if (!supportsGetters) {
 
5417                                 this.size = this._size;
 
5419                         // 6. Return undefined.
 
5423         // 23.2.3.3. Set.prototype.constructor
 
5424         CreateMethodProperty(Set.prototype, 'constructor', Set);
 
5426         // 23.2.3.4. Set.prototype.delete ( value )
 
5427         CreateMethodProperty(Set.prototype, 'delete', function (value) {
 
5428                         // 1. Let S be the this value.
 
5430                         // 2. If Type(S) is not Object, throw a TypeError exception.
 
5431                         if (typeof S !== 'object') {
 
5432                                 throw new TypeError('Method Set.prototype.delete called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5434                         // 3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
 
5435                         if (S._es6Set !== true) {
 
5436                                 throw new TypeError('Method Set.prototype.delete called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5438                         // 4. Let entries be the List that is S.[[SetData]].
 
5439                         var entries = S._values;
 
5440                         // 5. For each e that is an element of entries, do
 
5441                         for (var i = 0; i < entries.length; i++) {
 
5443                                 // a. If e is not empty and SameValueZero(e, value) is true, then
 
5444                                 if (e !== undefMarker && SameValueZero(e, value)) {
 
5445                                         // i. Replace the element of entries whose value is e with an element whose value is empty.
 
5446                                         entries[i] = undefMarker;
 
5448                                         this._size = --this._size;
 
5449                                         if (!supportsGetters) {
 
5450                                                 this.size = this._size;
 
5461         // 23.2.3.5. Set.prototype.entries ( )
 
5462         CreateMethodProperty(Set.prototype, 'entries', function entries() {
 
5463                         // 1. Let S be the this value.
 
5465                         // 2. Return ? CreateSetIterator(S, "key+value").
 
5466                         return CreateSetIterator(S, 'key+value');
 
5470         // 23.2.3.6. Set.prototype.forEach ( callbackfn [ , thisArg ] )
 
5471         CreateMethodProperty(Set.prototype, 'forEach', function forEach(callbackFn /*[ , thisArg ]*/) {
 
5472                         // 1. Let S be the this value.
 
5474                         // 2. If Type(S) is not Object, throw a TypeError exception.
 
5475                         if (typeof S !== 'object') {
 
5476                                 throw new TypeError('Method Set.prototype.forEach called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5478                         // 3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
 
5479                         if (S._es6Set !== true) {
 
5480                                 throw new TypeError('Method Set.prototype.forEach called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5482                         // 4. If IsCallable(callbackfn) is false, throw a TypeError exception.
 
5483                         if (!IsCallable(callbackFn)) {
 
5484                                 throw new TypeError(Object.prototype.toString.call(callbackFn) + ' is not a function.');
 
5486                         // 5. If thisArg is present, let T be thisArg; else let T be undefined.
 
5488                                 var T = arguments[1];
 
5490                         // 6. Let entries be the List that is S.[[SetData]].
 
5491                         var entries = S._values;
 
5492                         // 7. For each e that is an element of entries, in original insertion order, do
 
5493                         for (var i = 0; i < entries.length; i++) {
 
5495                                 // a. If e is not empty, then
 
5496                                 if (e !== undefMarker) {
 
5497                                         // i. Perform ? Call(callbackfn, T, « e, e, S »).
 
5498                                         callbackFn.call(T, e, e, S);
 
5501                         // 8. Return undefined.
 
5506         // 23.2.3.7. Set.prototype.has ( value )
 
5507         CreateMethodProperty(Set.prototype, 'has', function has(value) {
 
5508                         // 1. Let S be the this value.
 
5510                         // 2. If Type(S) is not Object, throw a TypeError exception.
 
5511                         if (typeof S !== 'object') {
 
5512                                 throw new TypeError('Method Set.prototype.forEach called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5514                         // 3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
 
5515                         if (S._es6Set !== true) {
 
5516                                 throw new TypeError('Method Set.prototype.forEach called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5518                         // 4. Let entries be the List that is S.[[SetData]].
 
5519                         var entries = S._values;
 
5520                         // 5. For each e that is an element of entries, do
 
5521                         for (var i = 0; i < entries.length; i++) {
 
5523                                 // a. If e is not empty and SameValueZero(e, value) is true, return true.
 
5524                                 if (e !== undefMarker && SameValueZero(e, value)) {
 
5533         // Polyfill.io - We need to define Set.prototype.values before Set.prototype.keys because keys is a reference to values.
 
5534         // 23.2.3.10. Set.prototype.values()
 
5535         var values = function values() {
 
5536                 // 1. Let S be the this value.
 
5538                 // 2. Return ? CreateSetIterator(S, "value").
 
5539                 return CreateSetIterator(S, "value");
 
5541         CreateMethodProperty(Set.prototype, 'values', values);
 
5543         // 23.2.3.8 Set.prototype.keys ( )
 
5544         // The initial value of the keys property is the same function object as the initial value of the values property.
 
5545         CreateMethodProperty(Set.prototype, 'keys', values);
 
5547         // 23.2.3.9. get Set.prototype.size
 
5548         if (supportsGetters) {
 
5549                 Object.defineProperty(Set.prototype, 'size', {
 
5553                                 // 1. Let S be the this value.
 
5555                                 // 2. If Type(S) is not Object, throw a TypeError exception.
 
5556                                 if (typeof S !== 'object') {
 
5557                                         throw new TypeError('Method Set.prototype.size called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5559                                 // 3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
 
5560                                 if (S._es6Set !== true) {
 
5561                                         throw new TypeError('Method Set.prototype.size called on incompatible receiver ' + Object.prototype.toString.call(S));
 
5563                                 // 4. Let entries be the List that is S.[[SetData]].
 
5564                                 var entries = S._values;
 
5565                                 // 5. Let count be 0.
 
5567                                 // 6. For each e that is an element of entries, do
 
5568                                 for (var i = 0; i < entries.length; i++) {
 
5570                                         // a. If e is not empty, set count to count+1.
 
5571                                         if (e !== undefMarker) {
 
5582         // 23.2.3.11. Set.prototype [ @@iterator ] ( )
 
5583         // The initial value of the @@iterator property is the same function object as the initial value of the values property.
 
5584         CreateMethodProperty(Set.prototype, Symbol.iterator, values);
 
5586         // 23.2.3.12. Set.prototype [ @@toStringTag ]
 
5587         // The initial value of the @@toStringTag property is the String value "Set".
 
5588         // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
 
5590         // Polyfill.io - Safari 8 implements Set.name but as a non-configurable property, which means it would throw an error if we try and configure it here.
 
5591         if (!('name' in Set)) {
 
5593                 Object.defineProperty(Set, 'name', {
 
5601         // 23.2.5.1. CreateSetIterator ( set, kind )
 
5602         function CreateSetIterator(set, kind) {
 
5603                 // 1. If Type(set) is not Object, throw a TypeError exception.
 
5604                 if (typeof set !== 'object') {
 
5605                         throw new TypeError('createSetIterator called on incompatible receiver ' + Object.prototype.toString.call(set));
 
5607                 // 2. If set does not have a [[SetData]] internal slot, throw a TypeError exception.
 
5608                 if (set._es6Set !== true) {
 
5609                         throw new TypeError('createSetIterator called on incompatible receiver ' + Object.prototype.toString.call(set));
 
5611                 // 3. Let iterator be ObjectCreate(%SetIteratorPrototype%, « [[IteratedSet]], [[SetNextIndex]], [[SetIterationKind]] »).
 
5612                 var iterator = Object.create(SetIteratorPrototype);
 
5613                 // 4. Set iterator.[[IteratedSet]] to set.
 
5614                 Object.defineProperty(iterator, '[[IteratedSet]]', {
 
5620                 // 5. Set iterator.[[SetNextIndex]] to 0.
 
5621                 Object.defineProperty(iterator, '[[SetNextIndex]]', {
 
5627                 // 6. Set iterator.[[SetIterationKind]] to kind.
 
5628                 Object.defineProperty(iterator, '[[SetIterationKind]]', {
 
5634                 // 7. Return iterator.
 
5638         // 23.2.5.2. The %SetIteratorPrototype% Object
 
5639         var SetIteratorPrototype = {};
 
5640         //Polyfill.io - We add this property to help us identify what is a set iterator.
 
5641         Object.defineProperty(SetIteratorPrototype, 'isSetIterator', {
 
5642                 configurable: false,
 
5648         // 23.2.5.2.1. %SetIteratorPrototype%.next ( )
 
5649         CreateMethodProperty(SetIteratorPrototype, 'next', function next() {
 
5650                 // 1. Let O be the this value.
 
5652                 // 2. If Type(O) is not Object, throw a TypeError exception.
 
5653                 if (typeof O !== 'object') {
 
5654                         throw new TypeError('Method %SetIteratorPrototype%.next called on incompatible receiver ' + Object.prototype.toString.call(O));
 
5656                 // 3. If O does not have all of the internal slots of a Set Iterator Instance (23.2.5.3), throw a TypeError exception.
 
5657                 if (!O.isSetIterator) {
 
5658                         throw new TypeError('Method %SetIteratorPrototype%.next called on incompatible receiver ' + Object.prototype.toString.call(O));
 
5660                 // 4. Let s be O.[[IteratedSet]].
 
5661                 var s = O['[[IteratedSet]]'];
 
5662                 // 5. Let index be O.[[SetNextIndex]].
 
5663                 var index = O['[[SetNextIndex]]'];
 
5664                 // 6. Let itemKind be O.[[SetIterationKind]].
 
5665                 var itemKind = O['[[SetIterationKind]]'];
 
5666                 // 7. If s is undefined, return CreateIterResultObject(undefined, true).
 
5667                 if (s === undefined) {
 
5668                         return CreateIterResultObject(undefined, true);
 
5670                 // 8. Assert: s has a [[SetData]] internal slot.
 
5672                         throw new Error(Object.prototype.toString.call(s) + ' does not have [[SetData]] internal slot.');
 
5674                 // 9. Let entries be the List that is s.[[SetData]].
 
5675                 var entries = s._values;
 
5676                 // 10. Let numEntries be the number of elements of entries.
 
5677                 var numEntries = entries.length;
 
5678                 // 11. NOTE: numEntries must be redetermined each time this method is evaluated.
 
5679                 // 12. Repeat, while index is less than numEntries,
 
5680                 while (index < numEntries) {
 
5681                         // a. Let e be entries[index].
 
5682                         var e = entries[index];
 
5683                         // b. Set index to index+1.
 
5685                         // c. Set O.[[SetNextIndex]] to index.
 
5686                         O['[[SetNextIndex]]'] = index;
 
5687                         // d. If e is not empty, then
 
5688                         if (e !== undefMarker) {
 
5689                                 // i. If itemKind is "key+value", then
 
5690                                 if (itemKind === 'key+value') {
 
5691                                         // 1. Return CreateIterResultObject(CreateArrayFromList(« e, e »), false).
 
5692                                         return CreateIterResultObject([e, e], false);
 
5694                                 // ii. Return CreateIterResultObject(e, false).
 
5695                                 return CreateIterResultObject(e, false);
 
5698                 // 13. Set O.[[IteratedSet]] to undefined.
 
5699                 O['[[IteratedSet]]'] = undefined;
 
5700                 // 14. Return CreateIterResultObject(undefined, true).
 
5701                 return CreateIterResultObject(undefined, true);
 
5704         // 23.2.5.2.2. %SetIteratorPrototype% [ @@toStringTag ]
 
5705         // The initial value of the @@toStringTag property is the String value "Set Iterator".
 
5706         // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
 
5708         CreateMethodProperty(SetIteratorPrototype, Symbol.iterator, function iterator() {
 
5713         // Export the object
 
5715                 CreateMethodProperty(global, 'Set', Set);
 
5717                 // IE8 throws an error here if we set enumerable to false.
 
5718                 // More info on table 2: https://msdn.microsoft.com/en-us/library/dd229916(v=vs.85).aspx
 
5719                 global['Set'] = Set;
 
5726 if (!("from"in Array&&function(){try{return Array.from({length:-Infinity}),!0}catch(r){return!1}}()
 
5731         IsCallable, GetMethod, Symbol, IsConstructor, Construct, ArrayCreate, GetIterator, IteratorClose,
 
5732         ToString, IteratorStep, IteratorValue, Call, CreateDataPropertyOrThrow, ToObject, ToLength, Get, CreateMethodProperty
 
5735         var toString = Object.prototype.toString;
 
5736         var stringMatch = String.prototype.match;
 
5737         // A cross-realm friendly way to detect if a value is a String object or literal.
 
5738         function isString(value) {
 
5739                 if (typeof value === 'string') { return true; }
 
5740                 if (typeof value !== 'object') { return false; }
 
5741                 return toString.call(value) === '[object String]';
 
5744         // 22.1.2.1. Array.from ( items [ , mapfn [ , thisArg ] ] )
 
5745         CreateMethodProperty(Array, 'from', function from(items /* [ , mapfn [ , thisArg ] ] */) { // eslint-disable-line no-undef
 
5746                 // 1. Let C be the this value.
 
5748                 // 2. If mapfn is undefined, let mapping be false.
 
5749                 var mapfn = arguments.length > 1 ? arguments[1] : undefined;
 
5750                 if (mapfn === undefined) {
 
5751                         var mapping = false;
 
5754                         // a. If IsCallable(mapfn) is false, throw a TypeError exception.
 
5755                         if (IsCallable(mapfn) === false) {
 
5756                                 throw new TypeError(Object.prototype.toString.call(mapfn) + ' is not a function.');
 
5758                         // b. If thisArg is present, let T be thisArg; else let T be undefined.
 
5759                         var thisArg = arguments.length > 2 ? arguments[2] : undefined;
 
5760                         if (thisArg !== undefined) {
 
5765                         // c. Let mapping be true.
 
5769                 // 4. Let usingIterator be ? GetMethod(items, @@iterator).
 
5770                 var usingIterator = GetMethod(items, Symbol.iterator);
 
5771                 // 5. If usingIterator is not undefined, then
 
5772                 if (usingIterator !== undefined) {
 
5773                         // a. If IsConstructor(C) is true, then
 
5774                         if (IsConstructor(C)) {
 
5775                                 // i. Let A be ? Construct(C).
 
5776                                 var A = Construct(C);
 
5779                                 // i. Let A be ! ArrayCreate(0).
 
5782                         // c. Let iteratorRecord be ? GetIterator(items, usingIterator).
 
5783                         var iteratorRecord = GetIterator(items, usingIterator);
 
5788                                 // i. If k ≥ 2^53-1, then
 
5789                                 if (k >= (Math.pow(2, 53) - 1)) {
 
5790                                         // 1. Let error be Completion{[[Type]]: throw, [[Value]]: a newly created TypeError object, [[Target]]: empty}.
 
5791                                         var error = new TypeError('Iteration count can not be greater than or equal 9007199254740991.');
 
5792                                         // 2. Return ? IteratorClose(iteratorRecord, error).
 
5793                                         return IteratorClose(iteratorRecord, error);
 
5795                                 // ii. Let Pk be ! ToString(k).
 
5796                                 var Pk = ToString(k);
 
5797                                 // iii. Let next be ? IteratorStep(iteratorRecord).
 
5798                                 var next = IteratorStep(iteratorRecord);
 
5799                                 // iv. If next is false, then
 
5800                                 if (next === false) {
 
5801                                         // 1. Perform ? Set(A, "length", k, true).
 
5806                                 // v. Let nextValue be ? IteratorValue(next).
 
5807                                 var nextValue = IteratorValue(next);
 
5808                                 // vi. If mapping is true, then
 
5811                                                 // Polyfill.io - The try catch accounts for step 2.
 
5812                                                 // 1. Let mappedValue be Call(mapfn, T, « nextValue, k »).
 
5813                                                 var mappedValue = Call(mapfn, T, [nextValue, k]);
 
5814                                                 // 2. If mappedValue is an abrupt completion, return ? IteratorClose(iteratorRecord, mappedValue).
 
5815                                                 // 3. Let mappedValue be mappedValue.[[Value]].
 
5817                                                 return IteratorClose(iteratorRecord, e);
 
5820                                         // vii. Else, let mappedValue be nextValue.
 
5822                                         mappedValue = nextValue;
 
5825                                         // Polyfill.io - The try catch accounts for step ix.
 
5826                                         // viii. Let defineStatus be CreateDataPropertyOrThrow(A, Pk, mappedValue).
 
5827                                         CreateDataPropertyOrThrow(A, Pk, mappedValue);
 
5828                                         // ix. If defineStatus is an abrupt completion, return ? IteratorClose(iteratorRecord, defineStatus).
 
5830                                         return IteratorClose(iteratorRecord, e);
 
5832                                 // x. Increase k by 1.
 
5836                 // 6. NOTE: items is not an Iterable so assume it is an array-like object.
 
5837                 // 7. Let arrayLike be ! ToObject(items).
 
5838                 // Polyfill.io - For Strings we need to split astral symbols into surrogate pairs.
 
5839                 if (isString(items)) {
 
5840                         var arrayLike = stringMatch.call(items, /[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g) || [];
 
5842                         arrayLike = ToObject(items);
 
5844                 // 8. Let len be ? ToLength(? Get(arrayLike, "length")).
 
5845                 var len = ToLength(Get(arrayLike, "length"));
 
5846                 // 9. If IsConstructor(C) is true, then
 
5847                 if (IsConstructor(C)) {
 
5848                         // a. Let A be ? Construct(C, « len »).
 
5849                         A = Construct(C, [len]);
 
5852                         // a. Let A be ? ArrayCreate(len).
 
5853                         A = ArrayCreate(len);
 
5857                 // 12. Repeat, while k < len
 
5859                         // a. Let Pk be ! ToString(k).
 
5861                         // b. Let kValue be ? Get(arrayLike, Pk).
 
5862                         var kValue = Get(arrayLike, Pk);
 
5863                         // c. If mapping is true, then
 
5864                         if (mapping === true) {
 
5865                                 // i. Let mappedValue be ? Call(mapfn, T, « kValue, k »).
 
5866                                 mappedValue = Call(mapfn, T, [kValue, k]);
 
5867                                 // d. Else, let mappedValue be kValue.
 
5869                                 mappedValue = kValue;
 
5871                         // e. Perform ? CreateDataPropertyOrThrow(A, Pk, mappedValue).
 
5872                         CreateDataPropertyOrThrow(A, Pk, mappedValue);
 
5873                         // f. Increase k by 1.
 
5876                 // 13. Perform ? Set(A, "length", len, true).
 
5885 if (!("Symbol"in this&&"split"in this.Symbol
 
5890 Object.defineProperty(Symbol, 'split', { value: Symbol('split') });
 
5894 if (!("Symbol"in this&&"toPrimitive"in this.Symbol
 
5897 // Symbol.toPrimitive
 
5899 Object.defineProperty(Symbol, 'toPrimitive', { value: Symbol('toPrimitive') });
 
5903 if (!("Symbol"in this&&"toStringTag"in this.Symbol
 
5906 // Symbol.toStringTag
 
5908 Object.defineProperty(Symbol, 'toStringTag', {
 
5909         value: Symbol('toStringTag')
 
5917 // A modification of https://github.com/medikoo/es6-iterator
 
5918 // Copyright (C) 2013-2015 Mariusz Nowak (www.medikoo.com)
 
5920 var Iterator = (function () { // eslint-disable-line no-unused-vars
 
5921         var clear = function () {
 
5925         var callable = function (fn) {
 
5926                 if (typeof fn !== 'function') throw new TypeError(fn + " is not a function");
 
5930         var Iterator = function (list, context) {
 
5931                 if (!(this instanceof Iterator)) {
 
5932                         return new Iterator(list, context);
 
5934                 Object.defineProperties(this, {
 
5948                 if (!context) return;
 
5949                 callable(context.on);
 
5950                 context.on('_add', this._onAdd.bind(this));
 
5951                 context.on('_delete', this._onDelete.bind(this));
 
5952                 context.on('_clear', this._onClear.bind(this));
 
5955         Object.defineProperties(Iterator.prototype, Object.assign({
 
5963                         value: function () {
 
5965                                 if (!this.__list__) return;
 
5966                                 if (this.__redo__) {
 
5967                                         i = this.__redo__.shift();
 
5968                                         if (i !== undefined) return i;
 
5970                                 if (this.__nextIndex__ < this.__list__.length) return this.__nextIndex__++;
 
5978                         value: function () {
 
5979                                 return this._createResult(this._next());
 
5986                         value: function (i) {
 
5987                                 if (i === undefined) return {
 
5993                                         value: this._resolve(i)
 
6001                         value: function (i) {
 
6002                                 return this.__list__[i];
 
6009                         value: function () {
 
6010                                 this.__list__ = null;
 
6011                                 delete this.__redo__;
 
6012                                 if (!this.__context__) return;
 
6013                                 this.__context__.off('_add', this._onAdd.bind(this));
 
6014                                 this.__context__.off('_delete', this._onDelete.bind(this));
 
6015                                 this.__context__.off('_clear', this._onClear.bind(this));
 
6016                                 this.__context__ = null;
 
6023                         value: function () {
 
6024                                 return '[object Iterator]';
 
6032                         value: function (index) {
 
6033                                 if (index >= this.__nextIndex__) return;
 
6034                                 ++this.__nextIndex__;
 
6035                                 if (!this.__redo__) {
 
6036                                         Object.defineProperty(this, '__redo__', {
 
6044                                 this.__redo__.forEach(function (redo, i) {
 
6045                                         if (redo >= index) this.__redo__[i] = ++redo;
 
6047                                 this.__redo__.push(index);
 
6054                         value: function (index) {
 
6056                                 if (index >= this.__nextIndex__) return;
 
6057                                 --this.__nextIndex__;
 
6058                                 if (!this.__redo__) return;
 
6059                                 i = this.__redo__.indexOf(index);
 
6060                                 if (i !== -1) this.__redo__.splice(i, 1);
 
6061                                 this.__redo__.forEach(function (redo, i) {
 
6062                                         if (redo > index) this.__redo__[i] = --redo;
 
6070                         value: function () {
 
6071                                 if (this.__redo__) clear.call(this.__redo__);
 
6072                                 this.__nextIndex__ = 0;
 
6080         Object.defineProperty(Iterator.prototype, Symbol.iterator, {
 
6081                 value: function () {
 
6088         Object.defineProperty(Iterator.prototype, Symbol.toStringTag, {
 
6090                 configurable: false,
 
6099 /* global Iterator */
 
6100 // A modification of https://github.com/medikoo/es6-iterator
 
6101 // Copyright (C) 2013-2015 Mariusz Nowak (www.medikoo.com)
 
6103 var ArrayIterator = (function() { // eslint-disable-line no-unused-vars
 
6105         var ArrayIterator = function(arr, kind) {
 
6106                 if (!(this instanceof ArrayIterator)) return new ArrayIterator(arr, kind);
 
6107                 Iterator.call(this, arr);
 
6108                 if (!kind) kind = 'value';
 
6109                 else if (String.prototype.includes.call(kind, 'key+value')) kind = 'key+value';
 
6110                 else if (String.prototype.includes.call(kind, 'key')) kind = 'key';
 
6111                 else kind = 'value';
 
6112                 Object.defineProperty(this, '__kind__', {
 
6114                         configurable: false,
 
6119         if (Object.setPrototypeOf) Object.setPrototypeOf(ArrayIterator, Iterator.prototype);
 
6121         ArrayIterator.prototype = Object.create(Iterator.prototype, {
 
6123                         value: ArrayIterator,
 
6129                         value: function(i) {
 
6130                                 if (this.__kind__ === 'value') return this.__list__[i];
 
6131                                 if (this.__kind__ === 'key+value') return [i, this.__list__[i]];
 
6140                                 return '[object Array Iterator]';
 
6148         return ArrayIterator;
 
6150 if (!("Symbol"in this&&"iterator"in this.Symbol&&!!Array.prototype.entries
 
6153 // Array.prototype.entries
 
6154 /* global CreateMethodProperty, ToObject */
 
6155 // 22.1.3.4. Array.prototype.entries ( )
 
6156 CreateMethodProperty(Array.prototype, 'entries', function entries() {
 
6157         // 1. Let O be ? ToObject(this value).
 
6158         var O = ToObject(this);
 
6159         // 2. Return CreateArrayIterator(O, "key+value").
 
6160         // TODO: Add CreateArrayIterator
 
6161         return new ArrayIterator(O, 'key+value');
 
6166 if (!("Symbol"in this&&"iterator"in this.Symbol&&!!Array.prototype.keys
 
6169 // Array.prototype.keys
 
6170 /* global CreateMethodProperty, ToObject */
 
6171 // 22.1.3.14. Array.prototype.keys ( )
 
6172 CreateMethodProperty(Array.prototype, 'keys', function keys() {
 
6173         // 1. Let O be ? ToObject(this value).
 
6174         var O = ToObject(this);
 
6175         // 2. Return CreateArrayIterator(O, "key").
 
6176         // TODO: Add CreateArrayIterator.
 
6177         return new ArrayIterator(O, 'key');
 
6182 if (!("values"in Array.prototype
 
6185 // Array.prototype.values
 
6186 /* global CreateMethodProperty, Symbol, ToObject */
 
6187 // 22.1.3.30/ Array.prototype.values ( )
 
6188 // Polyfill.io - Firefox, Chrome and Opera have Array.prototype[Symbol.iterator], which is the exact same function as Array.prototype.values.
 
6189 if ('Symbol' in this && 'iterator' in Symbol && typeof Array.prototype[Symbol.iterator] === 'function') {
 
6190         CreateMethodProperty(Array.prototype, 'values', Array.prototype[Symbol.iterator]);
 
6192         CreateMethodProperty(Array.prototype, 'values', function values () {
 
6193                 // 1. Let O be ? ToObject(this value).
 
6194                 var O = ToObject(this);
 
6195                 // 2. Return CreateArrayIterator(O, "value").
 
6196                 // TODO: Add CreateArrayIterator
 
6197                 return new ArrayIterator(O, 'value');
 
6203 if (!("Symbol"in this&&"iterator"in this.Symbol&&!!Array.prototype[Symbol.iterator]
 
6206 // Array.prototype.@@iterator
 
6207 /* global Symbol, CreateMethodProperty */
 
6208 // 22.1.3.31. Array.prototype [ @@iterator ] ( )
 
6209 // The initial value of the @@iterator property is the same function object as the initial value of the  Array.prototype.values property.
 
6210 CreateMethodProperty(Array.prototype, Symbol.iterator, Array.prototype.values);
 
6216 // A modification of https://github.com/medikoo/es6-iterator
 
6217 // Copyright (C) 2013-2015 Mariusz Nowak (www.medikoo.com)
 
6219 /* global Iterator */
 
6221 var StringIterator = (function() { // eslint-disable-line no-unused-vars
 
6223         var StringIterator = function (str) {
 
6224                 if (!(this instanceof StringIterator)) return new StringIterator(str);
 
6226                 Iterator.call(this, str);
 
6227                 Object.defineProperty(this, '__length__', {
 
6229                         configurable: false,
 
6234         if (Object.setPrototypeOf) Object.setPrototypeOf(StringIterator, Iterator);
 
6236         StringIterator.prototype = Object.create(Iterator.prototype, {
 
6238                         value: StringIterator,
 
6245                                 if (!this.__list__) return;
 
6246                                 if (this.__nextIndex__ < this.__length__) return this.__nextIndex__++;
 
6254                         value: function (i) {
 
6255                                 var char = this.__list__[i], code;
 
6256                                 if (this.__nextIndex__ === this.__length__) return char;
 
6257                                 code = char.charCodeAt(0);
 
6258                                 if ((code >= 0xD800) && (code <= 0xDBFF)) return char + this.__list__[this.__nextIndex__++];
 
6267                                 return '[object String Iterator]';
 
6275         return StringIterator;
 
6277 if (!("Symbol"in this&&"iterator"in this.Symbol&&!!String.prototype[Symbol.iterator]
 
6280 // String.prototype.@@iterator
 
6281 /* global CreateMethodProperty, RequireObjectCoercible, ToString, StringIterator, Symbol */
 
6282 // 21.1.3.29. String.prototype [ @@iterator ] ( )
 
6283 CreateMethodProperty(String.prototype, Symbol.iterator, function () {
 
6284         // 1. Let O be ? RequireObjectCoercible(this value).
 
6285         var O = RequireObjectCoercible(this);
 
6286         // 2. Let S be ? ToString(O).
 
6287         var S = ToString(O);
 
6288         // 3. Return CreateStringIterator(S).
 
6289         // TODO: Add CreateStringIterator.
 
6290         return new StringIterator(S);
 
6295 if (!("Symbol"in this&&"unscopables"in this.Symbol
 
6298 // Symbol.unscopables
 
6300 Object.defineProperty(Symbol, 'unscopables', { value: Symbol('unscopables') });
 
6304 if (!((function(e){try{if("WeakMap"in e&&0===WeakMap.length){var t={},a=new WeakMap([[t,"test"]])
 
6305 return"test"===a.get(t)&&!1===a["delete"](0)}return!1}catch(n){return!1}})(this)
 
6309 /* globals Symbol, OrdinaryCreateFromConstructor, IsCallable, GetIterator, IteratorStep, IteratorValue, IteratorClose, Get, Call, CreateMethodProperty, Type, SameValue */
 
6310 (function (global) {
 
6311         // Deleted map items mess with iterator pointers, so rather than removing them mark them as deleted. Can't use undefined or null since those both valid keys so use a private symbol.
 
6312         var undefMarker = Symbol('undef');
 
6313         // 23.3.1.1 WeakMap ( [ iterable ] )
 
6314         var WeakMap = function WeakMap(/* iterable */) {
 
6315                 // 1. If NewTarget is undefined, throw a TypeError exception.
 
6316                 if (!(this instanceof WeakMap)) {
 
6317                         throw new TypeError('Constructor WeakMap requires "new"');
 
6319                 // 2. Let map be ? OrdinaryCreateFromConstructor(NewTarget, "%WeakMapPrototype%", « [[WeakMapData]] »).
 
6320                 var map = OrdinaryCreateFromConstructor(this, WeakMap.prototype, {
 
6326                 // 3. Set map.[[WeakMapData]] to a new empty List.
 
6327                 // Polyfill.io - This step was done as part of step two.
 
6329                 // 4. If iterable is not present, let iterable be undefined.
 
6330                 var iterable = arguments.length > 0 ? arguments[0] : undefined;
 
6332                 // 5. If iterable is either undefined or null, return map.
 
6333                 if (iterable === null || iterable === undefined) {
 
6337                 // 6. Let adder be ? Get(map, "set").
 
6338                 var adder = Get(map, "set");
 
6340                 // 7. If IsCallable(adder) is false, throw a TypeError exception.
 
6341                 if (!IsCallable(adder)) {
 
6342                         throw new TypeError("WeakMap.prototype.set is not a function");
 
6345                 // 8. Let iteratorRecord be ? GetIterator(iterable).
 
6347                         var iteratorRecord = GetIterator(iterable);
 
6350                                 // a. Let next be ? IteratorStep(iteratorRecord).
 
6351                                 var next = IteratorStep(iteratorRecord);
 
6352                                 // b. If next is false, return map.
 
6353                                 if (next === false) {
 
6356                                 // c. Let nextItem be ? IteratorValue(next).
 
6357                                 var nextItem = IteratorValue(next);
 
6358                                 // d. If Type(nextItem) is not Object, then
 
6359                                 if (Type(nextItem) !== 'object') {
 
6360                                         // i. Let error be Completion{[[Type]]: throw, [[Value]]: a newly created TypeError object, [[Target]]: empty}.
 
6362                                                 throw new TypeError('Iterator value ' + nextItem + ' is not an entry object');
 
6364                                                 // ii. Return ? IteratorClose(iteratorRecord, error).
 
6365                                                 return IteratorClose(iteratorRecord, error);
 
6369                                         // Polyfill.io - The try catch accounts for steps: f, h, and j.
 
6371                                         // e. Let k be Get(nextItem, "0").
 
6372                                         var k = Get(nextItem, "0");
 
6373                                         // f. If k is an abrupt completion, return ? IteratorClose(iteratorRecord, k).
 
6374                                         // g. Let v be Get(nextItem, "1").
 
6375                                         var v = Get(nextItem, "1");
 
6376                                         // h. If v is an abrupt completion, return ? IteratorClose(iteratorRecord, v).
 
6377                                         // i. Let status be Call(adder, map, « k.[[Value]], v.[[Value]] »).
 
6378                                         Call(adder, map, [k, v]);
 
6380                                         // j. If status is an abrupt completion, return ? IteratorClose(iteratorRecord, status).
 
6381                                         return IteratorClose(iteratorRecord, e);
 
6385                         // Polyfill.io - For user agents which do not have iteration methods on argument objects or arrays, we can special case those.
 
6386                         if (Array.isArray(iterable) ||
 
6387                                 Object.prototype.toString.call(iterable) === '[object Arguments]' ||
 
6388                                 // IE 7 & IE 8 return '[object Object]' for the arguments object, we can detect by checking for the existence of the callee property
 
6389                                 (!!iterable.callee)) {
 
6391                                 var length = iterable.length;
 
6392                                 for (index = 0; index < length; index++) {
 
6393                                         var k = iterable[index][0];
 
6394                                         var v = iterable[index][1];
 
6395                                         Call(adder, map, [k, v]);
 
6402         // 23.3.2.1 WeakMap.prototype
 
6403         // The initial value of WeakMap.prototype is the intrinsic object %WeakMapPrototype%.
 
6404         // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
 
6405         Object.defineProperty(WeakMap, 'prototype', {
 
6406                 configurable: false,
 
6412         // 23.3.3.1 WeakMap.prototype.constructor
 
6413         CreateMethodProperty(WeakMap.prototype, 'constructor', WeakMap);
 
6415         // 23.3.3.2 WeakMap.prototype.delete ( key )
 
6416         CreateMethodProperty(WeakMap.prototype, 'delete', function (key) {
 
6417                 // 1. Let M be the this value.
 
6419                 // 2. If Type(M) is not Object, throw a TypeError exception.
 
6420                 if (Type(M) !== 'object') {
 
6421                         throw new TypeError('Method WeakMap.prototype.clear called on incompatible receiver ' + Object.prototype.toString.call(M));
 
6423                 // 3. If M does not have a [[WeakMapData]] internal slot, throw a TypeError exception.
 
6424                 if (M._es6WeakMap !== true) {
 
6425                         throw new TypeError('Method WeakMap.prototype.clear called on incompatible receiver ' + Object.prototype.toString.call(M));
 
6427                 // 4. Let entries be the List that is M.[[WeakMapData]].
 
6428                 var entries = M._keys;
 
6429                 // 5. If Type(key) is not Object, return false.
 
6430                 if (Type(key) !== 'object') {
 
6433                 // 6. For each Record {[[Key]], [[Value]]} p that is an element of entries, do
 
6434                 for (var i = 0; i < entries.length; i++) {
 
6435                         // a. If p.[[Key]] is not empty and SameValue(p.[[Key]], key) is true, then
 
6436                         if (M._keys[i] !== undefMarker && SameValue(M._keys[i], key)) {
 
6437                                 // i. Set p.[[Key]] to empty.
 
6438                                 this._keys[i] = undefMarker;
 
6439                                 // ii. Set p.[[Value]] to empty.
 
6440                                 this._values[i] = undefMarker;
 
6441                                 this._size = --this._size;
 
6442                                 // iii. Return true.
 
6450         // 23.3.3.3 WeakMap.prototype.get ( key )
 
6451         CreateMethodProperty(WeakMap.prototype, 'get', function get(key) {
 
6452                 // 1. Let M be the this value.
 
6454                 // 2. If Type(M) is not Object, throw a TypeError exception.
 
6455                 if (Type(M) !== 'object') {
 
6456                         throw new TypeError('Method WeakMap.prototype.get called on incompatible receiver ' + Object.prototype.toString.call(M));
 
6458                 // 3. If M does not have a [[WeakMapData]] internal slot, throw a TypeError exception.
 
6459                 if (M._es6WeakMap !== true) {
 
6460                         throw new TypeError('Method WeakMap.prototype.get called on incompatible receiver ' + Object.prototype.toString.call(M));
 
6462                 // 4. Let entries be the List that is M.[[WeakMapData]].
 
6463                 var entries = M._keys;
 
6464                 // 5. If Type(key) is not Object, return undefined.
 
6465                 if (Type(key) !== 'object') {
 
6468                 // 6. For each Record {[[Key]], [[Value]]} p that is an element of entries, do
 
6469                 for (var i = 0; i < entries.length; i++) {
 
6470                         // a. If p.[[Key]] is not empty and SameValue(p.[[Key]], key) is true, return p.[[Value]].
 
6471                         if (M._keys[i] !== undefMarker && SameValue(M._keys[i], key)) {
 
6472                                 return M._values[i];
 
6475                 // 7. Return undefined.
 
6479         // 23.3.3.4 WeakMap.prototype.has ( key )
 
6480         CreateMethodProperty(WeakMap.prototype, 'has', function has(key) {
 
6481                 // 1. Let M be the this value.
 
6483                 // 2. If Type(M) is not Object, throw a TypeError exception.
 
6484                 if (typeof M !== 'object') {
 
6485                         throw new TypeError('Method WeakMap.prototype.has called on incompatible receiver ' + Object.prototype.toString.call(M));
 
6487                 // 3. If M does not have a [[WeakMapData]] internal slot, throw a TypeError exception.
 
6488                 if (M._es6WeakMap !== true) {
 
6489                         throw new TypeError('Method WeakMap.prototype.has called on incompatible receiver ' + Object.prototype.toString.call(M));
 
6491                 // 4. Let entries be the List that is M.[[WeakMapData]].
 
6492                 var entries = M._keys;
 
6493                 // 5. If Type(key) is not Object, return false.
 
6494                 if (Type(key) !== 'object') {
 
6497                 // 6. For each Record {[[Key]], [[Value]]} p that is an element of entries, do
 
6498                 for (var i = 0; i < entries.length; i++) {
 
6499                         // a. If p.[[Key]] is not empty and SameValue(p.[[Key]], key) is true, return true.
 
6500                         if (M._keys[i] !== undefMarker && SameValue(M._keys[i], key)) {
 
6508         // 23.3.3.5 WeakMap.prototype.set ( key, value )
 
6509         CreateMethodProperty(WeakMap.prototype, 'set', function set(key, value) {
 
6510                 // 1. Let M be the this value.
 
6512                 // 2. If Type(M) is not Object, throw a TypeError exception.
 
6513                 if (Type(M) !== 'object') {
 
6514                         throw new TypeError('Method WeakMap.prototype.set called on incompatible receiver ' + Object.prototype.toString.call(M));
 
6516                 // 3. If M does not have a [[WeakMapData]] internal slot, throw a TypeError exception.
 
6517                 if (M._es6WeakMap !== true) {
 
6518                         throw new TypeError('Method WeakMap.prototype.set called on incompatible receiver ' + Object.prototype.toString.call(M));
 
6520                 // 4. Let entries be the List that is M.[[WeakMapData]].
 
6521                 var entries = M._keys;
 
6522                 // 5. If Type(key) is not Object, throw a TypeError exception.
 
6523                 if (Type(key) !== 'object') {
 
6524                         throw new TypeError("Invalid value used as weak map key");
 
6526                 // 6. For each Record {[[Key]], [[Value]]} p that is an element of entries, do
 
6527                 for (var i = 0; i < entries.length; i++) {
 
6528                         // a. If p.[[Key]] is not empty and SameValue(p.[[Key]], key) is true, then
 
6529                         if (M._keys[i] !== undefMarker && SameValue(M._keys[i], key)) {
 
6530                                 // i. Set p.[[Value]] to value.
 
6531                                 M._values[i] = value;
 
6536                 // 7. Let p be the Record {[[Key]]: key, [[Value]]: value}.
 
6541                 // 8. Append p as the last element of entries.
 
6542                 M._keys.push(p['[[Key]]']);
 
6543                 M._values.push(p['[[Value]]']);
 
6548         // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
 
6549         // The initial value of the @@toStringTag property is the String value "WeakMap".
 
6550         // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
 
6552         // Polyfill.io - Safari 8 implements WeakMap.name but as a non-writable property, which means it would throw an error if we try and write to it here.
 
6553         if (!('name' in WeakMap)) {
 
6555                 Object.defineProperty(WeakMap, 'name', {
 
6563         // Export the object
 
6565                 CreateMethodProperty(global, 'WeakMap', WeakMap);
 
6567                 // IE8 throws an error here if we set enumerable to false.
 
6568                 // More info on table 2: https://msdn.microsoft.com/en-us/library/dd229916(v=vs.85).aspx
 
6569                 global['WeakMap'] = WeakMap;
 
6575 if (!((function(e){try{if("WeakSet"in e&&0===WeakSet.length){var t={},n=new WeakSet([t])
 
6576 return n.has(t)&&!1===n["delete"](0)}return!1}catch(r){return!1}})(this)
 
6580 /* global Call, CreateMethodProperty, Get, GetIterator, IsArray, IsCallable, IteratorClose, IteratorStep, IteratorValue, OrdinaryCreateFromConstructor, SameValueZero, Type, Symbol */
 
6581 (function (global) {
 
6582         // Deleted set items mess with iterator pointers, so rather than removing them mark them as deleted. Can't use undefined or null since those both valid keys so use a private symbol.
 
6583         var undefMarker = Symbol('undef');
 
6584         // 23.4.1.1. WeakSet ( [ iterable ] )
 
6585         var WeakSet = function WeakSet() {
 
6586                 // 1. If NewTarget is undefined, throw a TypeError exception.
 
6587                 if (!(this instanceof WeakSet)) {
 
6588                         throw new TypeError('Constructor WeakSet requires "new"');
 
6590                 // 2. Let set be ? OrdinaryCreateFromConstructor(NewTarget, "%WeakSetPrototype%", « [[WeakSetData]] »).
 
6591                 var set = OrdinaryCreateFromConstructor(this, WeakSet.prototype, {
 
6597                 // 3. Set set.[[WeakSetData]] to a new empty List.
 
6598                 // Polyfill.io - This step was done as part of step two.
 
6600                 // 4. If iterable is not present, let iterable be undefined.
 
6601                 var iterable = arguments.length > 0 ? arguments[0] : undefined;
 
6602                 // 5. If iterable is either undefined or null, return set.
 
6603                 if (iterable === null || iterable === undefined) {
 
6606                 // 6. Let adder be ? Get(set, "add").
 
6607                 var adder = Get(set, 'add');
 
6608                 // 7. If IsCallable(adder) is false, throw a TypeError exception.
 
6609                 if (!IsCallable(adder)) {
 
6610                         throw new TypeError("WeakSet.prototype.add is not a function");
 
6613                         // 8. Let iteratorRecord be ? GetIterator(iterable).
 
6614                         var iteratorRecord = GetIterator(iterable);
 
6617                                 // a. Let next be ? IteratorStep(iteratorRecord).
 
6618                                 var next = IteratorStep(iteratorRecord);
 
6619                                 // b. If next is false, return set.
 
6620                                 if (next === false) {
 
6623                                 // c. Let nextValue be ? IteratorValue(next).
 
6624                                 var nextValue = IteratorValue(next);
 
6625                                 // d. Let status be Call(adder, set, « nextValue »).
 
6627                                         Call(adder, set, [nextValue]);
 
6629                                         // e. If status is an abrupt completion, return ? IteratorClose(iteratorRecord, status).
 
6630                                         return IteratorClose(iteratorRecord, e);
 
6634                         // Polyfill.io - For user agents which do not have iteration methods on argument objects or arrays, we can special case those.
 
6635                         if (IsArray(iterable) ||
 
6636                                 Object.prototype.toString.call(iterable) === '[object Arguments]' ||
 
6637                                 // IE 7 & IE 8 return '[object Object]' for the arguments object, we can detect by checking for the existence of the callee property
 
6638                                 (!!iterable.callee)) {
 
6640                                 var length = iterable.length;
 
6641                                 for (index = 0; index < length; index++) {
 
6642                                         Call(adder, set, [iterable[index]]);
 
6649         // 23.4.2.1. WeakSet.prototype
 
6650         // The initial value of WeakSet.prototype is the intrinsic %WeakSetPrototype% object.
 
6651         // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
 
6652         Object.defineProperty(WeakSet, 'prototype', {
 
6653                 configurable: false,
 
6659         // 23.4.3.1. WeakSet.prototype.add ( value )
 
6660         CreateMethodProperty(WeakSet.prototype, 'add', function add(value) {
 
6661                 // 1. Let S be the this value.
 
6663                 // 2. If Type(S) is not Object, throw a TypeError exception.
 
6664                 if (Type(S) !== 'object') {
 
6665                         throw new TypeError('Method WeakSet.prototype.add called on incompatible receiver ' + Object.prototype.toString.call(S));
 
6667                 // 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError exception.
 
6668                 if (S._es6WeakSet !== true) {
 
6669                         throw new TypeError('Method WeakSet.prototype.add called on incompatible receiver ' + Object.prototype.toString.call(S));
 
6671                 // 4. If Type(value) is not Object, throw a TypeError exception.
 
6672                 if (Type(value) !== 'object') {
 
6673                         throw new TypeError('Invalid value used in weak set');
 
6675                 // 5. Let entries be the List that is S.[[WeakSetData]].
 
6676                 var entries = S._values;
 
6677                 // 6. For each e that is an element of entries, do
 
6678                 for (var i = 0; i < entries.length; i++) {
 
6680                         // a. If e is not empty and SameValue(e, value) is true, then
 
6681                         if (e !== undefMarker && SameValueZero(e, value)) {
 
6686                 // 7. Append value as the last element of entries.
 
6687                 S._values.push(value);
 
6692         // 23.4.3.2. WeakSet.prototype.constructor
 
6693         CreateMethodProperty(WeakSet.prototype, 'constructor', WeakSet);
 
6695         // 23.4.3.3. WeakSet.prototype.delete ( value )
 
6696         CreateMethodProperty(WeakSet.prototype, 'delete', function (value) {
 
6697                 // 1. Let S be the this value.
 
6699                 // 2. If Type(S) is not Object, throw a TypeError exception.
 
6700                 if (Type(S) !== 'object') {
 
6701                         throw new TypeError('Method WeakSet.prototype.delete called on incompatible receiver ' + Object.prototype.toString.call(S));
 
6703                 // 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError exception.
 
6704                 if (S._es6WeakSet !== true) {
 
6705                         throw new TypeError('Method WeakSet.prototype.delete called on incompatible receiver ' + Object.prototype.toString.call(S));
 
6707                 // 4. If Type(value) is not Object, return false.
 
6708                 if (Type(value) !== 'object') {
 
6711                 // 5. Let entries be the List that is S.[[WeakSetData]].
 
6712                 var entries = S._values;
 
6713                 // 6. For each e that is an element of entries, do
 
6714                 for (var i = 0; i < entries.length; i++) {
 
6716                         // a. If e is not empty and SameValue(e, value) is true, then
 
6717                         if (e !== undefMarker && SameValueZero(e, value)) {
 
6718                                 // i. Replace the element of entries whose value is e with an element whose value is empty.
 
6719                                 entries[i] = undefMarker;
 
6728         // 23.4.3.4. WeakSet.prototype.has ( value )
 
6729         CreateMethodProperty(WeakSet.prototype, 'has', function has(value) {
 
6730                 // 1. Let S be the this value.
 
6732                 // 2. If Type(S) is not Object, throw a TypeError exception.
 
6733                 if (Type(S) !== 'object') {
 
6734                         throw new TypeError('Method WeakSet.prototype.has called on incompatible receiver ' + Object.prototype.toString.call(S));
 
6736                 // 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError exception.
 
6737                 if (S._es6WeakSet !== true) {
 
6738                         throw new TypeError('Method WeakSet.prototype.has called on incompatible receiver ' + Object.prototype.toString.call(S));
 
6740                 // 4. Let entries be the List that is S.[[WeakSetData]].
 
6741                 var entries = S._values;
 
6742                 // 5. If Type(value) is not Object, return false.
 
6743                 if (Type(value) !== 'object') {
 
6746                 // 6. For each e that is an element of entries, do
 
6747                 for (var i = 0; i < entries.length; i++) {
 
6749                         // a. If e is not empty and SameValue(e, value) is true, return true.
 
6750                         if (e !== undefMarker && SameValueZero(e, value)) {
 
6758         // 23.4.3.5. WeakSet.prototype [ @@toStringTag ]
 
6759         // The initial value of the @@toStringTag property is the String value "WeakSet".
 
6760         // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
 
6762         // Polyfill.io - Safari 8 implements Set.name but as a non-configurable property, which means it would throw an error if we try and configure it here.
 
6763         if (!('name' in WeakSet)) {
 
6765                 Object.defineProperty(WeakSet, 'name', {
 
6773         // Export the object
 
6775                 CreateMethodProperty(global, 'WeakSet', WeakSet);
 
6777                 // IE8 throws an error here if we set enumerable to false.
 
6778                 // More info on table 2: https://msdn.microsoft.com/en-us/library/dd229916(v=vs.85).aspx
 
6779                 global['WeakSet'] = WeakSet;
 
6787 .call('object' === typeof window && window || 'object' === typeof self && self || 'object' === typeof global && global || {});