{"version":3,"file":"index.cjs","sources":["../src/Constants.js","../node_modules/bit-buffer/bit-buffer.js","../src/services/utilService.js","../src/FranchiseEnumValue.js","../src/FranchiseEnum.js","../node_modules/node-xml-stream-parser/dist/parser.js","../node_modules/node-xml-stream-parser/dist/index.js","../src/services/schemaGenerator.js","../node_modules/fast-xml-parser/src/util.js","../node_modules/fast-xml-parser/src/validator.js","../node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js","../node_modules/fast-xml-parser/src/xmlparser/xmlNode.js","../node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js","../node_modules/strnum/strnum.js","../node_modules/fast-xml-parser/src/ignoreAttributes.js","../node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js","../node_modules/fast-xml-parser/src/xmlparser/node2json.js","../node_modules/fast-xml-parser/src/xmlparser/XMLParser.js","../src/services/schemaGeneratorV2.js","../src/FranchiseSchema.js","../src/FranchiseFileTable2Field.js","../src/FranchiseFileTable3Field.js","../src/FranchiseFileField.js","../src/FranchiseFileRecord.js","../src/FranchiseFileTable.js","../src/strategies/common/CommonAlgorithms.js","../src/strategies/common/file/CommonFileStrategy.js","../src/strategies/common/file/FranchiseFileStrategy.js","../src/strategies/franchise/m19/M19FileStrategy.js","../src/strategies/common/table/FranchiseTableStrategy.js","../src/strategies/common/header/m19/M19TableHeaderStrategy.js","../src/strategies/franchise/m19/M19TableStrategy.js","../src/strategies/common/table2Field/FranchiseTable2FieldStrategy.js","../src/strategies/franchise/m19/M19Table2FieldStrategy.js","../src/services/TDB2Converter.js","../src/strategies/common/table3Field/FranchiseTable3FieldStrategy.js","../src/strategies/franchise/m24/M24Table3FieldStrategy.js","../src/strategies/franchise/m19/M19Strategy.js","../src/strategies/franchise/m20/M20FileStrategy.js","../src/strategies/common/header/m20/M20TableHeaderStrategy.js","../src/strategies/franchise/m20/M20TableStrategy.js","../src/strategies/franchise/m20/M20Table2FieldStrategy.js","../src/strategies/franchise/m20/M20Strategy.js","../src/strategies/common/header/m24/M24TableHeaderStrategy.js","../src/strategies/franchise/m24/M24TableStrategy.js","../src/strategies/franchise/m24/M24Strategy.js","../src/services/isonProcessor.js","../src/strategies/common/table3Field/FranchiseIsonTable3FieldStrategy.js","../src/strategies/franchise/m25/M25Table3FieldStrategy.js","../src/strategies/franchise/m25/M25Strategy.js","../src/strategies/common/table3Field/FranchiseZstdTable3FieldStrategy.js","../src/strategies/franchise/m26/M26Table3FieldStrategy.js","../src/strategies/franchise/m26/M26Strategy.js","../src/strategies/common/file/FTCFileStrategy.js","../src/strategies/franchise-common/m19/M19FTCFileStrategy.js","../src/strategies/common/table/FTCTableStrategy.js","../src/strategies/franchise-common/m19/M19FTCTableStrategy.js","../src/strategies/common/table2Field/FTCTable2FieldStrategy.js","../src/strategies/franchise-common/m19/M19FTCTable2FieldStrategy.js","../src/strategies/franchise-common/m19/M19FTCStrategy.js","../src/strategies/franchise-common/m20/M20FTCFileStrategy.js","../src/strategies/franchise-common/m20/M20FTCTableStrategy.js","../src/strategies/franchise-common/m20/M20FTCTable2FieldStrategy.js","../src/strategies/franchise-common/m20/M20FTCStrategy.js","../src/strategies/StrategyPicker.js","../src/FranchiseFileSettings.js","../src/services/schemaPicker.js","../src/FranchiseFile.js","../src/index.js"],"sourcesContent":["export const FORMAT = {\n    FRANCHISE: 'franchise',\n    FRANCHISE_COMMON: 'franchise-common'\n};\nexport default {\n    FORMAT\n};\n","(function (root) {\n\n/**********************************************************\n *\n * BitView\n *\n * BitView provides a similar interface to the standard\n * DataView, but with support for bit-level reads / writes.\n *\n **********************************************************/\nvar BitView = function (source, byteOffset, byteLength) {\n\tvar isBuffer = source instanceof ArrayBuffer ||\n\t\t(typeof Buffer !== 'undefined' && source instanceof Buffer);\n\n\tif (!isBuffer) {\n\t\tthrow new Error('Must specify a valid ArrayBuffer or Buffer.');\n\t}\n\n\tbyteOffset = byteOffset || 0;\n\tbyteLength = byteLength || source.byteLength /* ArrayBuffer */ || source.length /* Buffer */;\n\n\tthis._view = new Uint8Array(source.buffer || source, byteOffset, byteLength);\n\n\tthis.bigEndian = false;\n};\n\n// Used to massage fp values so we can operate on them\n// at the bit level.\nBitView._scratch = new DataView(new ArrayBuffer(8));\n\nObject.defineProperty(BitView.prototype, 'buffer', {\n\tget: function () { return typeof Buffer !== 'undefined' ?  Buffer.from(this._view.buffer) : this._view.buffer; },\n\tenumerable: true,\n\tconfigurable: false\n});\n\nObject.defineProperty(BitView.prototype, 'byteLength', {\n\tget: function () { return this._view.length; },\n\tenumerable: true,\n\tconfigurable: false\n});\n\nBitView.prototype._setBit = function (offset, on) {\n\tif (on) {\n\t\tthis._view[offset >> 3] |= 1 << (offset & 7);\n\t} else {\n\t\tthis._view[offset >> 3] &= ~(1 << (offset & 7));\n\t}\n};\n\nBitView.prototype.getBits = function (offset, bits, signed) {\n\tvar available = (this._view.length * 8 - offset);\n\n\tif (bits > available) {\n\t\tthrow new Error('Cannot get ' + bits + ' bit(s) from offset ' + offset + ', ' + available + ' available');\n\t}\n\n\tvar value = 0;\n\tfor (var i = 0; i < bits;) {\n\t\tvar remaining = bits - i;\n\t\tvar bitOffset = offset & 7;\n\t\tvar currentByte = this._view[offset >> 3];\n\n\t\t// the max number of bits we can read from the current byte\n\t\tvar read = Math.min(remaining, 8 - bitOffset);\n\n\t\tvar mask, readBits;\n\t\tif (this.bigEndian) {\n\t\t\t// create a mask with the correct bit width\n\t\t\tmask = ~(0xFF << read);\n\t\t\t// shift the bits we want to the start of the byte and mask of the rest\n\t\t\treadBits = (currentByte >> (8 - read - bitOffset)) & mask;\n\n\t\t\tvalue <<= read;\n\t\t\tvalue |= readBits;\n\t\t} else {\n\t\t\t// create a mask with the correct bit width\n\t\t\tmask = ~(0xFF << read);\n\t\t\t// shift the bits we want to the start of the byte and mask off the rest\n\t\t\treadBits = (currentByte >> bitOffset) & mask;\n\n\t\t\tvalue |= readBits << i;\n\t\t}\n\n\t\toffset += read;\n\t\ti += read;\n\t}\n\n\tif (signed) {\n\t\t// If we're not working with a full 32 bits, check the\n\t\t// imaginary MSB for this bit count and convert to a\n\t\t// valid 32-bit signed value if set.\n\t\tif (bits !== 32 && value & (1 << (bits - 1))) {\n\t\t\tvalue |= -1 ^ ((1 << bits) - 1);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\treturn value >>> 0;\n};\n\nBitView.prototype.setBits = function (offset, value, bits) {\n\tvar available = (this._view.length * 8 - offset);\n\n\tif (bits > available) {\n\t\tthrow new Error('Cannot set ' + bits + ' bit(s) from offset ' + offset + ', ' + available + ' available');\n\t}\n\n\tfor (var i = 0; i < bits;) {\n\t\tvar remaining = bits - i;\n\t\tvar bitOffset = offset & 7;\n\t\tvar byteOffset = offset >> 3;\n\t\tvar wrote = Math.min(remaining, 8 - bitOffset);\n\n\t\tvar mask, writeBits, destMask;\n\t\tif (this.bigEndian) {\n\t\t\t// create a mask with the correct bit width\n\t\t\tmask = ~(~0 << wrote);\n\t\t\t// shift the bits we want to the start of the byte and mask of the rest\n\t\t\twriteBits = (value >> (bits - i - wrote)) & mask;\n\n\t\t\tvar destShift = 8 - bitOffset - wrote;\n\t\t\t// destination mask to zero all the bits we're changing first\n\t\t\tdestMask = ~(mask << destShift);\n\n\t\t\tthis._view[byteOffset] =\n\t\t\t\t(this._view[byteOffset] & destMask)\n\t\t\t\t| (writeBits << destShift);\n\n\t\t} else {\n\t\t\t// create a mask with the correct bit width\n\t\t\tmask = ~(0xFF << wrote);\n\t\t\t// shift the bits we want to the start of the byte and mask of the rest\n\t\t\twriteBits = value & mask;\n\t\t\tvalue >>= wrote;\n\n\t\t\t// destination mask to zero all the bits we're changing first\n\t\t\tdestMask = ~(mask << bitOffset);\n\n\t\t\tthis._view[byteOffset] =\n\t\t\t\t(this._view[byteOffset] & destMask)\n\t\t\t\t| (writeBits << bitOffset);\n\t\t}\n\n\t\toffset += wrote;\n\t\ti += wrote;\n\t}\n};\n\nBitView.prototype.getBoolean = function (offset) {\n\treturn this.getBits(offset, 1, false) !== 0;\n};\nBitView.prototype.getInt8 = function (offset) {\n\treturn this.getBits(offset, 8, true);\n};\nBitView.prototype.getUint8 = function (offset) {\n\treturn this.getBits(offset, 8, false);\n};\nBitView.prototype.getInt16 = function (offset) {\n\treturn this.getBits(offset, 16, true);\n};\nBitView.prototype.getUint16 = function (offset) {\n\treturn this.getBits(offset, 16, false);\n};\nBitView.prototype.getInt32 = function (offset) {\n\treturn this.getBits(offset, 32, true);\n};\nBitView.prototype.getUint32 = function (offset) {\n\treturn this.getBits(offset, 32, false);\n};\nBitView.prototype.getFloat32 = function (offset) {\n\tBitView._scratch.setUint32(0, this.getUint32(offset));\n\treturn BitView._scratch.getFloat32(0);\n};\nBitView.prototype.getFloat64 = function (offset) {\n\tBitView._scratch.setUint32(0, this.getUint32(offset));\n\t// DataView offset is in bytes.\n\tBitView._scratch.setUint32(4, this.getUint32(offset+32));\n\treturn BitView._scratch.getFloat64(0);\n};\n\nBitView.prototype.setBoolean = function (offset, value) {\n\tthis.setBits(offset, value ? 1 : 0, 1);\n};\nBitView.prototype.setInt8  =\nBitView.prototype.setUint8 = function (offset, value) {\n\tthis.setBits(offset, value, 8);\n};\nBitView.prototype.setInt16  =\nBitView.prototype.setUint16 = function (offset, value) {\n\tthis.setBits(offset, value, 16);\n};\nBitView.prototype.setInt32  =\nBitView.prototype.setUint32 = function (offset, value) {\n\tthis.setBits(offset, value, 32);\n};\nBitView.prototype.setFloat32 = function (offset, value) {\n\tBitView._scratch.setFloat32(0, value);\n\tthis.setBits(offset, BitView._scratch.getUint32(0), 32);\n};\nBitView.prototype.setFloat64 = function (offset, value) {\n\tBitView._scratch.setFloat64(0, value);\n\tthis.setBits(offset, BitView._scratch.getUint32(0), 32);\n\tthis.setBits(offset+32, BitView._scratch.getUint32(4), 32);\n};\nBitView.prototype.getArrayBuffer = function (offset, byteLength) {\n\tvar buffer = new Uint8Array(byteLength);\n\tfor (var i = 0; i < byteLength; i++) {\n\t\tbuffer[i] = this.getUint8(offset + (i * 8));\n\t}\n\treturn buffer;\n};\n\n/**********************************************************\n *\n * BitStream\n *\n * Small wrapper for a BitView to maintain your position,\n * as well as to handle reading / writing of string data\n * to the underlying buffer.\n *\n **********************************************************/\nvar reader = function (name, size) {\n\treturn function () {\n\t\tif (this._index + size > this._length) {\n\t\t\tthrow new Error('Trying to read past the end of the stream');\n\t\t}\n\t\tvar val = this._view[name](this._index);\n\t\tthis._index += size;\n\t\treturn val;\n\t};\n};\n\nvar writer = function (name, size) {\n\treturn function (value) {\n\t\tthis._view[name](this._index, value);\n\t\tthis._index += size;\n\t};\n};\n\nfunction readASCIIString(stream, bytes) {\n\treturn readString(stream, bytes, false);\n}\n\nfunction readUTF8String(stream, bytes) {\n\treturn readString(stream, bytes, true);\n}\n\nfunction readString(stream, bytes, utf8) {\n\tif (bytes === 0) {\n\t\treturn '';\n\t}\n\tvar i = 0;\n\tvar chars = [];\n\tvar append = true;\n\tvar fixedLength = !!bytes;\n\tif (!bytes) {\n\t\tbytes = Math.floor((stream._length - stream._index) / 8);\n\t}\n\n\t// Read while we still have space available, or until we've\n\t// hit the fixed byte length passed in.\n\twhile (i < bytes) {\n\t\tvar c = stream.readUint8();\n\n\t\t// Stop appending chars once we hit 0x00\n\t\tif (c === 0x00) {\n\t\t\tappend = false;\n\n\t\t\t// If we don't have a fixed length to read, break out now.\n\t\t\tif (!fixedLength) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (append) {\n\t\t\tchars.push(c);\n\t\t}\n\n\t\ti++;\n\t}\n\n\tvar string = String.fromCharCode.apply(null, chars);\n\tif (utf8) {\n\t\ttry {\n\t\t\treturn decodeURIComponent(escape(string)); // https://stackoverflow.com/a/17192845\n\t\t} catch (e) {\n\t\t\treturn string;\n\t\t}\n\t} else {\n\t\treturn string;\n\t}\n}\n\nfunction writeASCIIString(stream, string, bytes) {\n\tvar length = bytes || string.length + 1;  // + 1 for NULL\n\n\tfor (var i = 0; i < length; i++) {\n\t\tstream.writeUint8(i < string.length ? string.charCodeAt(i) : 0x00);\n\t}\n}\n\nfunction writeUTF8String(stream, string, bytes) {\n\tvar byteArray = stringToByteArray(string);\n\n\tvar length = bytes || byteArray.length + 1;  // + 1 for NULL\n\tfor (var i = 0; i < length; i++) {\n\t\tstream.writeUint8(i < byteArray.length ? byteArray[i] : 0x00);\n\t}\n}\n\nfunction stringToByteArray(str) { // https://gist.github.com/volodymyr-mykhailyk/2923227\n\tvar b = [], i, unicode;\n\tfor (i = 0; i < str.length; i++) {\n\t\tunicode = str.charCodeAt(i);\n\t\t// 0x00000000 - 0x0000007f -> 0xxxxxxx\n\t\tif (unicode <= 0x7f) {\n\t\t\tb.push(unicode);\n\t\t\t// 0x00000080 - 0x000007ff -> 110xxxxx 10xxxxxx\n\t\t} else if (unicode <= 0x7ff) {\n\t\t\tb.push((unicode >> 6) | 0xc0);\n\t\t\tb.push((unicode & 0x3F) | 0x80);\n\t\t\t// 0x00000800 - 0x0000ffff -> 1110xxxx 10xxxxxx 10xxxxxx\n\t\t} else if (unicode <= 0xffff) {\n\t\t\tb.push((unicode >> 12) | 0xe0);\n\t\t\tb.push(((unicode >> 6) & 0x3f) | 0x80);\n\t\t\tb.push((unicode & 0x3f) | 0x80);\n\t\t\t// 0x00010000 - 0x001fffff -> 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t} else {\n\t\t\tb.push((unicode >> 18) | 0xf0);\n\t\t\tb.push(((unicode >> 12) & 0x3f) | 0x80);\n\t\t\tb.push(((unicode >> 6) & 0x3f) | 0x80);\n\t\t\tb.push((unicode & 0x3f) | 0x80);\n\t\t}\n\t}\n\n\treturn b;\n}\n\nvar BitStream = function (source, byteOffset, byteLength) {\n\tvar isBuffer = source instanceof ArrayBuffer ||\n\t\t(typeof Buffer !== 'undefined' && source instanceof Buffer);\n\n\tif (!(source instanceof BitView) && !isBuffer) {\n\t\tthrow new Error('Must specify a valid BitView, ArrayBuffer or Buffer');\n\t}\n\n\tif (isBuffer) {\n\t\tthis._view = new BitView(source, byteOffset, byteLength);\n\t} else {\n\t\tthis._view = source;\n\t}\n\n\tthis._index = 0;\n\tthis._startIndex = 0;\n\tthis._length = this._view.byteLength * 8;\n};\n\nObject.defineProperty(BitStream.prototype, 'index', {\n\tget: function () { return this._index - this._startIndex; },\n\tset: function (val) { this._index = val + this._startIndex; },\n\tenumerable: true,\n\tconfigurable: true\n});\n\nObject.defineProperty(BitStream.prototype, 'length', {\n\tget: function () { return this._length - this._startIndex; },\n\tset: function (val) { this._length = val + this._startIndex; },\n\tenumerable  : true,\n\tconfigurable: true\n});\n\nObject.defineProperty(BitStream.prototype, 'bitsLeft', {\n\tget: function () { return this._length - this._index; },\n\tenumerable  : true,\n\tconfigurable: true\n});\n\nObject.defineProperty(BitStream.prototype, 'byteIndex', {\n\t// Ceil the returned value, over compensating for the amount of\n\t// bits written to the stream.\n\tget: function () { return Math.ceil(this._index / 8); },\n\tset: function (val) { this._index = val * 8; },\n\tenumerable: true,\n\tconfigurable: true\n});\n\nObject.defineProperty(BitStream.prototype, 'buffer', {\n\tget: function () { return this._view.buffer; },\n\tenumerable: true,\n\tconfigurable: false\n});\n\nObject.defineProperty(BitStream.prototype, 'view', {\n\tget: function () { return this._view; },\n\tenumerable: true,\n\tconfigurable: false\n});\n\nObject.defineProperty(BitStream.prototype, 'bigEndian', {\n\tget: function () { return this._view.bigEndian; },\n\tset: function (val) { this._view.bigEndian = val; },\n\tenumerable: true,\n\tconfigurable: false\n});\n\nBitStream.prototype.readBits = function (bits, signed) {\n\tvar val = this._view.getBits(this._index, bits, signed);\n\tthis._index += bits;\n\treturn val;\n};\n\nBitStream.prototype.writeBits = function (value, bits) {\n\tthis._view.setBits(this._index, value, bits);\n\tthis._index += bits;\n};\n\nBitStream.prototype.readBoolean = reader('getBoolean', 1);\nBitStream.prototype.readInt8 = reader('getInt8', 8);\nBitStream.prototype.readUint8 = reader('getUint8', 8);\nBitStream.prototype.readInt16 = reader('getInt16', 16);\nBitStream.prototype.readUint16 = reader('getUint16', 16);\nBitStream.prototype.readInt32 = reader('getInt32', 32);\nBitStream.prototype.readUint32 = reader('getUint32', 32);\nBitStream.prototype.readFloat32 = reader('getFloat32', 32);\nBitStream.prototype.readFloat64 = reader('getFloat64', 64);\n\nBitStream.prototype.writeBoolean = writer('setBoolean', 1);\nBitStream.prototype.writeInt8 = writer('setInt8', 8);\nBitStream.prototype.writeUint8 = writer('setUint8', 8);\nBitStream.prototype.writeInt16 = writer('setInt16', 16);\nBitStream.prototype.writeUint16 = writer('setUint16', 16);\nBitStream.prototype.writeInt32 = writer('setInt32', 32);\nBitStream.prototype.writeUint32 = writer('setUint32', 32);\nBitStream.prototype.writeFloat32 = writer('setFloat32', 32);\nBitStream.prototype.writeFloat64 = writer('setFloat64', 64);\n\nBitStream.prototype.readASCIIString = function (bytes) {\n\treturn readASCIIString(this, bytes);\n};\n\nBitStream.prototype.readUTF8String = function (bytes) {\n\treturn readUTF8String(this, bytes);\n};\n\nBitStream.prototype.writeASCIIString = function (string, bytes) {\n\twriteASCIIString(this, string, bytes);\n};\n\nBitStream.prototype.writeUTF8String = function (string, bytes) {\n\twriteUTF8String(this, string, bytes);\n};\nBitStream.prototype.readBitStream = function(bitLength) {\n\tvar slice = new BitStream(this._view);\n\tslice._startIndex = this._index;\n\tslice._index = this._index;\n\tslice.length = bitLength;\n\tthis._index += bitLength;\n\treturn slice;\n};\n\nBitStream.prototype.writeBitStream = function(stream, length) {\n\tif (!length) {\n\t\tlength = stream.bitsLeft;\n\t}\n\n\tvar bitsToWrite;\n\twhile (length > 0) {\n\t\tbitsToWrite = Math.min(length, 32);\n\t\tthis.writeBits(stream.readBits(bitsToWrite), bitsToWrite);\n\t\tlength -= bitsToWrite;\n\t}\n};\n\nBitStream.prototype.readArrayBuffer = function(byteLength) {\n\tvar buffer = this._view.getArrayBuffer(this._index, byteLength);\n\tthis._index += (byteLength * 8);\n\treturn buffer;\n};\n\nBitStream.prototype.writeArrayBuffer = function(buffer, byteLength) {\n\tthis.writeBitStream(new BitStream(buffer), byteLength * 8);\n};\n\n// AMD / RequireJS\nif (typeof define !== 'undefined' && define.amd) {\n\tdefine(function () {\n\t\treturn {\n\t\t\tBitView: BitView,\n\t\t\tBitStream: BitStream\n\t\t};\n\t});\n}\n// Node.js\nelse if (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = {\n\t\tBitView: BitView,\n\t\tBitStream: BitStream\n\t};\n}\n\n}(this));\n","import { BitView } from 'bit-buffer';\nlet utilService = {};\nutilService.intersection = function (arrayOfArrays) {\n    return arrayOfArrays\n        .reduce((acc, array, index) => {\n            if (index === 0) return array;\n            return array.filter((value) => acc.includes(value));\n        }, [])\n        .filter((value, index, self) => self.indexOf(value) === index); // Make values unique\n};\nutilService.dec2bin = function (dec, len) {\n    const bin = (dec >>> 0).toString(2);\n    if (len) return bin.padStart(len, '0');\n    return bin;\n};\nutilService.bin2dec = function (binary) {\n    if (!utilService.isString(binary)) {\n        throw new Error(\n            `Argument invalid - must be of type string. You passed in a ${typeof binary}.`\n        );\n    } else if (!utilService.stringOnlyContainsBinaryDigits(binary)) {\n        throw new Error(\n            `Argument invalid - string must only contain binary digits.`\n        );\n    }\n    return parseInt(binary, 2);\n};\nutilService.bin2Float = function (binary) {\n    if (!utilService.isString(binary)) {\n        throw new Error(\n            `Argument invalid - must be of type string. You passed in a ${typeof binary}.`\n        );\n    } else if (!utilService.stringOnlyContainsBinaryDigits(binary)) {\n        throw new Error(\n            `Argument invalid - string must only contain binary digits.`\n        );\n    }\n    const buffer = Buffer.from(utilService.bin2hex(binary), 'hex');\n    if (buffer.length >= 4) {\n        return buffer.readFloatBE(0);\n    } else {\n        return 0;\n    }\n};\nutilService.float2Bin = function (float) {\n    const getHex = (i) => ('00' + i.toString(16)).slice(-2);\n    var view = new DataView(new ArrayBuffer(4)),\n        result;\n    view.setFloat32(0, float);\n    result = Array.apply(null, { length: 4 })\n        .map((_, i) => getHex(view.getUint8(i)))\n        .join('');\n    return utilService.hex2bin(result).padStart(32, '0');\n};\nutilService.uintToInt = function (uint, nbit) {\n    nbit = +nbit || 32;\n    if (nbit > 32)\n        throw new RangeError('uintToInt only supports ints up to 32 bits');\n    uint <<= 32 - nbit;\n    uint >>= 32 - nbit;\n    return uint;\n};\nutilService.hex2bin = function (hex) {\n    return parseInt(hex, 16).toString(2).padStart(8, '0');\n};\nutilService.bin2hex = function (bin) {\n    return parseInt(bin, 2).toString(16).padStart(2, '0').toUpperCase();\n};\nutilService.chunk = function (str, n) {\n    var ret = [];\n    var i;\n    var len;\n    for (i = 0, len = str.length; i < len; i += n) {\n        ret.push(str.substr(i, n));\n    }\n    return ret;\n};\nutilService.binaryBlockToHexBlock = function (binary) {\n    const byteArray = utilService.chunk(binary, 8);\n    let bytes = [];\n    byteArray.forEach((byte) => {\n        const hex = utilService.bin2hex(byte);\n        if (hex) {\n            bytes.push(hex);\n        }\n    });\n    return bytes;\n};\nutilService.binaryBlockToDecimalBlock = function (binary) {\n    const byteArray = utilService.chunk(binary, 8);\n    let bytes = [];\n    byteArray.forEach((byte) => {\n        const dec = utilService.bin2dec(byte);\n        if (dec !== null && dec !== undefined) {\n            bytes.push(dec);\n        }\n    });\n    return bytes;\n};\nutilService.getBitArray = function (data) {\n    let arr = [...data];\n    try {\n        const bits = arr\n            .map((decimal) => {\n                return decimal.toString(2).padStart(8, '0');\n            })\n            .reduce((prev, curr) => {\n                return prev + curr;\n            });\n        return bits;\n    } catch {\n        return null;\n    }\n};\nutilService.replaceAt = function (oldValue, index, value) {\n    if (index < 0) {\n        throw new Error('Index must be a positive number.');\n    }\n    return (\n        oldValue.substr(0, index) +\n        value +\n        oldValue.substr(index + value.length)\n    );\n};\nutilService.byteArrayToLong = function (byteArray, reverse) {\n    let newByteArray;\n    if (Buffer.isBuffer(byteArray)) {\n        newByteArray = Buffer.from(byteArray);\n    } else {\n        newByteArray = byteArray.slice();\n    }\n    if (reverse) {\n        newByteArray = newByteArray.reverse();\n    }\n    var value = 0;\n    for (var i = newByteArray.length - 1; i >= 0; i--) {\n        value = value * 256 + newByteArray[i];\n    }\n    return value;\n};\nutilService.show = function (element) {\n    element.classList.remove('hidden');\n};\nutilService.hide = function (element) {\n    element.classList.add('hidden');\n};\nutilService.arrayMove = function (arr, old_index, new_index) {\n    if (new_index >= arr.length) {\n        var k = new_index - arr.length + 1;\n        while (k--) {\n            arr.push(undefined);\n        }\n    }\n    arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);\n    return arr;\n};\nutilService.removeChildNodes = function (node) {\n    while (node.firstChild) {\n        node.removeChild(node.firstChild);\n    }\n};\nutilService.isString = function (str) {\n    return typeof str === 'string' || str instanceof String;\n};\nutilService.stringOnlyContainsBinaryDigits = function (str) {\n    return /[a-zA-Z2-9]/.test(str) === false;\n};\nutilService.readDWordAt = function (index, data, le) {\n    if (index < 3) {\n        throw new Error('Error: index must be equal to or greater than 3.');\n    } else if (index >= data.length) {\n        throw new Error(\n            'Error: index must not be greater than the passed in data array length.'\n        );\n    }\n    if (le) {\n        return utilService.toUint32(\n            data[index - 3] |\n                (data[index - 2] << 8) |\n                (data[index - 1] << 16) |\n                (data[index] << 24)\n        );\n    }\n    return utilService.toUint32(\n        data[index] |\n            (data[index - 1] << 8) |\n            (data[index - 2] << 16) |\n            (data[index - 3] << 24)\n    );\n};\nutilService.toUint32 = function (x) {\n    return utilService.modulo(utilService.toInteger(x), Math.pow(2, 32));\n};\nutilService.modulo = function (a, b) {\n    return a - Math.floor(a / b) * b;\n};\nutilService.toInteger = function (x) {\n    x = Number(x);\n    return x < 0 ? Math.ceil(x) : Math.floor(x);\n};\nutilService.getReferenceData = function (value) {\n    return {\n        tableId: utilService.bin2dec(value.substring(0, 15)),\n        rowNumber: utilService.bin2dec(value.substring(15))\n    };\n};\nutilService.getReferenceDataFromBuffer = (buf) => {\n    let bv = new BitView(buf, buf.byteOffset);\n    bv.bigEndian = true;\n    return utilService.getReferenceDataFromBitview(bv);\n};\nutilService.getReferenceDataFromBitview = (bv, start = 0) => {\n    return {\n        tableId: bv.getBits(start, 15),\n        rowNumber: bv.getBits(start + 15, 17)\n    };\n};\nutilService.getBinaryReferenceData = function (tableId, rowNumber) {\n    const referenceBinary = utilService.dec2bin(tableId, 15);\n    const recordIndexBinary = utilService.dec2bin(rowNumber, 17);\n    return referenceBinary + recordIndexBinary;\n};\n\nutilService.getTable3OverflowRecord = function (record) {\n    const overflowRef = record.getFieldByKey('Overflow');\n\n    if (overflowRef) {\n        //console.log(overflowRef);\n        const value = overflowRef.value;\n        const { tableId: overflowTableId, rowNumber: overflowTableRow } =\n            utilService.getReferenceData(value);\n        // If the overflow reference exists and is in this table, use it when reading the unformatted value\n        if (\n            overflowTableId !== 0 &&\n            overflowTableId === record.parent.header.tableId\n        ) {\n            return record.parent.records[overflowTableRow];\n        }\n    }\n\n    return null;\n};\nexport default utilService;\n","import utilService from './services/utilService.js';\nclass FranchiseEnumValue {\n    /** @param {string} name @param {number} index @param {string} value @param {string?} [unformattedValue] */\n    constructor(name, index, value, unformattedValue) {\n        /** @private */\n        this._name = name;\n        /** @private */\n        this._index = typeof index === 'number' ? index : parseInt(index);\n        /** @private */\n        this._value = typeof value === 'number' ? value : parseInt(value);\n        /** @private */\n        this._unformattedValue = unformattedValue\n            ? unformattedValue\n            : parseFormattedValue(parseInt(value));\n    }\n    get name() {\n        return this._name;\n    }\n    get index() {\n        return this._index;\n    }\n    get value() {\n        return this._value;\n    }\n    /** @returns {string?} */\n    get unformattedValue() {\n        return this._unformattedValue;\n    }\n    /** @param {number} length */\n    setMemberLength(length) {\n        if (this.value < 0) {\n            this._unformattedValue =\n                '1' + this._unformattedValue.padStart(length - 1, '0');\n        } else {\n            this._unformattedValue = this._unformattedValue.padStart(\n                length,\n                '0'\n            );\n        }\n    }\n}\nfunction parseFormattedValue(value) {\n    if (value < 0) {\n        return utilService.dec2bin(value * -1 - 1);\n    }\n    return utilService.dec2bin(value);\n}\nexport default FranchiseEnumValue;\n","import FranchiseEnumValue from './FranchiseEnumValue.js';\nclass FranchiseEnum {\n    /** @param {string | FranchiseEnum} name @param {number} assetId @param {boolean} isRecordPersistent */\n    constructor(name, assetId, isRecordPersistent) {\n        if (typeof name === 'object') {\n            const theEnum = name;\n            /** @private */\n            this._name = theEnum._name;\n            /** @private */\n            this._assetId = theEnum._assetId;\n            /** @private */\n            this._isRecordPersistent = theEnum._isRecordPersistent;\n            /** @private */\n            this._members = [];\n            for (let i = 0; i < theEnum._members.length; i++) {\n                const member = theEnum._members[i];\n                this.addMember(\n                    member._name,\n                    member._index,\n                    member._value,\n                    member._unformattedValue\n                );\n            }\n            this._maxLength = this._members[0].unformattedValue.length;\n        } else {\n            this._name = name;\n            this._assetId = assetId;\n            this._isRecordPersistent = isRecordPersistent;\n            this._members = [];\n            this._maxLength = -1;\n        }\n    }\n    /** @returns {string} */\n    get name() {\n        return this._name;\n    }\n    /** @returns {number} */\n    get assetId() {\n        return this._assetId;\n    }\n    /** @returns {boolean} */\n    get isRecordPersistent() {\n        return this._isRecordPersistent;\n    }\n    /** @returns {Array<FranchiseEnumValue>} */\n    get members() {\n        return this._members;\n    }\n    /** @param {string} name @param {number} index @param {string} value @param {string?} [unformattedValue] */\n    addMember(name, index, value, unformattedValue) {\n        this._members.push(\n            new FranchiseEnumValue(name, index, value, unformattedValue)\n        );\n    }\n    /** @param {string} value @returns {FranchiseEnumValue?} */\n    getMemberByValue(value) {\n        const matches = this._members.filter((member) => {\n            return (\n                member.name !== 'First_' &&\n                member.name !== 'Last_' &&\n                member.value === value\n            );\n        });\n        if (matches.length === 0) {\n            throw new Error(\n                `Argument is not a valid enum value for this field. You passed in ${value}. Field name: ${this.name}`\n            );\n        }\n        const matchesNoUnderscore = matches.find((member) => {\n            return member.name[member.name.length - 1] !== '_';\n        });\n        return matchesNoUnderscore ? matchesNoUnderscore : matches[0];\n    }\n    /** @param {string} value @returns {FranchiseEnumValue?} */\n    getMemberByUnformattedValue(value) {\n        if (value.length > this._maxLength) {\n            const valueToCutOff = value.substring(\n                0,\n                value.length - this._maxLength\n            );\n            // if the user passes in 100000, but the enum's max value is only 5 digits...we need to throw an error.\n            const cutOffContainsData = /[a-zA-Z1-9]/.test(valueToCutOff);\n            if (cutOffContainsData) {\n                throw new Error(\n                    `Argument is not a valid enum value for this field. You passed in ${value}. Field name: ${this.name}`\n                );\n            }\n            value = value.substring(value.length - this._maxLength);\n        }\n        const matches = this._members.filter((member) => {\n            return (\n                member.name !== 'First_' &&\n                member.name !== 'Last_' &&\n                member.unformattedValue === value\n            );\n        });\n        if (matches.length === 0) {\n            throw new Error(\n                `Argument is not a valid enum value for this field. You passed in ${value}. Field name: ${this.name}`\n            );\n        }\n        const matchesNoUnderscore = matches.find((member) => {\n            return member.name[member.name.length - 1] !== '_';\n        });\n        return matchesNoUnderscore ? matchesNoUnderscore : matches[0];\n    }\n    /** @param {string} name @returns {FranchiseEnumValue?} */\n    getMemberByName(name) {\n        return this._members.find((member) => {\n            return member.name.toLowerCase() === name.toLowerCase();\n        });\n    }\n    setMemberLength() {\n        if (this._members.length === 0) {\n            return;\n        }\n        const maxValue = this._members.reduce((accum, currentVal) => {\n            return accum.value > currentVal.value ? accum : currentVal;\n        });\n        const hasNegativeNumbers = this._members.find((member) => {\n            return member.value < 0;\n        });\n        this._maxLength = hasNegativeNumbers\n            ? maxValue.unformattedValue.length + 1\n            : maxValue.unformattedValue.length;\n        this._members.forEach((member) => {\n            member.setMemberLength(this._maxLength);\n        });\n    }\n}\nexport default FranchiseEnum;\n","\"use strict\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.EVENTS = undefined;\n\nvar _createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar _stream = require(\"stream\");\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return call && ((typeof call === \"undefined\" ? \"undefined\" : _typeof(call)) === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : _typeof(superClass)));\n  }\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\n/**\n * A fast XML parser for NodeJS using Writable streams.\n *\n * What this is:\n * Simple and fast XML parser purley written for NodeJS. No extra production dependencies.\n * A handy way parse ATOM/RSS/RDF feeds and such. No validation is made on the document that is parsed.\n *\n * Motivation\n * There is already quite a few parsers out there. I just wanted a parser that was as tiny and fast as possible to handle easy parsing of\n * RSS/ATOM/RDF feeds using streams, no fancy stuff needed. If you want more functionality you should check out other recommended parsers (see below)\n *\n * Usage\n * Just #pipe() a <stream.Readable> and you are ready to listen for events.\n * You can also use the #write() method to write directly to the parser.\n *\n * The source is written using ES2015, babel is used to translate to the dist.\n *\n * Other recommended parsers for node that are great:\n * https://github.com/isaacs/sax-js\n * https://github.com/xmppjs/ltx\n *\n * Events:\n * - text\n * - instruction\n * - opentag\n * - closetag\n * - cdata\n *\n * Comments are ignored, so there is no events for them.\n *\n */\nvar Parser = function (_Writable) {\n  _inherits(Parser, _Writable);\n\n  function Parser() {\n    _classCallCheck(this, Parser);\n\n    var _this = _possibleConstructorReturn(this, (Parser.__proto__ || Object.getPrototypeOf(Parser)).call(this));\n\n    _this.state = STATE.TEXT;\n    _this.buffer = \"\";\n    _this.pos = 0;\n    _this.tagType = TAG_TYPE.NONE;\n    return _this;\n  }\n\n  _createClass(Parser, [{\n    key: \"_write\",\n    value: function _write(chunk, encoding, done) {\n      chunk = typeof chunk !== \"string\" ? chunk.toString() : chunk;\n      for (var i = 0; i < chunk.length; i++) {\n        var c = chunk[i];\n        var prev = this.buffer[this.pos - 1];\n        this.buffer += c;\n        this.pos++;\n\n        switch (this.state) {\n          case STATE.TEXT:\n            if (c === \"<\") this._onStartNewTag();\n            break;\n\n          case STATE.TAG_NAME:\n            if (prev === \"<\" && c === \"?\") {\n              this._onStartInstruction();\n            }\n            if (prev === \"<\" && c === \"/\") {\n              this._onCloseTagStart();\n            }\n            if (this.buffer[this.pos - 3] === \"<\" && prev === \"!\" && c === \"[\") {\n              this._onCDATAStart();\n            }\n            if (this.buffer[this.pos - 3] === \"<\" && prev === \"!\" && c === \"-\") {\n              this._onCommentStart();\n            }\n            if (c === \">\") {\n              if (prev === \"/\") {\n                this.tagType = TAG_TYPE.SELF_CLOSING;\n              }\n              this._onTagCompleted();\n            }\n            break;\n\n          case STATE.INSTRUCTION:\n            if (prev === \"?\" && c === \">\") this._onEndInstruction();\n            break;\n\n          case STATE.CDATA:\n            if (this.buffer[this.pos - 3] === \"]\" && prev === \"]\" && c === \">\") this._onCDATAEnd();\n            break;\n\n          case STATE.IGNORE_COMMENT:\n            if (this.buffer[this.pos - 3] === \"-\" && prev === \"-\" && c === \">\") this._onCommentEnd();\n            break;\n        }\n      }\n      done();\n    }\n  }, {\n    key: \"_endRecording\",\n    value: function _endRecording() {\n      var rec = this.buffer.slice(1, this.pos - 1);\n      this.buffer = this.buffer.slice(-1); // Keep last item in buffer for prev comparison in main loop.\n      this.pos = 1; // Reset the position (since the buffer was reset)\n      return rec;\n    }\n  }, {\n    key: \"_onStartNewTag\",\n    value: function _onStartNewTag() {\n      var text = this._endRecording().trim();\n      if (text) {\n        this.emit(EVENTS.TEXT, text);\n      }\n      this.state = STATE.TAG_NAME;\n      this.tagType = TAG_TYPE.OPENING;\n    }\n  }, {\n    key: \"_onTagCompleted\",\n    value: function _onTagCompleted() {\n      var tag = this._endRecording();\n\n      var _parseTagString2 = this._parseTagString(tag),\n          name = _parseTagString2.name,\n          attributes = _parseTagString2.attributes;\n\n      if (name === null) {\n        this.emit(EVENTS.ERROR, new Error(\"Failed to parse name for tag\" + tag));\n      }\n\n      if (this.tagType && this.tagType == TAG_TYPE.OPENING) {\n        this.emit(EVENTS.OPEN_TAG, name, attributes);\n      }\n\n      if (this.tagType && this.tagType === TAG_TYPE.CLOSING) {\n        this.emit(EVENTS.CLOSE_TAG, name, attributes);\n      }\n      if (this.tagType && this.tagType === TAG_TYPE.SELF_CLOSING) {\n        if (Object.keys(attributes).length === 0 && attributes.constructor === Object) {\n          attributes = { ___selfClosing___: true };\n        }\n        this.emit(EVENTS.OPEN_TAG, name, attributes);\n        this.emit(EVENTS.CLOSE_TAG, name, attributes);\n      }\n\n      this.state = STATE.TEXT;\n      this.tagType = TAG_TYPE.NONE;\n    }\n  }, {\n    key: \"_onCloseTagStart\",\n    value: function _onCloseTagStart() {\n      this._endRecording();\n      this.tagType = TAG_TYPE.CLOSING;\n    }\n  }, {\n    key: \"_onStartInstruction\",\n    value: function _onStartInstruction() {\n      this._endRecording();\n      this.state = STATE.INSTRUCTION;\n    }\n  }, {\n    key: \"_onEndInstruction\",\n    value: function _onEndInstruction() {\n      this.pos -= 1; // Move position back 1 step since instruction ends with '?>'\n      var inst = this._endRecording();\n\n      var _parseTagString3 = this._parseTagString(inst),\n          name = _parseTagString3.name,\n          attributes = _parseTagString3.attributes;\n\n      if (name === null) {\n        this.emit(EVENTS.ERROR, new Error(\"Failed to parse name for inst\" + inst));\n      }\n      this.emit(EVENTS.INSTRUCTION, name, attributes);\n      this.state = STATE.TEXT;\n    }\n  }, {\n    key: \"_onCDATAStart\",\n    value: function _onCDATAStart() {\n      this._endRecording();\n      this.state = STATE.CDATA;\n    }\n  }, {\n    key: \"_onCDATAEnd\",\n    value: function _onCDATAEnd() {\n      var text = this._endRecording(); // Will return CDATA[XXX] we regexp out the actual text in the CDATA.\n      text = text.slice(text.indexOf(\"[\") + 1, text.lastIndexOf(\"]>\") - 1);\n      this.state = STATE.TEXT;\n\n      this.emit(EVENTS.CDATA, text);\n    }\n  }, {\n    key: \"_onCommentStart\",\n    value: function _onCommentStart() {\n      this.state = STATE.IGNORE_COMMENT;\n    }\n  }, {\n    key: \"_onCommentEnd\",\n    value: function _onCommentEnd() {\n      this._endRecording();\n      this.state = STATE.TEXT;\n    }\n\n    /**\n     * Helper to parse a tag string 'xml version=\"2.0\" encoding=\"utf-8\"' with regexp.\n     * @param  {string} str the tag string.\n     * @return {object}     {name, attributes}\n     */\n  }, {\n    key: \"_parseTagString\",\n    value: function _parseTagString(str) {\n      // parse name\n\n      var name = void 0;\n      var parsedString = /^([a-zäöüßÄÖÜA-Z0-9:_\\-.\\/]+?)(\\s|$)/.exec(str);\n      if (parsedString && parsedString.length > 0) {\n        name = parsedString[1];\n        var attributesString = str.substr(name.length);\n        var attributeRegexp = /([a-zäöüßÄÖÜA-Z0-9:_\\-.]+?)=\"([^\"]+?)\"/g;\n        var match = attributeRegexp.exec(attributesString);\n        var attributes = {};\n        while (match != null) {\n          attributes[match[1]] = match[2];\n          match = attributeRegexp.exec(attributesString);\n        }\n        if (name[name.length - 1] === \"/\") {\n          name = name.substr(0, name.length - 1);\n        }\n        return { name: name, attributes: attributes };\n      }\n      return { name: null, attributes: {} };\n    }\n  }]);\n\n  return Parser;\n}(_stream.Writable);\n\nexports.default = Parser;\n\nvar STATE = {\n  TEXT: 0,\n  TAG_NAME: 1,\n  INSTRUCTION: 2,\n  IGNORE_COMMENT: 4,\n  CDATA: 8\n};\n\nvar TAG_TYPE = {\n  NONE: 0,\n  OPENING: 1,\n  CLOSING: 2,\n  SELF_CLOSING: 3\n};\n\nvar EVENTS = exports.EVENTS = {\n  ERROR: \"error\",\n  TEXT: \"text\",\n  INSTRUCTION: \"instruction\",\n  OPEN_TAG: \"opentag\",\n  CLOSE_TAG: \"closetag\",\n  CDATA: \"cdata\"\n};","'use strict';\n\nvar _parser = require('./parser');\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = _parser2.default;","import fs from 'fs';\nimport path, { dirname } from 'path';\nimport zlib from 'zlib';\nimport { pipeline } from 'stream';\nimport utilService from './utilService.js';\nimport FranchiseEnum from '../FranchiseEnum.js';\nimport XmlParser from 'node-xml-stream-parser';\nimport { EventEmitter } from 'events';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nlet schemaGenerator = {};\nschemaGenerator.eventEmitter = new EventEmitter();\n/** @param {string} inputFile @param {boolean?} [showOutput] @param {string?} [outputFile] */\nschemaGenerator.generate = (inputFile, showOutput, outputFile) => {\n    const stream = fs.createReadStream(inputFile);\n    schemaGenerator.generateFromStream(stream, showOutput, outputFile);\n};\n/** @param {ReadableStream} stream @param {boolean?} [showOutput] @param {string?} [outputFile] */\nschemaGenerator.generateFromStream = (stream, showOutput, outputFile) => {\n    schemaGenerator.root = {};\n    schemaGenerator.schemas = [];\n    schemaGenerator.schemaMap = {};\n    schemaGenerator.schemaMeta = {};\n    schemaGenerator.enums = [];\n    const extraSchemas = schemaGenerator.getExtraSchemas();\n    schemaGenerator.xml = new XmlParser();\n    pipeline(stream, schemaGenerator.xml, (err) => {\n        if (err) {\n            console.error(err);\n            throw err;\n        }\n        schemaGenerator.enums.forEach((theEnum) => {\n            theEnum.setMemberLength();\n        });\n        const majorVersion = schemaGenerator.schemaMeta.dataMajorVersion;\n        const minorVersion = schemaGenerator.schemaMeta.dataMinorVersion;\n        const databaseName = schemaGenerator.schemaMeta.databaseName;\n        const gameYear = /Madden(\\d{2})/.exec(databaseName)[1];\n        addExtraSchemas();\n        calculateInheritedSchemas();\n        schemaGenerator.root = {\n            meta: {\n                major: parseInt(majorVersion),\n                minor: parseInt(minorVersion),\n                gameYear: parseInt(gameYear)\n            },\n            schemas: schemaGenerator.schemas,\n            schemaMap: schemaGenerator.schemaMap\n        };\n        if (outputFile) {\n            zlib.gzip(JSON.stringify(schemaGenerator.root), function (_, data) {\n                fs.writeFileSync(\n                    path.join(outputFile, `${majorVersion}_${minorVersion}.gz`),\n                    data\n                );\n            });\n        }\n        schemaGenerator.eventEmitter.emit('schemas:done', schemaGenerator.root);\n    });\n    let currentParent = {\n        type: '',\n        ref: null\n    };\n    schemaGenerator.xml.on('opentag', (name, attrs) => {\n        if (name === 'FranTkData') {\n            schemaGenerator.schemaMeta.databaseName = attrs.databaseName;\n            schemaGenerator.schemaMeta.dataMajorVersion =\n                attrs.dataMajorVersion;\n            schemaGenerator.schemaMeta.dataMinorVersion =\n                attrs.dataMinorVersion;\n        } else if (name === 'enum') {\n            let theEnum = parseEnum(attrs);\n            schemaGenerator.enums.push(theEnum);\n            currentParent = {\n                type: 'enum',\n                ref: theEnum\n            };\n        } else if (name === 'schema') {\n            let schema = parseSchema(attrs);\n            schema.attributes = [];\n            schemaGenerator.schemas.push(schema);\n            schemaGenerator.schemaMap[schema.name] = schema;\n            currentParent = {\n                type: 'schema',\n                ref: schema\n            };\n        } else if (name === 'attribute') {\n            if (currentParent.type === 'enum') {\n                currentParent.ref.addMember(attrs.name, attrs.idx, attrs.value);\n            } else {\n                const attribute = parseAttribute(attrs);\n                currentParent.ref.attributes.push(attribute);\n            }\n        }\n    });\n    function parseEnum(enumAttributes) {\n        return new FranchiseEnum(\n            enumAttributes.name,\n            enumAttributes.assetId,\n            enumAttributes.isRecordPersistent\n        );\n    }\n    function parseSchema(schemaAttributes) {\n        return {\n            assetId: schemaAttributes.assetId,\n            ownerAssetId: schemaAttributes.ownerAssetId,\n            numMembers: schemaAttributes.numMembers,\n            name: schemaAttributes.name,\n            base: schemaAttributes.base\n        };\n    }\n    function parseAttribute(attributeAttributes) {\n        return {\n            index: attributeAttributes.idx,\n            name: attributeAttributes.name,\n            type: attributeAttributes.type,\n            minValue: attributeAttributes.minValue,\n            maxValue: attributeAttributes.maxValue,\n            maxLength: attributeAttributes.maxLen,\n            default: getDefaultValue(attributeAttributes.default),\n            final: attributeAttributes.final,\n            enum: getEnum(attributeAttributes.type),\n            const: attributeAttributes.const\n        };\n        function getDefaultValue(defaultVal) {\n            if (!defaultVal) {\n                return undefined;\n            }\n            defaultVal = defaultVal\n                .replace(new RegExp('&#xD;', 'g'), '\\r')\n                .replace(new RegExp('&#xA;', 'g'), '\\n')\n                .replace(new RegExp('&amp;', 'g'), '&')\n                .replace(new RegExp('&gt;', 'g'), '>')\n                .replace(new RegExp('&lt;', 'g'), '<')\n                .replace(new RegExp('&quot;', 'g'), '\"');\n            return defaultVal;\n        }\n    }\n    function addExtraSchemas() {\n        extraSchemas.forEach((schema) => {\n            if (!schemaGenerator.schemaMap[schema.name]) {\n                schema.attributes\n                    .filter((attrib) => {\n                        return (\n                            attrib.enum &&\n                            !(attrib.enum instanceof FranchiseEnum)\n                        );\n                    })\n                    .forEach((attrib) => {\n                        attrib.enum = getEnum(attrib.enum);\n                    });\n                schemaGenerator.schemas.unshift(schema);\n            }\n        });\n    }\n    function calculateInheritedSchemas() {\n        schemaGenerator.calculateInheritedSchemas(schemaGenerator.schemas);\n    }\n    function getEnum(name) {\n        return schemaGenerator.enums.find((theEnum) => {\n            return theEnum.name === name;\n        });\n    }\n};\n/** @returns {Record<string, any>} */\nschemaGenerator.getExtraSchemas = () => {\n    const filePath = path.join(\n        __dirname,\n        '../../data/schemas/extra-schemas.json'\n    );\n    const data = fs.readFileSync(filePath, 'utf-8');\n    return JSON.parse(data);\n};\n/** @param {Array<TableSchema>} schemaList */\nschemaGenerator.calculateInheritedSchemas = (schemaList) => {\n    const schemasWithBase = schemaList.filter((schema) => {\n        return schema.base && schema.base.indexOf('()') === -1;\n    });\n    schemasWithBase.forEach((schema) => {\n        if (schema.base && schema.base.indexOf('()') === -1) {\n            schema.originalAttributesOrder = schema.attributes;\n            const baseSchema = schemaList.find((schemaToSearch) => {\n                return schemaToSearch.name === schema.base;\n            });\n            if (baseSchema) {\n                baseSchema.attributes.forEach((baseAttribute, index) => {\n                    let oldIndex = schema.attributes.findIndex(\n                        (schemaAttribute) => {\n                            return (\n                                schemaAttribute?.name === baseAttribute?.name\n                            );\n                        }\n                    );\n                    utilService.arrayMove(schema.attributes, oldIndex, index);\n                });\n            }\n        }\n    });\n};\nexport default schemaGenerator;\n","'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nexport const nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*';\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nexport function getAllMatches(string, regex) {\n  const matches = [];\n  let match = regex.exec(string);\n  while (match) {\n    const allmatches = [];\n    allmatches.startIndex = regex.lastIndex - match[0].length;\n    const len = match.length;\n    for (let index = 0; index < len; index++) {\n      allmatches.push(match[index]);\n    }\n    matches.push(allmatches);\n    match = regex.exec(string);\n  }\n  return matches;\n}\n\nexport const isName = function(string) {\n  const match = regexName.exec(string);\n  return !(match === null || typeof match === 'undefined');\n}\n\nexport function isExist(v) {\n  return typeof v !== 'undefined';\n}\n\nexport function isEmptyObject(obj) {\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexport function merge(target, a, arrayMode) {\n  if (a) {\n    const keys = Object.keys(a); // will return an array of own properties\n    const len = keys.length; //don't make it inline\n    for (let i = 0; i < len; i++) {\n      if (arrayMode === 'strict') {\n        target[keys[i]] = [ a[keys[i]] ];\n      } else {\n        target[keys[i]] = a[keys[i]];\n      }\n    }\n  }\n}\n/* exports.merge =function (b,a){\n  return Object.assign(b,a);\n} */\n\nexport function getValue(v) {\n  if (exports.isExist(v)) {\n    return v;\n  } else {\n    return '';\n  }\n}\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};","'use strict';\n\nimport {getAllMatches, isName} from './util.js';\n\nconst defaultOptions = {\n  allowBooleanAttributes: false, //A tag can have attributes without any value\n  unpairedTags: []\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexport function validate(xmlData, options) {\n  options = Object.assign({}, defaultOptions, options);\n\n  //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n  //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n  //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n  const tags = [];\n  let tagFound = false;\n\n  //indicates that the root tag has been closed (aka. depth 0 has been reached)\n  let reachedRoot = false;\n\n  if (xmlData[0] === '\\ufeff') {\n    // check for byte order mark (BOM)\n    xmlData = xmlData.substr(1);\n  }\n  \n  for (let i = 0; i < xmlData.length; i++) {\n\n    if (xmlData[i] === '<' && xmlData[i+1] === '?') {\n      i+=2;\n      i = readPI(xmlData,i);\n      if (i.err) return i;\n    }else if (xmlData[i] === '<') {\n      //starting of tag\n      //read until you reach to '>' avoiding any '>' in attribute value\n      let tagStartPos = i;\n      i++;\n      \n      if (xmlData[i] === '!') {\n        i = readCommentAndCDATA(xmlData, i);\n        continue;\n      } else {\n        let closingTag = false;\n        if (xmlData[i] === '/') {\n          //closing tag\n          closingTag = true;\n          i++;\n        }\n        //read tagname\n        let tagName = '';\n        for (; i < xmlData.length &&\n          xmlData[i] !== '>' &&\n          xmlData[i] !== ' ' &&\n          xmlData[i] !== '\\t' &&\n          xmlData[i] !== '\\n' &&\n          xmlData[i] !== '\\r'; i++\n        ) {\n          tagName += xmlData[i];\n        }\n        tagName = tagName.trim();\n        //console.log(tagName);\n\n        if (tagName[tagName.length - 1] === '/') {\n          //self closing tag without attributes\n          tagName = tagName.substring(0, tagName.length - 1);\n          //continue;\n          i--;\n        }\n        if (!validateTagName(tagName)) {\n          let msg;\n          if (tagName.trim().length === 0) {\n            msg = \"Invalid space after '<'.\";\n          } else {\n            msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n          }\n          return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n        }\n\n        const result = readAttributeStr(xmlData, i);\n        if (result === false) {\n          return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n        }\n        let attrStr = result.value;\n        i = result.index;\n\n        if (attrStr[attrStr.length - 1] === '/') {\n          //self closing tag\n          const attrStrStart = i - attrStr.length;\n          attrStr = attrStr.substring(0, attrStr.length - 1);\n          const isValid = validateAttributeString(attrStr, options);\n          if (isValid === true) {\n            tagFound = true;\n            //continue; //text may presents after self closing tag\n          } else {\n            //the result from the nested function returns the position of the error within the attribute\n            //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n            //this gives us the absolute index in the entire xml, which we can use to find the line at last\n            return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n          }\n        } else if (closingTag) {\n          if (!result.tagClosed) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n          } else if (attrStr.trim().length > 0) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n          } else if (tags.length === 0) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' has not been opened.\", getLineNumberForPosition(xmlData, tagStartPos));\n          } else {\n            const otg = tags.pop();\n            if (tagName !== otg.tagName) {\n              let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n              return getErrorObject('InvalidTag',\n                \"Expected closing tag '\"+otg.tagName+\"' (opened in line \"+openPos.line+\", col \"+openPos.col+\") instead of closing tag '\"+tagName+\"'.\",\n                getLineNumberForPosition(xmlData, tagStartPos));\n            }\n\n            //when there are no more tags, we reached the root level.\n            if (tags.length == 0) {\n              reachedRoot = true;\n            }\n          }\n        } else {\n          const isValid = validateAttributeString(attrStr, options);\n          if (isValid !== true) {\n            //the result from the nested function returns the position of the error within the attribute\n            //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n            //this gives us the absolute index in the entire xml, which we can use to find the line at last\n            return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n          }\n\n          //if the root level has been reached before ...\n          if (reachedRoot === true) {\n            return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n          } else if(options.unpairedTags.indexOf(tagName) !== -1){\n            //don't push into stack\n          } else {\n            tags.push({tagName, tagStartPos});\n          }\n          tagFound = true;\n        }\n\n        //skip tag text value\n        //It may include comments and CDATA value\n        for (i++; i < xmlData.length; i++) {\n          if (xmlData[i] === '<') {\n            if (xmlData[i + 1] === '!') {\n              //comment or CADATA\n              i++;\n              i = readCommentAndCDATA(xmlData, i);\n              continue;\n            } else if (xmlData[i+1] === '?') {\n              i = readPI(xmlData, ++i);\n              if (i.err) return i;\n            } else{\n              break;\n            }\n          } else if (xmlData[i] === '&') {\n            const afterAmp = validateAmpersand(xmlData, i);\n            if (afterAmp == -1)\n              return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n            i = afterAmp;\n          }else{\n            if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {\n              return getErrorObject('InvalidXml', \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n            }\n          }\n        } //end of reading tag text value\n        if (xmlData[i] === '<') {\n          i--;\n        }\n      }\n    } else {\n      if ( isWhiteSpace(xmlData[i])) {\n        continue;\n      }\n      return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n    }\n  }\n\n  if (!tagFound) {\n    return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n  }else if (tags.length == 1) {\n      return getErrorObject('InvalidTag', \"Unclosed tag '\"+tags[0].tagName+\"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n  }else if (tags.length > 0) {\n      return getErrorObject('InvalidXml', \"Invalid '\"+\n          JSON.stringify(tags.map(t => t.tagName), null, 4).replace(/\\r?\\n/g, '')+\n          \"' found.\", {line: 1, col: 1});\n  }\n\n  return true;\n};\n\nfunction isWhiteSpace(char){\n  return char === ' ' || char === '\\t' || char === '\\n'  || char === '\\r';\n}\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n  const start = i;\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] == '?' || xmlData[i] == ' ') {\n      //tagname\n      const tagname = xmlData.substr(start, i - start);\n      if (i > 5 && tagname === 'xml') {\n        return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n      } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n        //check if valid attribut string\n        i++;\n        break;\n      } else {\n        continue;\n      }\n    }\n  }\n  return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n  if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n    //comment\n    for (i += 3; i < xmlData.length; i++) {\n      if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n        i += 2;\n        break;\n      }\n    }\n  } else if (\n    xmlData.length > i + 8 &&\n    xmlData[i + 1] === 'D' &&\n    xmlData[i + 2] === 'O' &&\n    xmlData[i + 3] === 'C' &&\n    xmlData[i + 4] === 'T' &&\n    xmlData[i + 5] === 'Y' &&\n    xmlData[i + 6] === 'P' &&\n    xmlData[i + 7] === 'E'\n  ) {\n    let angleBracketsCount = 1;\n    for (i += 8; i < xmlData.length; i++) {\n      if (xmlData[i] === '<') {\n        angleBracketsCount++;\n      } else if (xmlData[i] === '>') {\n        angleBracketsCount--;\n        if (angleBracketsCount === 0) {\n          break;\n        }\n      }\n    }\n  } else if (\n    xmlData.length > i + 9 &&\n    xmlData[i + 1] === '[' &&\n    xmlData[i + 2] === 'C' &&\n    xmlData[i + 3] === 'D' &&\n    xmlData[i + 4] === 'A' &&\n    xmlData[i + 5] === 'T' &&\n    xmlData[i + 6] === 'A' &&\n    xmlData[i + 7] === '['\n  ) {\n    for (i += 8; i < xmlData.length; i++) {\n      if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n        i += 2;\n        break;\n      }\n    }\n  }\n\n  return i;\n}\n\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n  let attrStr = '';\n  let startChar = '';\n  let tagClosed = false;\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n      if (startChar === '') {\n        startChar = xmlData[i];\n      } else if (startChar !== xmlData[i]) {\n        //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n      } else {\n        startChar = '';\n      }\n    } else if (xmlData[i] === '>') {\n      if (startChar === '') {\n        tagClosed = true;\n        break;\n      }\n    }\n    attrStr += xmlData[i];\n  }\n  if (startChar !== '') {\n    return false;\n  }\n\n  return {\n    value: attrStr,\n    index: i,\n    tagClosed: tagClosed\n  };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab  cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n  //console.log(\"start:\"+attrStr+\":end\");\n\n  //if(attrStr.trim().length === 0) return true; //empty string\n\n  const matches = getAllMatches(attrStr, validAttrStrRegxp);\n  const attrNames = {};\n\n  for (let i = 0; i < matches.length; i++) {\n    if (matches[i][1].length === 0) {\n      //nospace before attribute name: a=\"sd\"b=\"saf\"\n      return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(matches[i]))\n    } else if (matches[i][3] !== undefined && matches[i][4] === undefined) {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' is without value.\", getPositionFromMatch(matches[i]));\n    } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n      //independent attribute: ab\n      return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(matches[i]));\n    }\n    /* else if(matches[i][6] === undefined){//attribute without value: ab=\n                    return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n                } */\n    const attrName = matches[i][2];\n    if (!validateAttrName(attrName)) {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(matches[i]));\n    }\n    if (!attrNames.hasOwnProperty(attrName)) {\n      //check for duplicate attribute.\n      attrNames[attrName] = 1;\n    } else {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(matches[i]));\n    }\n  }\n\n  return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n  let re = /\\d/;\n  if (xmlData[i] === 'x') {\n    i++;\n    re = /[\\da-fA-F]/;\n  }\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] === ';')\n      return i;\n    if (!xmlData[i].match(re))\n      break;\n  }\n  return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n  // https://www.w3.org/TR/xml/#dt-charref\n  i++;\n  if (xmlData[i] === ';')\n    return -1;\n  if (xmlData[i] === '#') {\n    i++;\n    return validateNumberAmpersand(xmlData, i);\n  }\n  let count = 0;\n  for (; i < xmlData.length; i++, count++) {\n    if (xmlData[i].match(/\\w/) && count < 20)\n      continue;\n    if (xmlData[i] === ';')\n      break;\n    return -1;\n  }\n  return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n  return {\n    err: {\n      code: code,\n      msg: message,\n      line: lineNumber.line || lineNumber,\n      col: lineNumber.col,\n    },\n  };\n}\n\nfunction validateAttrName(attrName) {\n  return isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n  return isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n  const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n  return {\n    line: lines.length,\n\n    // column number is last line's length + 1, because column numbering starts at 1:\n    col: lines[lines.length - 1].length + 1\n  };\n}\n\n//this function returns the position of the first character of match within attrStr\nfunction getPositionFromMatch(match) {\n  return match.startIndex + match[1].length;\n}\n","\nexport const defaultOptions = {\n    preserveOrder: false,\n    attributeNamePrefix: '@_',\n    attributesGroupName: false,\n    textNodeName: '#text',\n    ignoreAttributes: true,\n    removeNSPrefix: false, // remove NS from tag name or attribute name if true\n    allowBooleanAttributes: false, //a tag can have attributes without any value\n    //ignoreRootElement : false,\n    parseTagValue: true,\n    parseAttributeValue: false,\n    trimValues: true, //Trim string values of tag and attributes\n    cdataPropName: false,\n    numberParseOptions: {\n      hex: true,\n      leadingZeros: true,\n      eNotation: true\n    },\n    tagValueProcessor: function(tagName, val) {\n      return val;\n    },\n    attributeValueProcessor: function(attrName, val) {\n      return val;\n    },\n    stopNodes: [], //nested tags will not be parsed even for errors\n    alwaysCreateTextNode: false,\n    isArray: () => false,\n    commentPropName: false,\n    unpairedTags: [],\n    processEntities: true,\n    htmlEntities: false,\n    ignoreDeclaration: false,\n    ignorePiTags: false,\n    transformTagName: false,\n    transformAttributeName: false,\n    updateTag: function(tagName, jPath, attrs){\n      return tagName\n    },\n    // skipEmptyListItem: false\n    captureMetaData: false,\n};\n   \nexport const buildOptions = function(options) {\n    return Object.assign({}, defaultOptions, options);\n};\n","'use strict';\n\nlet METADATA_SYMBOL;\n\nif (typeof Symbol !== \"function\") {\n  METADATA_SYMBOL = \"@@xmlMetadata\";\n} else {\n  METADATA_SYMBOL = Symbol(\"XML Node Metadata\");\n}\n\nexport default class XmlNode{\n  constructor(tagname) {\n    this.tagname = tagname;\n    this.child = []; //nested tags, text, cdata, comments in order\n    this[\":@\"] = {}; //attributes map\n  }\n  add(key,val){\n    // this.child.push( {name : key, val: val, isCdata: isCdata });\n    if(key === \"__proto__\") key = \"#__proto__\";\n    this.child.push( {[key]: val });\n  }\n  addChild(node, startIndex) {\n    if(node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n    if(node[\":@\"] && Object.keys(node[\":@\"]).length > 0){\n      this.child.push( { [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n    }else{\n      this.child.push( { [node.tagname]: node.child });\n    }\n    // if requested, add the startIndex\n    if (startIndex !== undefined) {\n      // Note: for now we just overwrite the metadata. If we had more complex metadata,\n      // we might need to do an object append here:  metadata = { ...metadata, startIndex }\n      this.child[this.child.length - 1][METADATA_SYMBOL] = { startIndex };\n    }\n  }\n  /** symbol used for metadata */\n  static getMetaDataSymbol() {\n    return METADATA_SYMBOL;\n  }\n}\n","import {isName} from '../util.js';\n\n//TODO: handle comments\nexport default function readDocType(xmlData, i){\n    \n    const entities = {};\n    if( xmlData[i + 3] === 'O' &&\n         xmlData[i + 4] === 'C' &&\n         xmlData[i + 5] === 'T' &&\n         xmlData[i + 6] === 'Y' &&\n         xmlData[i + 7] === 'P' &&\n         xmlData[i + 8] === 'E')\n    {    \n        i = i+9;\n        let angleBracketsCount = 1;\n        let hasBody = false, comment = false;\n        let exp = \"\";\n        for(;i<xmlData.length;i++){\n            if (xmlData[i] === '<' && !comment) { //Determine the tag type\n                if( hasBody && hasSeq(xmlData, \"!ENTITY\",i)){\n                    i += 7; \n                    let entityName, val;\n                    [entityName, val,i] = readEntityExp(xmlData,i+1);\n                    if(val.indexOf(\"&\") === -1) //Parameter entities are not supported\n                        entities[ entityName ] = {\n                            regx : RegExp( `&${entityName};`,\"g\"),\n                            val: val\n                        };\n                }\n                else if( hasBody && hasSeq(xmlData, \"!ELEMENT\",i))  {\n                    i += 8;//Not supported\n                    const {index} = readElementExp(xmlData,i+1);\n                    i = index;\n                }else if( hasBody && hasSeq(xmlData, \"!ATTLIST\",i)){\n                    i += 8;//Not supported\n                    // const {index} = readAttlistExp(xmlData,i+1);\n                    // i = index;\n                }else if( hasBody && hasSeq(xmlData, \"!NOTATION\",i)) {\n                    i += 9;//Not supported\n                    const {index} = readNotationExp(xmlData,i+1);\n                    i = index;\n                }else if( hasSeq(xmlData, \"!--\",i) ) comment = true;\n                else throw new Error(`Invalid DOCTYPE`);\n\n                angleBracketsCount++;\n                exp = \"\";\n            } else if (xmlData[i] === '>') { //Read tag content\n                if(comment){\n                    if( xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\"){\n                        comment = false;\n                        angleBracketsCount--;\n                    }\n                }else{\n                    angleBracketsCount--;\n                }\n                if (angleBracketsCount === 0) {\n                  break;\n                }\n            }else if( xmlData[i] === '['){\n                hasBody = true;\n            }else{\n                exp += xmlData[i];\n            }\n        }\n        if(angleBracketsCount !== 0){\n            throw new Error(`Unclosed DOCTYPE`);\n        }\n    }else{\n        throw new Error(`Invalid Tag instead of DOCTYPE`);\n    }\n    return {entities, i};\n}\n\nconst skipWhitespace = (data, index) => {\n    while (index < data.length && /\\s/.test(data[index])) {\n        index++;\n    }\n    return index;\n};\n\nfunction readEntityExp(xmlData, i) {    \n    //External entities are not supported\n    //    <!ENTITY ext SYSTEM \"http://normal-website.com\" >\n\n    //Parameter entities are not supported\n    //    <!ENTITY entityname \"&anotherElement;\">\n\n    //Internal entities are supported\n    //    <!ENTITY entityname \"replacement text\">\n\n    // Skip leading whitespace after <!ENTITY\n    i = skipWhitespace(xmlData, i);\n\n    // Read entity name\n    let entityName = \"\";\n    while (i < xmlData.length && !/\\s/.test(xmlData[i]) && xmlData[i] !== '\"' && xmlData[i] !== \"'\") {\n        entityName += xmlData[i];\n        i++;\n    }\n    validateEntityName(entityName);\n\n    // Skip whitespace after entity name\n    i = skipWhitespace(xmlData, i);\n\n    // Check for unsupported constructs (external entities or parameter entities)\n    if (xmlData.substring(i, i + 6).toUpperCase() === \"SYSTEM\") {\n        throw new Error(\"External entities are not supported\");\n    }else if (xmlData[i] === \"%\") {\n        throw new Error(\"Parameter entities are not supported\");\n    }\n\n    // Read entity value (internal entity)\n    let entityValue = \"\";\n    [i, entityValue] = readIdentifierVal(xmlData, i, \"entity\");\n    i--;\n    return [entityName, entityValue, i ];\n}\n\nfunction readNotationExp(xmlData, i) {\n    // Skip leading whitespace after <!NOTATION\n    i = skipWhitespace(xmlData, i);\n\n    // Read notation name\n    let notationName = \"\";\n    while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n        notationName += xmlData[i];\n        i++;\n    }\n    validateEntityName(notationName);\n\n    // Skip whitespace after notation name\n    i = skipWhitespace(xmlData, i);\n\n    // Check identifier type (SYSTEM or PUBLIC)\n    const identifierType = xmlData.substring(i, i + 6).toUpperCase();\n    if (identifierType !== \"SYSTEM\" && identifierType !== \"PUBLIC\") {\n        throw new Error(`Expected SYSTEM or PUBLIC, found \"${identifierType}\"`);\n    }\n    i += identifierType.length;\n\n    // Skip whitespace after identifier type\n    i = skipWhitespace(xmlData, i);\n\n    // Read public identifier (if PUBLIC)\n    let publicIdentifier = null;\n    let systemIdentifier = null;\n\n    if (identifierType === \"PUBLIC\") {\n        [i, publicIdentifier ] = readIdentifierVal(xmlData, i, \"publicIdentifier\");\n\n        // Skip whitespace after public identifier\n        i = skipWhitespace(xmlData, i);\n\n        // Optionally read system identifier\n        if (xmlData[i] === '\"' || xmlData[i] === \"'\") {\n            [i, systemIdentifier ] = readIdentifierVal(xmlData, i,\"systemIdentifier\");\n        }\n    } else if (identifierType === \"SYSTEM\") {\n        // Read system identifier (mandatory for SYSTEM)\n        [i, systemIdentifier ] = readIdentifierVal(xmlData, i, \"systemIdentifier\");\n\n        if (!systemIdentifier) {\n            throw new Error(\"Missing mandatory system identifier for SYSTEM notation\");\n        }\n    }\n    \n    return {notationName, publicIdentifier, systemIdentifier, index: --i};\n}\n\nfunction readIdentifierVal(xmlData, i, type) {\n    let identifierVal = \"\";\n    const startChar = xmlData[i];\n    if (startChar !== '\"' && startChar !== \"'\") {\n        throw new Error(`Expected quoted string, found \"${startChar}\"`);\n    }\n    i++;\n\n    while (i < xmlData.length && xmlData[i] !== startChar) {\n        identifierVal += xmlData[i];\n        i++;\n    }\n\n    if (xmlData[i] !== startChar) {\n        throw new Error(`Unterminated ${type} value`);\n    }\n    i++;\n    return [i, identifierVal];\n}\n\nfunction readElementExp(xmlData, i) {\n    // <!ELEMENT br EMPTY>\n    // <!ELEMENT div ANY>\n    // <!ELEMENT title (#PCDATA)>\n    // <!ELEMENT book (title, author+)>\n    // <!ELEMENT name (content-model)>\n    \n    // Skip leading whitespace after <!ELEMENT\n    i = skipWhitespace(xmlData, i);\n\n    // Read element name\n    let elementName = \"\";\n    while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n        elementName += xmlData[i];\n        i++;\n    }\n\n    // Validate element name\n    if (!validateEntityName(elementName)) {\n        throw new Error(`Invalid element name: \"${elementName}\"`);\n    }\n\n    // Skip whitespace after element name\n    i = skipWhitespace(xmlData, i);\n    let contentModel = \"\";\n    // Expect '(' to start content model\n    if(xmlData[i] === \"E\" && hasSeq(xmlData, \"MPTY\",i)) i+=4;\n    else if(xmlData[i] === \"A\" && hasSeq(xmlData, \"NY\",i)) i+=2;\n    else if (xmlData[i] === \"(\") {\n        i++; // Move past '('\n\n        // Read content model\n        while (i < xmlData.length && xmlData[i] !== \")\") {\n            contentModel += xmlData[i];\n            i++;\n        }\n        if (xmlData[i] !== \")\") {\n            throw new Error(\"Unterminated content model\");\n        }\n\n    }else{\n        throw new Error(`Invalid Element Expression, found \"${xmlData[i]}\"`);\n    }\n    \n    return {\n        elementName,\n        contentModel: contentModel.trim(),\n        index: i\n    };\n}\n\nfunction readAttlistExp(xmlData, i) {\n    // Skip leading whitespace after <!ATTLIST\n    i = skipWhitespace(xmlData, i);\n\n    // Read element name\n    let elementName = \"\";\n    while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n        elementName += xmlData[i];\n        i++;\n    }\n\n    // Validate element name\n    validateEntityName(elementName)\n\n    // Skip whitespace after element name\n    i = skipWhitespace(xmlData, i);\n\n    // Read attribute name\n    let attributeName = \"\";\n    while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n        attributeName += xmlData[i];\n        i++;\n    }\n\n    // Validate attribute name\n    if (!validateEntityName(attributeName)) {\n        throw new Error(`Invalid attribute name: \"${attributeName}\"`);\n    }\n\n    // Skip whitespace after attribute name\n    i = skipWhitespace(xmlData, i);\n\n    // Read attribute type\n    let attributeType = \"\";\n    if (xmlData.substring(i, i + 8).toUpperCase() === \"NOTATION\") {\n        attributeType = \"NOTATION\";\n        i += 8; // Move past \"NOTATION\"\n\n        // Skip whitespace after \"NOTATION\"\n        i = skipWhitespace(xmlData, i);\n\n        // Expect '(' to start the list of notations\n        if (xmlData[i] !== \"(\") {\n            throw new Error(`Expected '(', found \"${xmlData[i]}\"`);\n        }\n        i++; // Move past '('\n\n        // Read the list of allowed notations\n        let allowedNotations = [];\n        while (i < xmlData.length && xmlData[i] !== \")\") {\n            let notation = \"\";\n            while (i < xmlData.length && xmlData[i] !== \"|\" && xmlData[i] !== \")\") {\n                notation += xmlData[i];\n                i++;\n            }\n\n            // Validate notation name\n            notation = notation.trim();\n            if (!validateEntityName(notation)) {\n                throw new Error(`Invalid notation name: \"${notation}\"`);\n            }\n\n            allowedNotations.push(notation);\n\n            // Skip '|' separator or exit loop\n            if (xmlData[i] === \"|\") {\n                i++; // Move past '|'\n                i = skipWhitespace(xmlData, i); // Skip optional whitespace after '|'\n            }\n        }\n\n        if (xmlData[i] !== \")\") {\n            throw new Error(\"Unterminated list of notations\");\n        }\n        i++; // Move past ')'\n\n        // Store the allowed notations as part of the attribute type\n        attributeType += \" (\" + allowedNotations.join(\"|\") + \")\";\n    } else {\n        // Handle simple types (e.g., CDATA, ID, IDREF, etc.)\n        while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n            attributeType += xmlData[i];\n            i++;\n        }\n\n        // Validate simple attribute type\n        const validTypes = [\"CDATA\", \"ID\", \"IDREF\", \"IDREFS\", \"ENTITY\", \"ENTITIES\", \"NMTOKEN\", \"NMTOKENS\"];\n        if (!validTypes.includes(attributeType.toUpperCase())) {\n            throw new Error(`Invalid attribute type: \"${attributeType}\"`);\n        }\n    }\n\n    // Skip whitespace after attribute type\n    i = skipWhitespace(xmlData, i);\n\n    // Read default value\n    let defaultValue = \"\";\n    if (xmlData.substring(i, i + 8).toUpperCase() === \"#REQUIRED\") {\n        defaultValue = \"#REQUIRED\";\n        i += 8;\n    } else if (xmlData.substring(i, i + 7).toUpperCase() === \"#IMPLIED\") {\n        defaultValue = \"#IMPLIED\";\n        i += 7;\n    } else {\n        [i, defaultValue] = readIdentifierVal(xmlData, i, \"ATTLIST\");\n    }\n\n    return {\n        elementName,\n        attributeName,\n        attributeType,\n        defaultValue,\n        index: i\n    }\n}\n\nfunction hasSeq(data, seq,i){\n    for(let j=0;j<seq.length;j++){\n        if(seq[j]!==data[i+j+1]) return false;\n    }\n    return true;\n}\n\nfunction validateEntityName(name){\n    if (isName(name))\n\treturn name;\n    else\n        throw new Error(`Invalid entity name ${name}`);\n}\n","const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)([0-9]*(\\.[0-9]*)?)$/;\n// const octRegex = /^0x[a-z0-9]+/;\n// const binRegex = /0x[a-z0-9]+/;\n\n \nconst consider = {\n    hex :  true,\n    // oct: false,\n    leadingZeros: true,\n    decimalPoint: \"\\.\",\n    eNotation: true,\n    //skipLike: /regex/\n};\n\nexport default function toNumber(str, options = {}){\n    options = Object.assign({}, consider, options );\n    if(!str || typeof str !== \"string\" ) return str;\n    \n    let trimmedStr  = str.trim();\n    \n    if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;\n    else if(str===\"0\") return 0;\n    else if (options.hex && hexRegex.test(trimmedStr)) {\n        return parse_int(trimmedStr, 16);\n    // }else if (options.oct && octRegex.test(str)) {\n    //     return Number.parseInt(val, 8);\n    }else if (trimmedStr.search(/.+[eE].+/)!== -1) { //eNotation\n        return resolveEnotation(str,trimmedStr,options);\n    // }else if (options.parseBin && binRegex.test(str)) {\n    //     return Number.parseInt(val, 2);\n    }else{\n        //separate negative sign, leading zeros, and rest number\n        const match = numRegex.exec(trimmedStr);\n        // +00.123 => [ , '+', '00', '.123', ..\n        if(match){\n            const sign = match[1] || \"\";\n            const leadingZeros = match[2];\n            let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros\n            const decimalAdjacentToLeadingZeros = sign ? // 0., -00., 000.\n                str[leadingZeros.length+1] === \".\" \n                : str[leadingZeros.length] === \".\";\n\n            //trim ending zeros for floating number\n            if(!options.leadingZeros //leading zeros are not allowed\n                && (leadingZeros.length > 1 \n                    || (leadingZeros.length === 1 && !decimalAdjacentToLeadingZeros))){\n                // 00, 00.3, +03.24, 03, 03.24\n                return str;\n            }\n            else{//no leading zeros or leading zeros are allowed\n                const num = Number(trimmedStr);\n                const parsedStr = String(num);\n\n                if( num === 0) return num;\n                if(parsedStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation\n                    if(options.eNotation) return num;\n                    else return str;\n                }else if(trimmedStr.indexOf(\".\") !== -1){ //floating number\n                    if(parsedStr === \"0\") return num; //0.0\n                    else if(parsedStr === numTrimmedByZeros) return num; //0.456. 0.79000\n                    else if( parsedStr === `${sign}${numTrimmedByZeros}`) return num;\n                    else return str;\n                }\n                \n                let n = leadingZeros? numTrimmedByZeros : trimmedStr;\n                if(leadingZeros){\n                    // -009 => -9\n                    return (n === parsedStr) || (sign+n === parsedStr) ? num : str\n                }else  {\n                    // +9\n                    return (n === parsedStr) || (n === sign+parsedStr) ? num : str\n                }\n            }\n        }else{ //non-numeric string\n            return str;\n        }\n    }\n}\n\nconst eNotationRegx = /^([-+])?(0*)(\\d*(\\.\\d*)?[eE][-\\+]?\\d+)$/;\nfunction resolveEnotation(str,trimmedStr,options){\n    if(!options.eNotation) return str;\n    const notation = trimmedStr.match(eNotationRegx); \n    if(notation){\n        let sign = notation[1] || \"\";\n        const eChar = notation[3].indexOf(\"e\") === -1 ? \"E\" : \"e\";\n        const leadingZeros = notation[2];\n        const eAdjacentToLeadingZeros = sign ? // 0E.\n            str[leadingZeros.length+1] === eChar \n            : str[leadingZeros.length] === eChar;\n\n        if(leadingZeros.length > 1 && eAdjacentToLeadingZeros) return str;\n        else if(leadingZeros.length === 1 \n            && (notation[3].startsWith(`.${eChar}`) || notation[3][0] === eChar)){\n                return Number(trimmedStr);\n        }else if(options.leadingZeros && !eAdjacentToLeadingZeros){ //accept with leading zeros\n            //remove leading 0s\n            trimmedStr = (notation[1] || \"\") + notation[3];\n            return Number(trimmedStr);\n        }else return str;\n    }else{\n        return str;\n    }\n}\n\n/**\n * \n * @param {string} numStr without leading zeros\n * @returns \n */\nfunction trimZeros(numStr){\n    if(numStr && numStr.indexOf(\".\") !== -1){//float\n        numStr = numStr.replace(/0+$/, \"\"); //remove ending zeros\n        if(numStr === \".\")  numStr = \"0\";\n        else if(numStr[0] === \".\")  numStr = \"0\"+numStr;\n        else if(numStr[numStr.length-1] === \".\")  numStr = numStr.substring(0,numStr.length-1);\n        return numStr;\n    }\n    return numStr;\n}\n\nfunction parse_int(numStr, base){\n    //polyfill\n    if(parseInt) return parseInt(numStr, base);\n    else if(Number.parseInt) return Number.parseInt(numStr, base);\n    else if(window && window.parseInt) return window.parseInt(numStr, base);\n    else throw new Error(\"parseInt, Number.parseInt, window.parseInt are not supported\")\n}","export default function getIgnoreAttributesFn(ignoreAttributes) {\n    if (typeof ignoreAttributes === 'function') {\n        return ignoreAttributes\n    }\n    if (Array.isArray(ignoreAttributes)) {\n        return (attrName) => {\n            for (const pattern of ignoreAttributes) {\n                if (typeof pattern === 'string' && attrName === pattern) {\n                    return true\n                }\n                if (pattern instanceof RegExp && pattern.test(attrName)) {\n                    return true\n                }\n            }\n        }\n    }\n    return () => false\n}","'use strict';\n///@ts-check\n\nimport {getAllMatches, isExist} from '../util.js';\nimport xmlNode from './xmlNode.js';\nimport readDocType from './DocTypeReader.js';\nimport toNumber from \"strnum\";\nimport getIgnoreAttributesFn from \"../ignoreAttributes.js\";\n\n// const regx =\n//   '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n//   .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\nexport default class OrderedObjParser{\n  constructor(options){\n    this.options = options;\n    this.currentNode = null;\n    this.tagsNodeStack = [];\n    this.docTypeEntities = {};\n    this.lastEntities = {\n      \"apos\" : { regex: /&(apos|#39|#x27);/g, val : \"'\"},\n      \"gt\" : { regex: /&(gt|#62|#x3E);/g, val : \">\"},\n      \"lt\" : { regex: /&(lt|#60|#x3C);/g, val : \"<\"},\n      \"quot\" : { regex: /&(quot|#34|#x22);/g, val : \"\\\"\"},\n    };\n    this.ampEntity = { regex: /&(amp|#38|#x26);/g, val : \"&\"};\n    this.htmlEntities = {\n      \"space\": { regex: /&(nbsp|#160);/g, val: \" \" },\n      // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n      // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n      // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n      // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n      // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n      \"cent\" : { regex: /&(cent|#162);/g, val: \"¢\" },\n      \"pound\" : { regex: /&(pound|#163);/g, val: \"£\" },\n      \"yen\" : { regex: /&(yen|#165);/g, val: \"¥\" },\n      \"euro\" : { regex: /&(euro|#8364);/g, val: \"€\" },\n      \"copyright\" : { regex: /&(copy|#169);/g, val: \"©\" },\n      \"reg\" : { regex: /&(reg|#174);/g, val: \"®\" },\n      \"inr\" : { regex: /&(inr|#8377);/g, val: \"₹\" },\n      \"num_dec\": { regex: /&#([0-9]{1,7});/g, val : (_, str) => String.fromCodePoint(Number.parseInt(str, 10)) },\n      \"num_hex\": { regex: /&#x([0-9a-fA-F]{1,6});/g, val : (_, str) => String.fromCodePoint(Number.parseInt(str, 16)) },\n    };\n    this.addExternalEntities = addExternalEntities;\n    this.parseXml = parseXml;\n    this.parseTextData = parseTextData;\n    this.resolveNameSpace = resolveNameSpace;\n    this.buildAttributesMap = buildAttributesMap;\n    this.isItStopNode = isItStopNode;\n    this.replaceEntitiesValue = replaceEntitiesValue;\n    this.readStopNodeData = readStopNodeData;\n    this.saveTextToParentTag = saveTextToParentTag;\n    this.addChild = addChild;\n    this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)\n  }\n\n}\n\nfunction addExternalEntities(externalEntities){\n  const entKeys = Object.keys(externalEntities);\n  for (let i = 0; i < entKeys.length; i++) {\n    const ent = entKeys[i];\n    this.lastEntities[ent] = {\n       regex: new RegExp(\"&\"+ent+\";\",\"g\"),\n       val : externalEntities[ent]\n    }\n  }\n}\n\n/**\n * @param {string} val\n * @param {string} tagName\n * @param {string} jPath\n * @param {boolean} dontTrim\n * @param {boolean} hasAttributes\n * @param {boolean} isLeafNode\n * @param {boolean} escapeEntities\n */\nfunction parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n  if (val !== undefined) {\n    if (this.options.trimValues && !dontTrim) {\n      val = val.trim();\n    }\n    if(val.length > 0){\n      if(!escapeEntities) val = this.replaceEntitiesValue(val);\n      \n      const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode);\n      if(newval === null || newval === undefined){\n        //don't parse\n        return val;\n      }else if(typeof newval !== typeof val || newval !== val){\n        //overwrite\n        return newval;\n      }else if(this.options.trimValues){\n        return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n      }else{\n        const trimmedVal = val.trim();\n        if(trimmedVal === val){\n          return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n        }else{\n          return val;\n        }\n      }\n    }\n  }\n}\n\nfunction resolveNameSpace(tagname) {\n  if (this.options.removeNSPrefix) {\n    const tags = tagname.split(':');\n    const prefix = tagname.charAt(0) === '/' ? '/' : '';\n    if (tags[0] === 'xmlns') {\n      return '';\n    }\n    if (tags.length === 2) {\n      tagname = prefix + tags[1];\n    }\n  }\n  return tagname;\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])([\\\\s\\\\S]*?)\\\\3)?', 'gm');\n\nfunction buildAttributesMap(attrStr, jPath, tagName) {\n  if (this.options.ignoreAttributes !== true && typeof attrStr === 'string') {\n    // attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n    //attrStr = attrStr || attrStr.trim();\n\n    const matches = getAllMatches(attrStr, attrsRegx);\n    const len = matches.length; //don't make it inline\n    const attrs = {};\n    for (let i = 0; i < len; i++) {\n      const attrName = this.resolveNameSpace(matches[i][1]);\n      if (this.ignoreAttributesFn(attrName, jPath)) {\n        continue\n      }\n      let oldVal = matches[i][4];\n      let aName = this.options.attributeNamePrefix + attrName;\n      if (attrName.length) {\n        if (this.options.transformAttributeName) {\n          aName = this.options.transformAttributeName(aName);\n        }\n        if(aName === \"__proto__\") aName  = \"#__proto__\";\n        if (oldVal !== undefined) {\n          if (this.options.trimValues) {\n            oldVal = oldVal.trim();\n          }\n          oldVal = this.replaceEntitiesValue(oldVal);\n          const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);\n          if(newVal === null || newVal === undefined){\n            //don't parse\n            attrs[aName] = oldVal;\n          }else if(typeof newVal !== typeof oldVal || newVal !== oldVal){\n            //overwrite\n            attrs[aName] = newVal;\n          }else{\n            //parse\n            attrs[aName] = parseValue(\n              oldVal,\n              this.options.parseAttributeValue,\n              this.options.numberParseOptions\n            );\n          }\n        } else if (this.options.allowBooleanAttributes) {\n          attrs[aName] = true;\n        }\n      }\n    }\n    if (!Object.keys(attrs).length) {\n      return;\n    }\n    if (this.options.attributesGroupName) {\n      const attrCollection = {};\n      attrCollection[this.options.attributesGroupName] = attrs;\n      return attrCollection;\n    }\n    return attrs\n  }\n}\n\nconst parseXml = function(xmlData) {\n  xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\"); //TODO: remove this line\n  const xmlObj = new xmlNode('!xml');\n  let currentNode = xmlObj;\n  let textData = \"\";\n  let jPath = \"\";\n  for(let i=0; i< xmlData.length; i++){//for each char in XML data\n    const ch = xmlData[i];\n    if(ch === '<'){\n      // const nextIndex = i+1;\n      // const _2ndChar = xmlData[nextIndex];\n      if( xmlData[i+1] === '/') {//Closing Tag\n        const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\")\n        let tagName = xmlData.substring(i+2,closeIndex).trim();\n\n        if(this.options.removeNSPrefix){\n          const colonIndex = tagName.indexOf(\":\");\n          if(colonIndex !== -1){\n            tagName = tagName.substr(colonIndex+1);\n          }\n        }\n\n        if(this.options.transformTagName) {\n          tagName = this.options.transformTagName(tagName);\n        }\n\n        if(currentNode){\n          textData = this.saveTextToParentTag(textData, currentNode, jPath);\n        }\n\n        //check if last tag of nested tag was unpaired tag\n        const lastTagName = jPath.substring(jPath.lastIndexOf(\".\")+1);\n        if(tagName && this.options.unpairedTags.indexOf(tagName) !== -1 ){\n          throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`);\n        }\n        let propIndex = 0\n        if(lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1 ){\n          propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.')-1)\n          this.tagsNodeStack.pop();\n        }else{\n          propIndex = jPath.lastIndexOf(\".\");\n        }\n        jPath = jPath.substring(0, propIndex);\n\n        currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope\n        textData = \"\";\n        i = closeIndex;\n      } else if( xmlData[i+1] === '?') {\n\n        let tagData = readTagExp(xmlData,i, false, \"?>\");\n        if(!tagData) throw new Error(\"Pi Tag is not closed.\");\n\n        textData = this.saveTextToParentTag(textData, currentNode, jPath);\n        if( (this.options.ignoreDeclaration && tagData.tagName === \"?xml\") || this.options.ignorePiTags){\n\n        }else{\n  \n          const childNode = new xmlNode(tagData.tagName);\n          childNode.add(this.options.textNodeName, \"\");\n          \n          if(tagData.tagName !== tagData.tagExp && tagData.attrExpPresent){\n            childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);\n          }\n          this.addChild(currentNode, childNode, jPath, i);\n        }\n\n\n        i = tagData.closeIndex + 1;\n      } else if(xmlData.substr(i + 1, 3) === '!--') {\n        const endIndex = findClosingIndex(xmlData, \"-->\", i+4, \"Comment is not closed.\")\n        if(this.options.commentPropName){\n          const comment = xmlData.substring(i + 4, endIndex - 2);\n\n          textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n          currentNode.add(this.options.commentPropName, [ { [this.options.textNodeName] : comment } ]);\n        }\n        i = endIndex;\n      } else if( xmlData.substr(i + 1, 2) === '!D') {\n        const result = readDocType(xmlData, i);\n        this.docTypeEntities = result.entities;\n        i = result.i;\n      }else if(xmlData.substr(i + 1, 2) === '![') {\n        const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n        const tagExp = xmlData.substring(i + 9,closeIndex);\n\n        textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n        let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n        if(val == undefined) val = \"\";\n\n        //cdata should be set even if it is 0 length string\n        if(this.options.cdataPropName){\n          currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]);\n        }else{\n          currentNode.add(this.options.textNodeName, val);\n        }\n        \n        i = closeIndex + 2;\n      }else {//Opening tag\n        let result = readTagExp(xmlData,i, this.options.removeNSPrefix);\n        let tagName= result.tagName;\n        const rawTagName = result.rawTagName;\n        let tagExp = result.tagExp;\n        let attrExpPresent = result.attrExpPresent;\n        let closeIndex = result.closeIndex;\n\n        if (this.options.transformTagName) {\n          tagName = this.options.transformTagName(tagName);\n        }\n        \n        //save text as child node\n        if (currentNode && textData) {\n          if(currentNode.tagname !== '!xml'){\n            //when nested tag is found\n            textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n          }\n        }\n\n        //check if last tag was unpaired tag\n        const lastTag = currentNode;\n        if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){\n          currentNode = this.tagsNodeStack.pop();\n          jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n        }\n        if(tagName !== xmlObj.tagname){\n          jPath += jPath ? \".\" + tagName : tagName;\n        }\n        const startIndex = i;\n        if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {\n          let tagContent = \"\";\n          //self-closing tag\n          if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n            if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n              tagName = tagName.substr(0, tagName.length - 1);\n              jPath = jPath.substr(0, jPath.length - 1);\n              tagExp = tagName;\n            }else{\n              tagExp = tagExp.substr(0, tagExp.length - 1);\n            }\n            i = result.closeIndex;\n          }\n          //unpaired tag\n          else if(this.options.unpairedTags.indexOf(tagName) !== -1){\n            \n            i = result.closeIndex;\n          }\n          //normal tag\n          else{\n            //read until closing tag is found\n            const result = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n            if(!result) throw new Error(`Unexpected end of ${rawTagName}`);\n            i = result.i;\n            tagContent = result.tagContent;\n          }\n\n          const childNode = new xmlNode(tagName);\n\n          if(tagName !== tagExp && attrExpPresent){\n            childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n          }\n          if(tagContent) {\n            tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);\n          }\n          \n          jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n          childNode.add(this.options.textNodeName, tagContent);\n          \n          this.addChild(currentNode, childNode, jPath, startIndex);\n        }else{\n  //selfClosing tag\n          if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n            if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n              tagName = tagName.substr(0, tagName.length - 1);\n              jPath = jPath.substr(0, jPath.length - 1);\n              tagExp = tagName;\n            }else{\n              tagExp = tagExp.substr(0, tagExp.length - 1);\n            }\n            \n            if(this.options.transformTagName) {\n              tagName = this.options.transformTagName(tagName);\n            }\n\n            const childNode = new xmlNode(tagName);\n            if(tagName !== tagExp && attrExpPresent){\n              childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n            }\n            this.addChild(currentNode, childNode, jPath, startIndex);\n            jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n          }\n    //opening tag\n          else{\n            const childNode = new xmlNode( tagName);\n            this.tagsNodeStack.push(currentNode);\n            \n            if(tagName !== tagExp && attrExpPresent){\n              childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n            }\n            this.addChild(currentNode, childNode, jPath, startIndex);\n            currentNode = childNode;\n          }\n          textData = \"\";\n          i = closeIndex;\n        }\n      }\n    }else{\n      textData += xmlData[i];\n    }\n  }\n  return xmlObj.child;\n}\n\nfunction addChild(currentNode, childNode, jPath, startIndex){\n  // unset startIndex if not requested\n  if (!this.options.captureMetaData) startIndex = undefined;\n  const result = this.options.updateTag(childNode.tagname, jPath, childNode[\":@\"])\n  if(result === false){\n  } else if(typeof result === \"string\"){\n    childNode.tagname = result\n    currentNode.addChild(childNode, startIndex);\n  }else{\n    currentNode.addChild(childNode, startIndex);\n  }\n}\n\nconst replaceEntitiesValue = function(val){\n\n  if(this.options.processEntities){\n    for(let entityName in this.docTypeEntities){\n      const entity = this.docTypeEntities[entityName];\n      val = val.replace( entity.regx, entity.val);\n    }\n    for(let entityName in this.lastEntities){\n      const entity = this.lastEntities[entityName];\n      val = val.replace( entity.regex, entity.val);\n    }\n    if(this.options.htmlEntities){\n      for(let entityName in this.htmlEntities){\n        const entity = this.htmlEntities[entityName];\n        val = val.replace( entity.regex, entity.val);\n      }\n    }\n    val = val.replace( this.ampEntity.regex, this.ampEntity.val);\n  }\n  return val;\n}\nfunction saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {\n  if (textData) { //store previously collected data as textNode\n    if(isLeafNode === undefined) isLeafNode = currentNode.child.length === 0\n    \n    textData = this.parseTextData(textData,\n      currentNode.tagname,\n      jPath,\n      false,\n      currentNode[\":@\"] ? Object.keys(currentNode[\":@\"]).length !== 0 : false,\n      isLeafNode);\n\n    if (textData !== undefined && textData !== \"\")\n      currentNode.add(this.options.textNodeName, textData);\n    textData = \"\";\n  }\n  return textData;\n}\n\n//TODO: use jPath to simplify the logic\n/**\n * \n * @param {string[]} stopNodes \n * @param {string} jPath\n * @param {string} currentTagName \n */\nfunction isItStopNode(stopNodes, jPath, currentTagName){\n  const allNodesExp = \"*.\" + currentTagName;\n  for (const stopNodePath in stopNodes) {\n    const stopNodeExp = stopNodes[stopNodePath];\n    if( allNodesExp === stopNodeExp || jPath === stopNodeExp  ) return true;\n  }\n  return false;\n}\n\n/**\n * Returns the tag Expression and where it is ending handling single-double quotes situation\n * @param {string} xmlData \n * @param {number} i starting index\n * @returns \n */\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\"){\n  let attrBoundary;\n  let tagExp = \"\";\n  for (let index = i; index < xmlData.length; index++) {\n    let ch = xmlData[index];\n    if (attrBoundary) {\n        if (ch === attrBoundary) attrBoundary = \"\";//reset\n    } else if (ch === '\"' || ch === \"'\") {\n        attrBoundary = ch;\n    } else if (ch === closingChar[0]) {\n      if(closingChar[1]){\n        if(xmlData[index + 1] === closingChar[1]){\n          return {\n            data: tagExp,\n            index: index\n          }\n        }\n      }else{\n        return {\n          data: tagExp,\n          index: index\n        }\n      }\n    } else if (ch === '\\t') {\n      ch = \" \"\n    }\n    tagExp += ch;\n  }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg){\n  const closingIndex = xmlData.indexOf(str, i);\n  if(closingIndex === -1){\n    throw new Error(errMsg)\n  }else{\n    return closingIndex + str.length - 1;\n  }\n}\n\nfunction readTagExp(xmlData,i, removeNSPrefix, closingChar = \">\"){\n  const result = tagExpWithClosingIndex(xmlData, i+1, closingChar);\n  if(!result) return;\n  let tagExp = result.data;\n  const closeIndex = result.index;\n  const separatorIndex = tagExp.search(/\\s/);\n  let tagName = tagExp;\n  let attrExpPresent = true;\n  if(separatorIndex !== -1){//separate tag name and attributes expression\n    tagName = tagExp.substring(0, separatorIndex);\n    tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n  }\n\n  const rawTagName = tagName;\n  if(removeNSPrefix){\n    const colonIndex = tagName.indexOf(\":\");\n    if(colonIndex !== -1){\n      tagName = tagName.substr(colonIndex+1);\n      attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n    }\n  }\n\n  return {\n    tagName: tagName,\n    tagExp: tagExp,\n    closeIndex: closeIndex,\n    attrExpPresent: attrExpPresent,\n    rawTagName: rawTagName,\n  }\n}\n/**\n * find paired tag for a stop node\n * @param {string} xmlData \n * @param {string} tagName \n * @param {number} i \n */\nfunction readStopNodeData(xmlData, tagName, i){\n  const startIndex = i;\n  // Starting at 1 since we already have an open tag\n  let openTagCount = 1;\n\n  for (; i < xmlData.length; i++) {\n    if( xmlData[i] === \"<\"){ \n      if (xmlData[i+1] === \"/\") {//close tag\n          const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n          let closeTagName = xmlData.substring(i+2,closeIndex).trim();\n          if(closeTagName === tagName){\n            openTagCount--;\n            if (openTagCount === 0) {\n              return {\n                tagContent: xmlData.substring(startIndex, i),\n                i : closeIndex\n              }\n            }\n          }\n          i=closeIndex;\n        } else if(xmlData[i+1] === '?') { \n          const closeIndex = findClosingIndex(xmlData, \"?>\", i+1, \"StopNode is not closed.\")\n          i=closeIndex;\n        } else if(xmlData.substr(i + 1, 3) === '!--') { \n          const closeIndex = findClosingIndex(xmlData, \"-->\", i+3, \"StopNode is not closed.\")\n          i=closeIndex;\n        } else if(xmlData.substr(i + 1, 2) === '![') { \n          const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n          i=closeIndex;\n        } else {\n          const tagData = readTagExp(xmlData, i, '>')\n\n          if (tagData) {\n            const openTagName = tagData && tagData.tagName;\n            if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== \"/\") {\n              openTagCount++;\n            }\n            i=tagData.closeIndex;\n          }\n        }\n      }\n  }//end for loop\n}\n\nfunction parseValue(val, shouldParse, options) {\n  if (shouldParse && typeof val === 'string') {\n    //console.log(options)\n    const newval = val.trim();\n    if(newval === 'true' ) return true;\n    else if(newval === 'false' ) return false;\n    else return toNumber(val, options);\n  } else {\n    if (isExist(val)) {\n      return val;\n    } else {\n      return '';\n    }\n  }\n}\n","'use strict';\n\nimport XmlNode from './xmlNode.js';\n\nconst METADATA_SYMBOL = XmlNode.getMetaDataSymbol();\n\n/**\n * \n * @param {array} node \n * @param {any} options \n * @returns \n */\nexport default function prettify(node, options){\n  return compress( node, options);\n}\n\n/**\n * \n * @param {array} arr \n * @param {object} options \n * @param {string} jPath \n * @returns object\n */\nfunction compress(arr, options, jPath){\n  let text;\n  const compressedObj = {};\n  for (let i = 0; i < arr.length; i++) {\n    const tagObj = arr[i];\n    const property = propName(tagObj);\n    let newJpath = \"\";\n    if(jPath === undefined) newJpath = property;\n    else newJpath = jPath + \".\" + property;\n\n    if(property === options.textNodeName){\n      if(text === undefined) text = tagObj[property];\n      else text += \"\" + tagObj[property];\n    }else if(property === undefined){\n      continue;\n    }else if(tagObj[property]){\n      \n      let val = compress(tagObj[property], options, newJpath);\n      const isLeaf = isLeafTag(val, options);\n      if (tagObj[METADATA_SYMBOL] !== undefined) {\n        val[METADATA_SYMBOL] = tagObj[METADATA_SYMBOL]; // copy over metadata\n      }\n\n      if(tagObj[\":@\"]){\n        assignAttributes( val, tagObj[\":@\"], newJpath, options);\n      }else if(Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !options.alwaysCreateTextNode){\n        val = val[options.textNodeName];\n      }else if(Object.keys(val).length === 0){\n        if(options.alwaysCreateTextNode) val[options.textNodeName] = \"\";\n        else val = \"\";\n      }\n\n      if(compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) {\n        if(!Array.isArray(compressedObj[property])) {\n            compressedObj[property] = [ compressedObj[property] ];\n        }\n        compressedObj[property].push(val);\n      }else{\n        //TODO: if a node is not an array, then check if it should be an array\n        //also determine if it is a leaf node\n        if (options.isArray(property, newJpath, isLeaf )) {\n          compressedObj[property] = [val];\n        }else{\n          compressedObj[property] = val;\n        }\n      }\n    }\n    \n  }\n  // if(text && text.length > 0) compressedObj[options.textNodeName] = text;\n  if(typeof text === \"string\"){\n    if(text.length > 0) compressedObj[options.textNodeName] = text;\n  }else if(text !== undefined) compressedObj[options.textNodeName] = text;\n  return compressedObj;\n}\n\nfunction propName(obj){\n  const keys = Object.keys(obj);\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i];\n    if(key !== \":@\") return key;\n  }\n}\n\nfunction assignAttributes(obj, attrMap, jpath, options){\n  if (attrMap) {\n    const keys = Object.keys(attrMap);\n    const len = keys.length; //don't make it inline\n    for (let i = 0; i < len; i++) {\n      const atrrName = keys[i];\n      if (options.isArray(atrrName, jpath + \".\" + atrrName, true, true)) {\n        obj[atrrName] = [ attrMap[atrrName] ];\n      } else {\n        obj[atrrName] = attrMap[atrrName];\n      }\n    }\n  }\n}\n\nfunction isLeafTag(obj, options){\n  const { textNodeName } = options;\n  const propCount = Object.keys(obj).length;\n  \n  if (propCount === 0) {\n    return true;\n  }\n\n  if (\n    propCount === 1 &&\n    (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)\n  ) {\n    return true;\n  }\n\n  return false;\n}\n","import { buildOptions} from './OptionsBuilder.js';\nimport OrderedObjParser from './OrderedObjParser.js';\nimport prettify from './node2json.js';\nimport {validate} from \"../validator.js\";\nimport XmlNode from './xmlNode.js';\n\nexport default class XMLParser{\n    \n    constructor(options){\n        this.externalEntities = {};\n        this.options = buildOptions(options);\n        \n    }\n    /**\n     * Parse XML dats to JS object \n     * @param {string|Buffer} xmlData \n     * @param {boolean|Object} validationOption \n     */\n    parse(xmlData,validationOption){\n        if(typeof xmlData === \"string\"){\n        }else if( xmlData.toString){\n            xmlData = xmlData.toString();\n        }else{\n            throw new Error(\"XML data is accepted in String or Bytes[] form.\")\n        }\n        if( validationOption){\n            if(validationOption === true) validationOption = {}; //validate with default options\n            \n            const result = validate(xmlData, validationOption);\n            if (result !== true) {\n              throw Error( `${result.err.msg}:${result.err.line}:${result.err.col}` )\n            }\n          }\n        const orderedObjParser = new OrderedObjParser(this.options);\n        orderedObjParser.addExternalEntities(this.externalEntities);\n        const orderedResult = orderedObjParser.parseXml(xmlData);\n        if(this.options.preserveOrder || orderedResult === undefined) return orderedResult;\n        else return prettify(orderedResult, this.options);\n    }\n\n    /**\n     * Add Entity which is not by default supported by this library\n     * @param {string} key \n     * @param {string} value \n     */\n    addEntity(key, value){\n        if(value.indexOf(\"&\") !== -1){\n            throw new Error(\"Entity value can't have '&'\")\n        }else if(key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1){\n            throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'\")\n        }else if(value === \"&\"){\n            throw new Error(\"An entity with value '&' is not permitted\");\n        }else{\n            this.externalEntities[key] = value;\n        }\n    }\n\n    /**\n     * Returns a Symbol that can be used to access the metadata\n     * property on a node.\n     * \n     * If Symbol is not available in the environment, an ordinary property is used\n     * and the name of the property is here returned.\n     * \n     * The XMLMetaData property is only present when `captureMetaData`\n     * is true in the options.\n     */\n    static getMetaDataSymbol() {\n        return XmlNode.getMetaDataSymbol();\n    }\n}\n","import fs from 'fs/promises';\nimport path, { dirname } from 'path';\nimport { XMLParser } from 'fast-xml-parser';\nimport FranchiseEnum from '../FranchiseEnum.js';\nimport utilService from './utilService.js';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Parse FTX schema files with support for IncludeFile dependencies.\n * @param {{main: string, [id:string]: string}} fileMap - { main: '/abs/path/to/main.FTX', ...otherName: '/abs/path/to/other.FTX' }\n * @param {Object[]} [extraSchemas] - Optional array of extra schemas to include. If not included, will use defaults.\n * @returns {Promise<Object>} - Parsed schema object\n */\nexport async function generateSchemaV2({ fileMap, extraSchemas }) {\n    const parsedFiles = {};\n    const enums = [];\n    const schemas = [];\n    const schemaMap = {};\n    let schemaMeta = {};\n    if (!extraSchemas || extraSchemas.length === 0) {\n        // Load extra schemas if available\n        try {\n            const extraPath = path.join(\n                __dirname,\n                '../../data/schemas/extra-schemas.json'\n            );\n            const extraRaw = await fs.readFile(extraPath, 'utf8');\n            extraSchemas = JSON.parse(extraRaw);\n        } catch {\n            // ignore if not present\n        }\n    }\n    // Recursively parse a file and its includes (async)\n    async function parseFile(fileKey) {\n        if (parsedFiles[fileKey]) return;\n        const filePath = fileMap[fileKey];\n        if (!filePath) throw new Error(`Missing file mapping for: ${fileKey}`);\n        const xml = await fs.readFile(filePath, 'utf8');\n        const parser = new XMLParser({\n            ignoreAttributes: false,\n            attributeNamePrefix: '',\n            allowBooleanAttributes: true,\n            trimValues: false\n        });\n        const doc = parser.parse(xml);\n        const root = doc.FranTkData;\n        if (!schemaMeta.databaseName && root.databaseName) {\n            schemaMeta = {\n                databaseName: root.databaseName,\n                dataMajorVersion: root.dataMajorVersion,\n                dataMinorVersion: root.dataMinorVersion\n            };\n        }\n        // Parse includes first\n        if (root.Includes && root.Includes.IncludeFile) {\n            const includes = Array.isArray(root.Includes.IncludeFile)\n                ? root.Includes.IncludeFile\n                : [root.Includes.IncludeFile];\n            for (const inc of includes) {\n                let incKey = inc.fileName.replace(/\\.FTX$/i, '');\n                if (!fileMap[incKey]) {\n                    // Try all lowercase\n                    incKey = incKey.toLowerCase();\n                    if (!fileMap[incKey]) {\n                        console.warn(\n                            `schemaGeneratorV2: Missing file mapping for include: ${incKey} in ${fileKey}`\n                        );\n                        continue; // Suppress missing include mapping\n                    }\n                }\n                await parseFile(incKey);\n            }\n        }\n        // Parse enums and schemas\n        if (root.schemas) {\n            const items = Object.entries(root.schemas).flatMap(([tag, val]) =>\n                Array.isArray(val)\n                    ? val.map((v) => ({ tag, ...v }))\n                    : [{ tag, ...val }]\n            );\n            for (const item of items) {\n                if (item.tag === 'enum') {\n                    const theEnum = new FranchiseEnum(\n                        item.name,\n                        item.assetId,\n                        item.isRecordPersistent\n                    );\n                    theEnum._members = [];\n                    if (item.attribute) {\n                        const members = Array.isArray(item.attribute)\n                            ? item.attribute\n                            : [item.attribute];\n                        for (const attr of members) {\n                            theEnum.addMember &&\n                                theEnum.addMember(\n                                    attr.name,\n                                    attr.idx,\n                                    attr.value\n                                );\n                        }\n                    }\n                    enums.push(theEnum);\n                } else if (item.tag === 'schema') {\n                    const schema = {\n                        assetId: item.assetId,\n                        ownerAssetId: item.ownerAssetId,\n                        numMembers: item.numMembers,\n                        name: item.name,\n                        base: item.base,\n                        attributes: []\n                    };\n                    if (item.attribute) {\n                        const attrs = Array.isArray(item.attribute)\n                            ? item.attribute\n                            : [item.attribute];\n                        for (const attr of attrs) {\n                            schema.attributes.push(parseAttribute(attr));\n                        }\n                    }\n                    schemas.push(schema);\n                    schemaMap[schema.name] = schema;\n                }\n            }\n        }\n        parsedFiles[fileKey] = true;\n    }\n    // Attribute parsing logic (copied from schemaGenerator.js)\n    function parseAttribute(attributeAttributes) {\n        return {\n            index: attributeAttributes.idx,\n            name: attributeAttributes.name,\n            type: attributeAttributes.type,\n            minValue: attributeAttributes.minValue,\n            maxValue: attributeAttributes.maxValue,\n            maxLength: attributeAttributes.maxLen,\n            default: getDefaultValue(attributeAttributes.default),\n            final: attributeAttributes.final,\n            enum: getEnum(attributeAttributes.type),\n            const: attributeAttributes.const\n        };\n        function getDefaultValue(defaultVal) {\n            if (!defaultVal) {\n                return undefined;\n            }\n            // Only replace XML entities, do not trim or modify whitespace at all\n            return defaultVal\n                .replace(/&#xD;/g, '\\r')\n                .replace(/&#xA;/g, '\\n')\n                .replace(/&amp;/g, '&')\n                .replace(/&gt;/g, '>')\n                .replace(/&lt;/g, '<')\n                .replace(/&quot;/g, '\"');\n        }\n    }\n    function getEnum(name) {\n        return enums.find((theEnum) => theEnum.name === name);\n    }\n    function addExtraSchemas() {\n        if (!Array.isArray(extraSchemas)) return;\n        extraSchemas.forEach((schema) => {\n            if (!schemaMap[schema.name]) {\n                schema.attributes\n                    .filter((attrib) => {\n                        return (\n                            attrib.enum &&\n                            !(attrib.enum instanceof FranchiseEnum)\n                        );\n                    })\n                    .forEach((attrib) => {\n                        attrib.enum = getEnum(attrib.enum);\n                    });\n                schemas.unshift(schema);\n            }\n        });\n    }\n    function calculateInheritedSchemas(schemaList) {\n        const schemasWithBase = schemaList.filter(\n            (schema) => schema.base && schema.base.indexOf('()') === -1\n        );\n        schemasWithBase.forEach((schema) => {\n            if (schema.base && schema.base.indexOf('()') === -1) {\n                schema.originalAttributesOrder = schema.attributes;\n                const baseSchema = schemaList.find(\n                    (schemaToSearch) => schemaToSearch.name === schema.base\n                );\n                if (baseSchema) {\n                    baseSchema.attributes.forEach((baseAttribute, index) => {\n                        let oldIndex = schema.attributes.findIndex(\n                            (schemaAttribute) =>\n                                schemaAttribute?.name === baseAttribute?.name\n                        );\n                        utilService.arrayMove(\n                            schema.attributes,\n                            oldIndex,\n                            index\n                        );\n                    });\n                }\n            }\n        });\n    }\n    await parseFile('main');\n    addExtraSchemas();\n    calculateInheritedSchemas(schemas);\n    // Set enum member lengths if needed\n    enums.forEach((e) => e.setMemberLength && e.setMemberLength());\n    // Extract gameYear from databaseName\n    const majorVersion = schemaMeta.dataMajorVersion;\n    const minorVersion = schemaMeta.dataMinorVersion;\n    const databaseName = schemaMeta.databaseName;\n    const gameYearMatch = /Madden(\\d{2})/.exec(databaseName);\n    const gameYear = gameYearMatch ? parseInt(gameYearMatch[1]) : null;\n    const root = {\n        meta: {\n            major: parseInt(majorVersion),\n            minor: parseInt(minorVersion),\n            gameYear\n        },\n        schemas,\n        schemaMap\n    };\n    // Return the plain object\n    return root;\n}\n","import fs from 'fs';\nimport path from 'path';\nimport zlib from 'zlib';\nimport FranchiseEnum from './FranchiseEnum.js';\nimport events from 'events';\nimport schemaGenerator from './services/schemaGenerator.js';\nimport { generateSchemaV2 } from './services/schemaGeneratorV2.js';\nconst EventEmitter = events.EventEmitter;\n/**\n * @typedef SchemaAttribute\n * @property {string} index\n * @property {string} name\n * @property {string} type\n * @property {string} minValue\n * @property {string} maxValue\n * @property {string} maxLength\n * @property {string} default\n * @property {string} final\n * @property {FranchiseEnum?} [enum]\n * @property {string}\n */\n/**\n * @typedef TableSchema\n * @property {number} assetId\n * @property {number} ownerAssetId\n * @property {number} numMembers\n * @property {string} name\n * @property {string} base\n * @property {Array<SchemaAttribute>} attributes\n */\nclass FranchiseSchema extends EventEmitter {\n    constructor(\n        filePath,\n        { useNewSchemaGeneration = false, extraSchemas = [], fileMap = {} } = {}\n    ) {\n        super();\n        this.schemas = [];\n        this.path = filePath;\n        this.useNewSchemaGeneration = useNewSchemaGeneration;\n        this.extraSchemas = extraSchemas;\n        this.fileMap = fileMap;\n    }\n    evaluate() {\n        const fileExtension = path.extname(this.path).toLowerCase();\n        switch (fileExtension) {\n            case '.gz':\n                // const schemaFile = fs.readFileSync(this.path);\n                this.evaluateSchemaGzip(this.path);\n                break;\n            case '.ftx':\n            case '.xml':\n                this.evaluateSchemaXml();\n                break;\n            default:\n                throw new Error(\n                    'Invalid schema. Please make sure your schema file is of correct format (.gz, .xml, or .ftx).'\n                );\n        }\n    }\n    getSchema(name) {\n        // return this.schemas.find((schema) => { return schema.name === name; });\n        return this.schemaMap[name];\n    }\n    getEnum(name) {\n        return this.enums.find((theEnum) => {\n            return theEnum.name === name;\n        });\n    }\n    evaluateSchemaGzip() {\n        const schemaFile = fs.readFileSync(this.path);\n        const uncompressed = zlib.gunzipSync(schemaFile);\n        this.schema = JSON.parse(uncompressed.toString());\n        this.meta = this.schema.meta;\n        this.schemas = this.schema.schemas;\n        this.schemaMap = {};\n        this.enumMap = {};\n        for (let i = 0; i < this.schemas.length; i++) {\n            const schema = this.schemas[i];\n            this.schemaMap[schema.name] = schema;\n            for (let j = 0; j < schema.attributes.length; j++) {\n                const attribute = schema.attributes[j];\n                if (attribute.enum) {\n                    attribute.enum = new FranchiseEnum(attribute.enum);\n                    this.enumMap[attribute.enum.name] = attribute.enum;\n                }\n            }\n        }\n        let addedExtraSchema = false;\n        const extraSchemas = schemaGenerator.getExtraSchemas();\n        extraSchemas.forEach((schema) => {\n            if (!this.schemaMap[schema.name]) {\n                schema.attributes.forEach((attrib) => {\n                    if (attrib.enum) {\n                        attrib.enum = new FranchiseEnum(\n                            this.enumMap[attrib.enum]\n                        );\n                    }\n                });\n                this.schemas.unshift(schema);\n                this.schemaMap[schema.name] = schema;\n                addedExtraSchema = true;\n            }\n        });\n        if (addedExtraSchema) {\n            schemaGenerator.calculateInheritedSchemas(this.schemas);\n        }\n        this.emit('schemas:done');\n    }\n    evaluateSchemaXml() {\n        if (this.useNewSchemaGeneration) {\n            generateSchemaV2({\n                fileMap: this.fileMap,\n                extraSchemas: this.extraSchemas\n            }).then((schema) => {\n                this.schema = schema;\n                this.meta = schema.meta;\n                this.schemas = schema.schemas;\n                this.schemaMap = schema.schemaMap;\n                this.emit('schemas:done');\n            });\n        } else {\n            schemaGenerator.eventEmitter.on('schemas:done', (schema) => {\n                this.schema = schema;\n                this.meta = schema.meta;\n                this.schemas = schema.schemas;\n                this.schemaMap = schema.schemaMap;\n                this.emit('schemas:done');\n            });\n            schemaGenerator.generate(this.path);\n        }\n    }\n}\nexport default FranchiseSchema;\n","/**\n * @typedef {import('./FranchiseFileTable').default} FranchiseFileTable\n * @typedef {import('./FranchiseFileField').default} FranchiseFileField\n * @typedef {import('./strategies/StrategyPicker').Table2FieldStrategy} Table2FieldStrategy\n */\n\nclass FranchiseFileTable2Field {\n    /** @param {number} index @param {number} maxLength @param {FranchiseFileTable} parent */\n    constructor(index, maxLength, parent) {\n        /** @private */\n        this._value = '';\n        /** @type {number} */\n        this.rawIndex = index;\n        this.isChanged = false;\n        this.maxLength = maxLength;\n        /** @type {FranchiseFileField} */\n        this.fieldReference = null;\n        /** @type {number} */\n        this.lengthAtLastSave = null;\n        /** @private */\n        this._unformattedValue = null;\n        this.index = index;\n        this._offset = this.index;\n        this._parent = parent;\n    }\n    get unformattedValue() {\n        return this._unformattedValue;\n    }\n    set unformattedValue(value) {\n        this._unformattedValue = value;\n        if (this.lengthAtLastSave === null) {\n            this.lengthAtLastSave = getLengthOfUnformattedValue(\n                this._unformattedValue\n            );\n        }\n        this._value = null;\n        if (this._parent) {\n            this._parent.onEvent('change', this);\n        }\n    }\n    get value() {\n        if (this._value === null) {\n            this._value = this._unformattedValue\n                .toString()\n                .replace(/\\0.*$/g, '');\n        }\n        return this._value;\n    }\n    set value(value) {\n        this._value = value;\n        if (value.length > this.maxLength) {\n            value = value.substring(0, this.maxLength);\n        }\n        this._unformattedValue =\n            this._strategy.setUnformattedValueFromFormatted(\n                value,\n                this.maxLength\n            );\n        if (this.lengthAtLastSave === null) {\n            this.lengthAtLastSave = getLengthOfUnformattedValue(\n                this._unformattedValue\n            );\n        }\n        this._parent.onEvent('change', this);\n    }\n    get hexData() {\n        return this._unformattedValue;\n    }\n    /** @type {Table2FieldStrategy} */\n    get strategy() {\n        return this._strategy;\n    }\n    /** @param {Table2FieldStrategy} strategy */\n    set strategy(strategy) {\n        this._strategy = strategy;\n    }\n    /** @returns {number} */\n    get offset() {\n        return this._offset;\n    }\n    /** @param {number} offset */\n    set offset(offset) {\n        const offsetChanged = this._offset !== offset;\n        this._offset = offset;\n        this.index = offset;\n        if (offsetChanged && this.fieldReference) {\n            this.fieldReference.unformattedValue.setBits(\n                this.fieldReference.offset.offset,\n                offset,\n                32\n            );\n            this.fieldReference.isChanged = true;\n            this.fieldReference._bubbleChangeToParent();\n        }\n    }\n    get parent() {\n        return this._parent;\n    }\n    /** @param {FranchiseFileTable} parent */\n    set parent(parent) {\n        this._parent = parent;\n    }\n}\nfunction getLengthOfUnformattedValue(value) {\n    return value.length;\n}\nexport default FranchiseFileTable2Field;\n","import utilService from './services/utilService.js';\nconst emptyRef = '00000000000000000000000000000000';\n\n/**\n * @typedef {import('./FranchiseFileTable').default} FranchiseFileTable\n * @typedef {import('./FranchiseFileField').default} FranchiseFileField\n * @typedef {import('./strategies/StrategyPicker').Table3FieldStrategy} Table3FieldStrategy\n */\n\nclass FranchiseFileTable3Field {\n    /** @param {number} index @param {number} maxLength @param {FranchiseFileTable} parent */\n    constructor(index, maxLength, parent) {\n        /** @private */\n        this._value = '';\n        /** @type {number} */\n        this.rawIndex = index;\n        this.isChanged = false;\n        this.maxLength = maxLength;\n        /** @type {FranchiseFileField} */\n        this.fieldReference = null;\n        /** @type {number} */\n        this.lengthAtLastSave = null;\n        /** @private */\n        this._unformattedValue = null;\n        this.index = index;\n        this._offset = this.index;\n        this._parent = parent;\n    }\n    get unformattedValue() {\n        return this._unformattedValue;\n    }\n    set unformattedValue(value) {\n        this._unformattedValue = value;\n        if (this.lengthAtLastSave === null) {\n            this.lengthAtLastSave = getLengthOfUnformattedValue(\n                this._unformattedValue\n            );\n        }\n        this._value = null;\n        if (this._parent) {\n            this._parent.onEvent('change', this);\n        }\n    }\n    get value() {\n        if (this._value === null) {\n            this._value = this._strategy.getFormattedValueFromUnformatted(\n                this._unformattedValue\n            );\n        }\n        return this._value;\n    }\n    set value(value) {\n        this._value = value;\n\n        // Attempt to set the unformatted value normally using the strategy\n        // If the new unformatted value is too big, utilize an overflow record for the excess data\n        // Otherwise, clear the overflow reference\n        let newUnformattedValue =\n            this._strategy.setUnformattedValueFromFormatted(\n                value,\n                this._unformattedValue,\n                this.maxLength\n            );\n        if (newUnformattedValue.length > this.maxLength + 2) {\n            // Get the portion of data that we will be writing to the current record's field\n            newUnformattedValue =\n                this.populateOverflowRecord(newUnformattedValue);\n        } else {\n            this.clearOverflowRecord();\n        }\n        this._unformattedValue = newUnformattedValue;\n        if (this.lengthAtLastSave === null) {\n            this.lengthAtLastSave = getLengthOfUnformattedValue(\n                this._unformattedValue\n            );\n        }\n        this._parent.onEvent('change', this);\n    }\n    get hexData() {\n        return this._unformattedValue;\n    }\n    /** @type {Table3FieldStrategy} */\n    get strategy() {\n        return this._strategy;\n    }\n    /** @param {Table3FieldStrategy} strategy */\n    set strategy(strategy) {\n        this._strategy = strategy;\n    }\n    /** @returns {number} */\n    get offset() {\n        return this._offset;\n    }\n    /** @param {number} offset */\n    set offset(offset) {\n        this._offset = offset;\n        this.index = offset;\n        if (this.fieldReference) {\n            this.fieldReference.unformattedValue.setBits(\n                this.fieldReference.offset.offset,\n                offset,\n                32\n            );\n        }\n    }\n    get parent() {\n        return this._parent;\n    }\n    /** @param {FranchiseFileTable} parent */\n    set parent(parent) {\n        this._parent = parent;\n    }\n    populateOverflowRecord(newUnformattedValue) {\n        // Get the portion of data that fits within the main record\n        const mainFieldData = newUnformattedValue.slice(0, this.maxLength + 2);\n\n        // Get the extra data for the overflow record (overflow data does not include the size bytes)\n        const overflowData = newUnformattedValue.slice(this.maxLength + 2);\n\n        // Get the parent field and parent table for the current table3 field\n        const field = this.fieldReference;\n        const record = field.parent;\n        const table = record.parent;\n\n        // Get existing value of Overflow field to see if we already have an overflow record assigned\n        const overflowRecord = utilService.getTable3OverflowRecord(record);\n\n        // If the overflow record is assigned and is in this table, use it\n        if (overflowRecord) {\n            overflowRecord.getFieldByKey(\n                field.key\n            ).thirdTableField.unformattedValue = overflowData;\n        } // Otherwise, get the next available record in the table, if there is one, and assign it as the overflow record\n        else {\n            const nextRecordIndex = table.header.nextRecordToUse;\n\n            // If the table has space\n            if (nextRecordIndex != table.header.recordCapacity) {\n                // Update the Overflow reference of the current record to point to the new overflow record\n                const reference = utilService.getBinaryReferenceData(\n                    table.header.tableId,\n                    nextRecordIndex\n                );\n                field.parent.getFieldByKey('Overflow').value = reference;\n\n                // Unempty the overflow record and set the data\n                table.records[nextRecordIndex].getFieldByKey('Overflow').value =\n                    emptyRef;\n                table.records[nextRecordIndex].getFieldByKey(\n                    field.key\n                ).thirdTableField.unformattedValue = overflowData;\n            }\n        }\n\n        // Return the data to be written to the current record\n        return mainFieldData;\n    }\n\n    clearOverflowRecord() {\n        // Get the current overflow reference\n        const overflowRef =\n            this.fieldReference.parent.getFieldByKey('Overflow').value;\n\n        if (overflowRef === emptyRef) {\n            return;\n        }\n\n        const field = this.fieldReference;\n        const record = field.parent;\n\n        // If the referenced record is in the current table, clear it out and empty it\n        const overflowRecord = utilService.getTable3OverflowRecord(record);\n\n        if (overflowRecord) {\n            overflowRecord.getFieldByKey(field.key).value = {};\n            overflowRecord.empty();\n        }\n\n        // Clear the overflow reference\n        record.getFieldByKey('Overflow').value = emptyRef;\n    }\n}\nfunction getLengthOfUnformattedValue(value) {\n    return value.length;\n}\nexport default FranchiseFileTable3Field;\n","import { BitView } from 'bit-buffer';\nimport utilService from './services/utilService.js';\nimport FranchiseFileTable2Field from './FranchiseFileTable2Field.js';\nimport FranchiseFileTable3Field from './FranchiseFileTable3Field.js';\n\n/**\n * @typedef {import('bit-buffer').BitView} BitView\n * @typedef {import('./FranchiseFileTable.js').OffsetTableEntry} OffsetTableEntry\n * @typedef {import('./FranchiseFileRecord.js').default} FranchiseFileRecord\n * @typedef {import('./FranchiseEnumValue.js').default} FranchiseEnumValue\n */\nclass FranchiseFileField {\n    /** @param {string} key @param {Buffer} value @param {OffsetTableEntry} offset @param {FranchiseFileRecord} parent */\n    constructor(key, value, offset, parent) {\n        /** @private */\n        this._key = key;\n        /** @private */\n        this._recordBuffer = value;\n        /** @private */\n        this._unformattedValue = null;\n        /** @private */\n        this._offset = offset;\n        /** @private */\n        this._parent = parent;\n        /** @private */\n        this._isChanged = false;\n        if (offset.valueInSecondTable) {\n            /** @type {FranchiseFileTable2Field?} */\n            this.secondTableField = new FranchiseFileTable2Field(\n                this._recordBuffer.readUInt32BE(offset.offset / 8),\n                offset.maxLength\n            );\n            this.secondTableField.fieldReference = this;\n        }\n        if (offset.valueInThirdTable) {\n            /** @type {FranchiseFileTable3Field?} */\n            this.thirdTableField = new FranchiseFileTable3Field(\n                this._recordBuffer.readUInt32BE(offset.offset / 8),\n                offset.maxLength\n            );\n            this.thirdTableField.fieldReference = this;\n        }\n    }\n    /** @returns {string} */\n    get key() {\n        return this._key;\n    }\n    /** @returns {OffsetTableEntry} */\n    get offset() {\n        return this._offset;\n    }\n    /** @returns {*} */\n    get value() {\n        if (this._unformattedValue === null) {\n            this._setUnformattedValueIfEmpty();\n        }\n        if (this._value === null) {\n            this._value = this._parseFieldValue(\n                this._unformattedValue,\n                this._offset\n            );\n        }\n        return this._value;\n    }\n    /** @returns {boolean} */\n    get isReference() {\n        return this._offset.isReference;\n    }\n    /** @returns {RecordReference?} */\n    get referenceData() {\n        if (this._unformattedValue === null) {\n            this._setUnformattedValueIfEmpty();\n        }\n        if (this.isReference) {\n            return utilService.getReferenceDataFromBitview(\n                this._unformattedValue,\n                this.offset.offset\n            );\n        }\n        return null;\n    }\n    set value(value) {\n        if (this._unformattedValue === null) {\n            this._setUnformattedValueIfEmpty();\n        }\n        this._value = value;\n        this.isChanged = true;\n        if (this.offset.valueInSecondTable) {\n            this.secondTableField.value = value.toString();\n        } else if (this.offset.valueInThirdTable) {\n            if (typeof value === 'object') {\n                const newVal = JSON.stringify(value);\n                this._value = newVal;\n                this.thirdTableField.value = newVal;\n            } else {\n                this.thirdTableField.value = value.toString();\n            }\n        } else {\n            let actualValue;\n            if (this.offset.isReference) {\n                if (!utilService.isString(value)) {\n                    throw new Error(\n                        `Argument must be of type string. You passed in a ${typeof unformattedValue}.`\n                    );\n                } else if (!utilService.stringOnlyContainsBinaryDigits(value)) {\n                    throw new Error(\n                        `Argument must only contain binary digits 1 and 0. If you would like to set the value, please set the 'value' attribute instead.`\n                    );\n                }\n                const referenceData = utilService.getReferenceData(value);\n                this._unformattedValue.setBits(\n                    this.offset.offset,\n                    referenceData.tableId,\n                    15\n                );\n                this._unformattedValue.setBits(\n                    this.offset.offset + 15,\n                    referenceData.rowNumber,\n                    17\n                );\n            } else if (this.offset.enum) {\n                try {\n                    let theEnum = this._getEnumFromValue(value);\n                    // Enums can have negative values and Madden negative numbers are not standard. We need to convert it here.\n                    // Ex: In Madden, binary \"1000\" = -1 for an enum with a max length of 4. But for everything else, \"1000\" = 8, so we need to get the \"real\" value here.\n                    const decimalEquivalent = utilService.bin2dec(\n                        theEnum.unformattedValue\n                    );\n                    this._unformattedValue.setBits(\n                        this.offset.offset,\n                        decimalEquivalent,\n                        this.offset.length\n                    );\n                    this._value = theEnum.name;\n                } catch (err) {\n                    // if user tries entering an invalid enum value, check if it's an empty record reference (will be binary)\n                    if (utilService.stringOnlyContainsBinaryDigits(value)) {\n                        this._value = value;\n                        this._unformattedValue.setBits(\n                            this.offset.offset,\n                            value,\n                            this.offset.length\n                        );\n                    } else {\n                        this._value = null;\n                        throw err;\n                    }\n                }\n            } else {\n                switch (this.offset.type) {\n                    case 's_int':\n                        actualValue = parseInt(value);\n                        this._value = actualValue;\n                        this._unformattedValue.setBits(\n                            this.offset.offset,\n                            actualValue - this.offset.minValue,\n                            this.offset.length\n                        );\n                        break;\n                    default:\n                    case 'int':\n                        actualValue = parseInt(value);\n                        this._value = actualValue;\n                        if (this.offset.minValue || this.offset.maxValue) {\n                            // return utilService.dec2bin(formatted, offset.length);\n                            this._unformattedValue.setBits(\n                                this.offset.offset,\n                                actualValue,\n                                this.offset.length\n                            );\n                        } else {\n                            const maxValueBinary = getMaxValueBinary(\n                                this.offset\n                            );\n                            const maxValue =\n                                utilService.bin2dec(maxValueBinary);\n                            // return utilService.dec2bin(formatted + maxValue, offset.length);\n                            this._unformattedValue.setBits(\n                                this.offset.offset,\n                                actualValue + maxValue,\n                                this.offset.length\n                            );\n                        }\n                        break;\n                    case 'bool':\n                        // return (formatted == 1 || (formatted.toString().toLowerCase() == 'true')) ? '1' : '0';\n                        actualValue =\n                            value == 1 ||\n                            value.toString().toLowerCase() == 'true';\n                        this._value = actualValue;\n                        this._unformattedValue.setBits(\n                            this.offset.offset + (this.offset.length - 1),\n                            actualValue,\n                            1\n                        );\n                        break;\n                    case 'float':\n                        actualValue = parseFloat(value);\n                        this._value = actualValue;\n                        // return utilService.float2Bin(formatted);\n                        // this._unformattedValue.setBits(this.offset.offset, value, this.offset.length);\n                        this._unformattedValue.setFloat32(\n                            this.offset.offset,\n                            actualValue\n                        );\n                        break;\n                }\n            }\n            this._parent.onEvent('change', this);\n        }\n    }\n    /** @returns {BitView} */\n    get unformattedValue() {\n        if (this._unformattedValue === null) {\n            this._setUnformattedValueIfEmpty();\n        }\n        return this._unformattedValue;\n    }\n    /** @param {BitView} unformattedValue */\n    set unformattedValue(unformattedValue) {\n        this.setUnformattedValueWithoutChangeEvent(unformattedValue);\n        this._value = null;\n        this._parent.onEvent('change', this);\n    }\n    /** @returns {boolean} */\n    get isChanged() {\n        return this._isChanged;\n    }\n    /** @param {boolean} changed */\n    set isChanged(changed) {\n        this._isChanged = changed;\n    }\n    /** @returns {FranchiseFileRecord} */\n    get parent() {\n        return this._parent;\n    }\n\n    /** @param {OffsetTableEntry} offset */\n    getValueAs(offset) {\n        if (this._unformattedValue === null) {\n            this._setUnformattedValueIfEmpty();\n        }\n        return this._parseFieldValue(this._unformattedValue, offset);\n    }\n    _bubbleChangeToParent() {\n        this._parent.onEvent('change', this);\n    }\n    clearCachedValues() {\n        this._value = null;\n        this._unformattedValue = null;\n    }\n    _setUnformattedValueIfEmpty() {\n        this._value = null;\n        this._unformattedValue = new BitView(\n            this._recordBuffer,\n            this._recordBuffer.byteOffset\n        );\n        this._unformattedValue.bigEndian = true;\n    }\n    /** @param {BitView} unformattedValue */\n    setUnformattedValueWithoutChangeEvent(unformattedValue) {\n        if (!(unformattedValue instanceof BitView)) {\n            throw new Error(\n                `Argument must be of type BitView. You passed in a(n) ${typeof unformattedValue}.`\n            );\n        } else {\n            this._unformattedValue = unformattedValue;\n            this._value = null;\n        }\n    }\n    /** @returns {FranchiseEnumValue?} */\n    _getEnumFromValue(value) {\n        const enumName = this.offset.enum.getMemberByName(value);\n        if (enumName) {\n            return enumName;\n        } else {\n            const formattedEnum = this.offset.enum.getMemberByValue(value);\n            if (formattedEnum) {\n                return formattedEnum;\n            } else {\n                const unformattedEnum =\n                    this.offset.enum.getMemberByUnformattedValue(value);\n                if (unformattedEnum) {\n                    return unformattedEnum;\n                } else {\n                    return this.offset.enum.members[0];\n                }\n            }\n        }\n    }\n    /** @param {BitView} unformatted, @param {OffsetTableEntry} offset */\n    _parseFieldValue(unformatted, offset) {\n        if (offset.valueInSecondTable) {\n            return this.secondTableField.value;\n        } else if (offset.valueInThirdTable) {\n            return this.thirdTableField.value;\n        } else if (offset.enum) {\n            const enumUnformattedValue = utilService.dec2bin(\n                unformatted.getBits(offset.offset, offset.length),\n                offset.enum._maxLength\n            );\n            try {\n                const theEnum =\n                    offset.enum.getMemberByUnformattedValue(\n                        enumUnformattedValue\n                    );\n                if (theEnum) {\n                    return theEnum.name;\n                }\n            } catch {\n                // console.log(err);\n            }\n            return enumUnformattedValue;\n        } else if (offset.isReference) {\n            try {\n                const referenceData = utilService.getReferenceDataFromBitview(\n                    unformatted,\n                    offset.offset\n                );\n                return utilService.getBinaryReferenceData(\n                    referenceData.tableId,\n                    referenceData.rowNumber\n                );\n            } catch {\n                console.warn(\n                    `Tried to read ${offset.name} as a reference, but received an error.`\n                );\n                // tried to read a reference, but the offset was incorrect\n                return unformatted.getBits(offset.offset, offset.length);\n            }\n        } else {\n            switch (offset.type) {\n                case 's_int':\n                    // return utilService.bin2dec(unformatted) + offset.minValue;\n                    return (\n                        unformatted.getBits(offset.offset, offset.length) +\n                        offset.minValue\n                    );\n                case 'int':\n                    if (offset.minValue || offset.maxValue) {\n                        return unformatted.getBits(\n                            offset.offset,\n                            offset.length\n                        );\n                    } else {\n                        // This is for int[] tables.\n                        const maxValueBinary = getMaxValueBinary(offset);\n                        const maxValue = utilService.bin2dec(maxValueBinary);\n                        const newValue = unformatted.getBits(\n                            offset.offset,\n                            offset.length\n                        );\n                        if (newValue === 0) {\n                            return 0;\n                        } else {\n                            return newValue - maxValue;\n                        }\n                    }\n                case 'bool':\n                    return unformatted.getBits(\n                        offset.offset + (offset.length - 1),\n                        1\n                    )\n                        ? true\n                        : false;\n                case 'float':\n                    // return utilService.bin2Float(unformatted);\n                    return unformatted.getFloat32(offset.offset, offset.length);\n                default:\n                    return unformatted;\n            }\n        }\n    }\n}\nfunction getMaxValueBinary(offset) {\n    let maxValue = '1';\n    for (let j = 0; j < offset.length - 1; j++) {\n        maxValue += '0';\n    }\n    return maxValue;\n}\nexport default FranchiseFileField;\n","import FranchiseFileField from './FranchiseFileField.js';\n\n/**\n * @typedef {import('./FranchiseFileTable.js').OffsetTableEntry} OffsetTableEntry\n * @typedef {import('./FranchiseFileTable.js').default} FranchiseFileTable\n * @typedef {import('./FranchiseFile.js').RecordReference} RecordReference\n */\nclass FranchiseFileRecord {\n    /** @param {Buffer} data @param {number} index @param {OffsetTableEntry} offsetTable, @param {FranchiseFileTable} parent */\n    constructor(data, index, offsetTable, parent) {\n        /** @type {Buffer}  */\n        this._data = data;\n        /** @type {OffsetTableEntry} */\n        this._offsetTable = offsetTable;\n        /** @type {number} */\n        this.index = index;\n        /** @private @type {Array<FranchiseFileField>} */\n        this._fieldsArray = [];\n        /** @private @type {Record<string, FranchiseFileField>} */\n        this._fields = this.parseRecordFields();\n        this._isChanged = false;\n        /** @type {number} */\n        this.arraySize = null;\n        this.isEmpty = false;\n        /** @type {FranchiseFileTable} */\n        this._parent = parent;\n        return new Proxy(this, {\n            get: function (target, prop) {\n                return target.fields[prop] !== undefined\n                    ? target.fields[prop].value\n                    : target[prop] !== undefined\n                      ? target[prop]\n                      : null;\n            },\n            set: function (target, prop, receiver) {\n                if (target.fields[prop] !== undefined) {\n                    target.fields[prop].value = receiver;\n                } else {\n                    target[prop] = receiver;\n                }\n                return true;\n            }\n        });\n    }\n    /** @returns {Buffer} */\n    get hexData() {\n        return this._data;\n    }\n    /** @returns {Record<string, FranchiseFileField>} */\n    get fields() {\n        return this._fields;\n    }\n    /** @returns {Array<FranchiseFileField>} */\n    get fieldsArray() {\n        return this._fieldsArray;\n    }\n    /** @returns {Buffer} */\n    get data() {\n        return this._data;\n    }\n    /** @param {Buffer} data */\n    set data(data) {\n        this._data = data;\n        this._fieldsArray.forEach((field) => {\n            const unformattedValue = data.slice(\n                field.offset.offset,\n                field.offset.offset + field.offset.length\n            );\n            field.setUnformattedValueWithoutChangeEvent(unformattedValue);\n        });\n    }\n    get isChanged() {\n        return this._isChanged;\n    }\n    /** @param {boolean} changed */\n    set isChanged(changed) {\n        this._isChanged = changed;\n        if (changed === false) {\n            this.fieldsArray.forEach((field) => {\n                field.isChanged = false;\n            });\n        }\n    }\n\n    /** @returns {FranchiseFileTable} */\n    get parent() {\n        return this._parent;\n    }\n\n    /** @param {string} key @returns {FranchiseFileField?} */\n    getFieldByKey(key) {\n        return this._fields[key];\n    }\n    /** @param {string} key @returns {*?} */\n    getValueByKey(key) {\n        let field = this.getFieldByKey(key);\n        return field ? field.value : null;\n    }\n    /** @param {string} key @returns {RecordReference?} */\n    getReferenceDataByKey(key) {\n        let field = this.getFieldByKey(key);\n        return field ? field.referenceData : null;\n    }\n    /** @returns {Record<string, FranchiseFileField>} */\n    parseRecordFields() {\n        let fields = {};\n        this._fieldsArray = [];\n        for (let j = 0; j < this._offsetTable.length; j++) {\n            const offset = this._offsetTable[j];\n            // Push the entire record buffer to the field. No need to perform a calculation\n            // to subarray the buffer, BitView will take care of it in the Field.\n            fields[offset.name] = new FranchiseFileField(\n                offset.name,\n                this._data,\n                offset,\n                this\n            );\n            this._fieldsArray.push(fields[offset.name]);\n        }\n        return fields;\n    }\n    empty() {\n        this._parent.onEvent('empty', this);\n        this.isEmpty = true;\n    }\n    /** @param {string} name @param {FranchiseFileField} field */\n    onEvent(name, field) {\n        if (name === 'change') {\n            // this._data = utilService.replaceAt(this._data, field.offset.offset, field.unformattedValue);\n            // NOTE: At field time, we can only change the size of arrays of references.\n            // I'm not sure how to change the size of non-reference arrays, or if it's even possible.\n            if (this.arraySize !== null && this.arraySize !== undefined) {\n                const referenceData = field.referenceData;\n                // If the field is outside of the previous array size and was edited to a valid reference,\n                // then reset the array size\n                if (field.offset.index >= this.arraySize) {\n                    if (field.isReference) {\n                        if (\n                            referenceData.tableId !== 0 ||\n                            referenceData.rowNumber !== 0\n                        ) {\n                            this.arraySize = field.offset.index + 1;\n                        }\n                    }\n                }\n                // If the value was changed to 0s, then shrink the array size to field index.\n                else if (field.isReference) {\n                    if (\n                        referenceData.tableId === 0 &&\n                        referenceData.rowNumber === 0\n                    ) {\n                        this.arraySize = field.offset.index;\n                    }\n                }\n            }\n            this._parent.onEvent('change', this);\n        }\n    }\n}\nexport default FranchiseFileRecord;\n","import events from 'events';\nimport utilService from './services/utilService.js';\nimport FranchiseFileRecord from './FranchiseFileRecord.js';\nimport FranchiseFileTable2Field from './FranchiseFileTable2Field.js';\nimport FranchiseFileTable3Field from './FranchiseFileTable3Field.js';\nconst EventEmitter = events.EventEmitter;\n/**\n * @typedef {Object} FranchiseFileTableHeader\n * @property {string} name\n * @property {boolean} isArray\n * @property {number} tableId\n * @property {number} tablePad1\n * @property {number} uniqueId\n * @property {number} tableUnknown1\n * @property {number} tableUnknown2\n * @property {string} data1Id\n * @property {number} data1Type\n * @property {number} data1Unknown1\n * @property {number} data1Flag1\n * @property {number} data1Flag2\n * @property {number} data1Flag3\n * @property {number} data1Flag4\n * @property {number} tableStoreLength\n * @property {string} tableStoreName\n * @property {number} data1Offset\n * @property {string} data1TableId\n * @property {number} data1RecordCount\n * @property {number} data1Pad2\n * @property {number} table1Length\n * @property {number} table2Length\n * @property {number} data1Pad3\n * @property {number} data1Pad4\n * @property {number} headerSize\n * @property {number} headerOffset\n * @property {number} record1SizeOffset\n * @property {number} record1SizeLength\n * @property {number} record1Size\n * @property {number} offsetStart\n * @property {string} data2Id\n * @property {number} table1Length2\n * @property {number} tableTotalLength\n * @property {boolean} hasSecondTable\n * @property {number} table1StartIndex\n * @property {number} table2StartIndex\n * @property {number} recordWords\n * @property {number} recordCapacity\n * @property {number} numMembers\n * @property {number} nextRecordToUse\n * @property {boolean} hasThirdTable\n */\n/**\n * @typedef {Object} OffsetTableEntry\n * @property {number} index\n * @property {number} originalIndex\n * @property {string} name\n * @property {string} type\n * @property {boolean} isReference\n * @property {boolean} valueInSecondTable\n * @property {boolean} valueInThirdTable\n * @property {boolean} isSigned\n * @property {number} minValue\n * @property {number} maxValue\n * @property {number} maxLength\n * @property {boolean} final\n * @property {number} indexOffset\n * @property {FranchiseEnum} enum\n * @property {boolean} const\n * @property {number} offset\n */\n/**\n * @typedef EmptyRecordEntry\n * @property {number} previous\n * @property {number} next\n */\n\n/**\n * @typedef {import('./FranchiseFileSettings.js').default} FranchiseFileSettings\n * @typedef {import('./FranchiseSchema.js').TableSchema} TableSchema\n * @typedef {import('./FranchiseEnum.js').default} FranchiseEnum\n * @typedef {import('./strategies/StrategyPicker.js').GameStrategy} GameStrategy\n * @typedef {import('./strategies/StrategyPicker.js').TableStrategy} TableStrategy\n */\nclass FranchiseFileTable extends EventEmitter {\n    constructor(data, offset, gameYear, strategy, settings) {\n        super();\n        this.index = -1;\n        /** @type {Buffer} */\n        this.data = data;\n        /** @type {number} */\n        this.lengthAtLastSave = data.length;\n        /** @type {number} */\n        this.offset = offset;\n        /** @type {GameStrategy} */\n        this.strategyBase = strategy;\n        /** @type {TableStrategy} */\n        this.strategy = this.strategyBase.table;\n        this.recordsRead = false;\n        /** @type {number} */\n        this._gameYear = gameYear;\n        /** @type {FranchiseFileTableHeader} */\n        this.header = this.strategy.parseHeader(this.data);\n        /** @type {string} */\n        this.name = this.header.name;\n        /** @type {boolean} */\n        this.isArray = this.header.isArray;\n        /** @type {Array<OffsetTableEntry>} */\n        this.loadedOffsets = [];\n        this.isChanged = false;\n        /** @type {Array<FranchiseFileRecord>} */\n        this.records = [];\n        /** @type {Array<FranchiseFileTable2Field>} */\n        this.table2Records = [];\n        /** @type {Array<FranchiseFileTable3Field>} */\n        this.table3Records = [];\n        /** @type {Array<number>} */\n        this.arraySizes = [];\n        /** @type {Map<EmptyRecordEntry>} */\n        this.emptyRecords = new Map();\n        /** @type {FranchiseFileSettings} */\n        this._settings = settings;\n    }\n    /** @returns {Buffer} */\n    get hexData() {\n        this.updateBuffer();\n        return this.data;\n    }\n    /** @param {TableSchema} schema */\n    set schema(schema) {\n        if (schema?.attributes?.length !== this.header.numMembers) {\n            return;\n        }\n        /** @private @type {TableSchema} */\n        this._schema = schema;\n        const modifiedHeaderAttributes =\n            this.strategy.parseHeaderAttributesFromSchema(\n                schema,\n                this.data,\n                this.header\n            );\n        this.header.headerSize = modifiedHeaderAttributes.headerSize;\n        this.header.record1Size = modifiedHeaderAttributes.record1Size;\n        this.header.table1StartIndex =\n            modifiedHeaderAttributes.table1StartIndex;\n        this.header.table2StartIndex =\n            modifiedHeaderAttributes.table2StartIndex;\n        this.recordsRead = false;\n        this.offsetTable = [];\n        this.loadedOffsets = [];\n        this.records = [];\n        this.table2Records = [];\n        this.table3Records = [];\n        this.emptyRecords = new Map();\n    }\n    /** @type {TableSchema} */\n    get schema() {\n        return this._schema;\n    }\n    _generateGenericSchema() {\n        let attributes = [];\n        for (let i = 0; i < this.header.numMembers; i++) {\n            attributes.push({\n                name: `Field_${i}`,\n                type: 'int',\n                minValue: 1, // set to 1 to avoid a weird case with int[] see: FranchiseFileField _parseFieldValue(...) function.\n                maxValue: 1\n            });\n        }\n        return { attributes };\n    }\n    /** @param {number} index @returns {string} */\n    getBinaryReferenceToRecord(index) {\n        return utilService.getBinaryReferenceData(this.header.tableId, index);\n    }\n    updateBuffer() {\n        // need to check table2 & table3 data first because it may change offsets of the legit records.\n        let table2Data = this.strategy.getTable2BinaryData(\n            this.table2Records,\n            this.data.slice(this.header.table2StartIndex)\n        );\n        let table3Data = [];\n        if (this.header.table3StartIndex) {\n            table3Data = this.strategy.getTable3BinaryData(\n                this.table3Records,\n                this.data.slice(this.header.table3StartIndex)\n            );\n        }\n        // update table2 length and table total length in table header (only if records have been read)\n        if (this.recordsRead) {\n            let table2DataLength = 0;\n            let table3DataLength = 0;\n            // Get length of all table2Data sub arrays\n            table2Data.forEach((arr) => {\n                table2DataLength += arr.length;\n            });\n            table3Data.forEach((arr) => {\n                table3DataLength += arr.length;\n            });\n            this.header.table2Length = table2DataLength;\n            this.header.tableTotalLength =\n                this.header.table1Length + this.header.table2Length;\n            this.header.table3Length = table3DataLength;\n            this.data.writeUInt32BE(\n                this.header.table2Length,\n                this.header.offsetStart - 44\n            );\n            this.data.writeUInt32BE(\n                this.header.table3Length,\n                this.header.offsetStart - 40\n            );\n            this.data.writeUInt32BE(\n                this.header.tableTotalLength,\n                this.header.offsetStart - 24\n            );\n        }\n        const changedRecords = this.records.filter((record) => {\n            return record.isChanged;\n        });\n        let currentOffset = 0;\n        let bufferArrays = [];\n        // Add all of the array sizes to the buffer if the table is an array and had a change\n        if (this.isArray && changedRecords.length > 0) {\n            // Push the header data\n            bufferArrays.push(\n                this.data.slice(currentOffset, this.header.headerSize)\n            );\n            let arraySizeBuffer = Buffer.alloc(\n                this.header.data1RecordCount * 4\n            );\n            this.arraySizes.forEach((arraySize, index) => {\n                arraySizeBuffer.writeUInt32BE(arraySize, index * 4);\n            });\n            bufferArrays.push(arraySizeBuffer);\n            currentOffset +=\n                this.header.headerSize + this.header.data1RecordCount * 4;\n        }\n        for (let i = 0; i < changedRecords.length; i++) {\n            let record = changedRecords[i];\n            record.isChanged = false;\n            const recordOffset =\n                this.header.table1StartIndex +\n                record.index * this.header.record1Size;\n            bufferArrays.push(this.data.slice(currentOffset, recordOffset));\n            const recordHexData = record.hexData;\n            bufferArrays.push(recordHexData);\n            currentOffset = recordOffset + recordHexData.length;\n        }\n        bufferArrays.push(\n            this.data.slice(currentOffset, this.header.table2StartIndex)\n        );\n        if (\n            !this.recordsRead &&\n            this.header.hasSecondTable &&\n            table2Data.length === 0\n        ) {\n            table2Data = this.data.slice(this.header.table2StartIndex);\n        }\n        bufferArrays = bufferArrays.concat(table2Data);\n        if (\n            !this.recordsRead &&\n            this.header.hasThirdTable &&\n            table3Data.length === 0\n        ) {\n            table3Data = this.data.slice(this.header.table3StartIndex);\n        }\n        bufferArrays = bufferArrays.concat(table3Data);\n        this.data = Buffer.concat(bufferArrays);\n    }\n    /** @param {number} index @param {boolean} resetEmptyRecordMap */\n    setNextRecordToUse(index, resetEmptyRecordMap) {\n        this._setNextRecordToUseBuffer(index);\n        // Recalculate the empty record map if the option is set and the\n        // records have already been read.\n        if (resetEmptyRecordMap && this.recordsRead) {\n            this.updateBuffer();\n            this.emptyRecords = this._parseEmptyRecords();\n        }\n        this.emit('change');\n    }\n    /** @param {number} index */\n    _setNextRecordToUseBuffer(index) {\n        // We need to update the table header to use this row next\n        this.header.nextRecordToUse = index;\n        // And finally update the buffer to reflect this change\n        this.data.writeUInt32BE(index, this.header.offsetStart - 4);\n    }\n    recalculateEmptyRecordReferences() {\n        // For this method, we are not going to assume any existing empty records.\n        // We're going through each record and checking if it is an empty reference.\n        // If so, we'll add it to the list. At the end we will check if there are any unreachable empty references\n        // and update those accordingly.\n        let emptyRecordReferenceIndicies = [];\n        this.records.forEach((record) => {\n            let isEmptyReference = false;\n            const firstFourBytesReference =\n                utilService.getReferenceDataFromBuffer(record.data.slice(0, 4));\n            if (\n                firstFourBytesReference.tableId === 0 &&\n                firstFourBytesReference.rowNumber !== 0\n            ) {\n                // Could be a an empty record reference or a table2 field.\n                // Check for a table2 field reference.\n                const firstOffset = this.offsetTable[0];\n                if (firstOffset.type !== 'string') {\n                    isEmptyReference = true;\n                    // Save the row number that this record points to.\n                    emptyRecordReferenceIndicies.push(\n                        firstFourBytesReference.rowNumber\n                    );\n                }\n            }\n            record.isEmpty = isEmptyReference;\n        });\n        // We need to determine the starting node.\n        // To do that, we need to find the empty record which no other empty record points to.\n        const unreachableRecords = this.records\n            .filter((record) => {\n                return record.isEmpty;\n            })\n            .filter((record) => {\n                return (\n                    emptyRecordReferenceIndicies.indexOf(record.index) === -1\n                );\n            });\n        // If there are more than 1 nodes which are not referenced, there is an issue\n        if (unreachableRecords.length > 1) {\n            const unreachableIndicies = unreachableRecords.map((record) => {\n                return record.index;\n            });\n            console.warn(\n                `(${this.header.tableId}) ${this.name} - More than one unreachable records found: ` +\n                    `(${unreachableIndicies.join(', ')}). The game will most likely crash if you do not fix this problem. ` +\n                    `The nextRecordToUse has NOT been updated.`\n            );\n        } else {\n            let nextRecordToUse = this.header.recordCapacity;\n            if (unreachableRecords.length === 1) {\n                nextRecordToUse = unreachableRecords[0].index;\n            }\n            this._setNextRecordToUseBuffer(nextRecordToUse);\n            this.emptyRecords = this._parseEmptyRecords();\n            this.emit('change');\n        }\n    }\n    /** @param {Buffer} buf @param {boolean} shouldReadRecords @returns {Promise<FranchiseFileTable>?} */\n    async replaceRawData(buf, shouldReadRecords) {\n        this.data = buf;\n        // Reset fields\n        this.recordsRead = false;\n        this.header = this.strategy.parseHeader(this.data);\n        this.name = this.header.name;\n        this.isArray = this.header.isArray;\n        this.loadedOffsets = [];\n        this.isChanged = false;\n        this.records = [];\n        this.table2Records = [];\n        this.table3Records = [];\n        this.arraySizes = [];\n        this.emptyRecords = new Map();\n        this.emit('change');\n        // Re-read records if desired\n        if (shouldReadRecords) {\n            return this.readRecords();\n        }\n    }\n    // attribsToLoad is an array of attribute names (strings) to load. It is optional - if nothing is provided to the function it will load all attributes.\n    /** @param {Array<string>?} [attribsToLoad] @returns {Promise<FranchiseFileTable>} */\n    readRecords(attribsToLoad) {\n        return new Promise((resolve) => {\n            if (\n                !this.recordsRead ||\n                isLoadingNewOffsets(\n                    this.loadedOffsets,\n                    attribsToLoad,\n                    this.offsetTable\n                )\n            ) {\n                if (this.isArray) {\n                    const numberOfFields = this.header.record1Size / 4;\n                    let offsetTable = [];\n                    let arraySizes = [];\n                    for (let i = 0; i < numberOfFields; i++) {\n                        const offset = {\n                            final: false,\n                            index: i,\n                            indexOffset: i * 32,\n                            isSigned: false,\n                            length: 32,\n                            maxLength: null,\n                            maxValue: null,\n                            minValue: null,\n                            name: `${this.name.substring(0, this.name.length - 2)}${i}`,\n                            offset: i * 32,\n                            type: this.name.substring(0, this.name.length - 2),\n                            valueInSecondTable: false,\n                            valueInThirdTable: false\n                        };\n                        offset.isReference =\n                            !offset.enum &&\n                            (offset.type[0] == offset.type[0].toUpperCase() ||\n                                offset.type.includes('[]'))\n                                ? true\n                                : false;\n                        offsetTable.push(offset);\n                    }\n                    for (let i = 0; i < this.header.data1RecordCount; i++) {\n                        arraySizes.push(\n                            this.data.readUInt32BE(\n                                this.header.headerSize + i * 4\n                            )\n                        );\n                    }\n                    this.offsetTable = offsetTable;\n                    this.arraySizes = arraySizes;\n                } else {\n                    if (!this.schema) {\n                        console.warn(\n                            \"Schema doesn't exist for this table. Generating generic schema from table header...\"\n                        );\n                        this.schema = this._generateGenericSchema();\n                    }\n                    this.offsetTable = readOffsetTable(\n                        this.data,\n                        this.schema,\n                        this.header\n                    );\n                }\n                let offsetTableToUse = this.offsetTable;\n                const mandatoryOffsetsToLoad =\n                    this.strategy.getMandatoryOffsets(this.offsetTable);\n                if (attribsToLoad) {\n                    // get any new attributes to load plus the existing loaded offsets\n                    offsetTableToUse = offsetTableToUse.filter((attrib) => {\n                        return (\n                            mandatoryOffsetsToLoad.includes(attrib.name) ||\n                            attribsToLoad.includes(attrib.name) ||\n                            this.loadedOffsets.find((offset) => {\n                                return offset.name === attrib.name;\n                            })\n                        );\n                    });\n                }\n                this.loadedOffsets = offsetTableToUse;\n                this.records = readRecords(\n                    this.data,\n                    this.header,\n                    offsetTableToUse,\n                    this\n                );\n                if (this.header.hasSecondTable) {\n                    this._parseTable2Values(\n                        this.data,\n                        this.header,\n                        this.records\n                    );\n                }\n                if (this.header.hasThirdTable) {\n                    this._parseTable3Values(\n                        this.data,\n                        this.header,\n                        this.records\n                    );\n                }\n                this.emptyRecords = this._parseEmptyRecords();\n                this.records.forEach((record, index) => {\n                    if (this.isArray) {\n                        record.arraySize = this.arraySizes[index];\n                    }\n                    if (this.emptyRecords.get(index)) {\n                        record.isEmpty = true;\n                    }\n                });\n                this.recordsRead = true;\n                resolve(this);\n            } else {\n                resolve(this);\n            }\n        });\n    }\n    /** @returns {Map<EmptyRecordEntry>} */\n    _parseEmptyRecords() {\n        let emptyRecords = new Map();\n        const firstEmptyRecord = this.header.nextRecordToUse;\n        let previousEmptyRecordIndex = null;\n        let currentEmptyRecordIndex = firstEmptyRecord;\n        if (firstEmptyRecord !== this.header.recordCapacity) {\n            while (currentEmptyRecordIndex !== this.header.recordCapacity) {\n                // let nextEmptyRecordIndex = this.data.readUInt32BE(this.header.table1StartIndex + (currentEmptyRecordIndex * sizeOfEachRecord));\n                let nextEmptyRecordIndex =\n                    this.records[currentEmptyRecordIndex].data.readUInt32BE(0);\n                emptyRecords.set(currentEmptyRecordIndex, {\n                    previous: previousEmptyRecordIndex,\n                    next: nextEmptyRecordIndex\n                });\n                previousEmptyRecordIndex = currentEmptyRecordIndex;\n                currentEmptyRecordIndex = nextEmptyRecordIndex;\n            }\n        }\n        return emptyRecords;\n    }\n    /** @param {FranchiseFileRecord} */\n    _onRecordEmpty(record) {\n        // First, check if the record is already empty. If so, don't do anything...\n        // If not empty, then we need to empty it.\n        if (!record.isEmpty) {\n            record.isChanged = true;\n            const lastEmptyRecordMapEntry = Array.from(this.emptyRecords).pop();\n            // When we empty a record, we need to check if another empty record exists in the table.\n            if (\n                lastEmptyRecordMapEntry !== null &&\n                lastEmptyRecordMapEntry !== undefined\n            ) {\n                // If an empty record already exists, we just need to get the last empty record\n                // and update its index to point to the current record that we want to empty.\n                const lastEmptyRecordIndex = lastEmptyRecordMapEntry[0];\n                this.emptyRecords.set(lastEmptyRecordIndex, {\n                    previous: lastEmptyRecordMapEntry[1].previous,\n                    next: record.index\n                });\n                // Then we need to update the current record index to point to the record capacity.\n                this.emptyRecords.set(record.index, {\n                    previous: lastEmptyRecordIndex,\n                    next: this.header.recordCapacity\n                });\n                // Finally, we need to update the buffers to reflect this data.\n                // First, place the new referenced index (will be the first 4 bytes)\n                // Next, fill the rest of the record with 0s (the last bytes of the record)\n                // And update both record's data. This will set the unformatted and formatted values\n                // without emitting an event\n                this._changeRecordBuffers(lastEmptyRecordIndex, record.index);\n                this._changeRecordBuffers(\n                    record.index,\n                    this.header.recordCapacity\n                );\n            } else {\n                // In this case, the record that was emptied is the first empty record in the table\n                this.emptyRecords.set(record.index, {\n                    previous: null,\n                    next: this.header.recordCapacity\n                });\n                // Finally update the table header and buffer so that the game uses this new empty\n                // record as the next record to use (or fill)\n                this.setNextRecordToUse(record.index);\n                this._changeRecordBuffers(\n                    record.index,\n                    this.header.recordCapacity\n                );\n            }\n            this.emit('change');\n        }\n    }\n    /** @param {Buffer} data @param {FranchiseFileTableHeader} header @param {Array<FranchiseFileRecord>} records */\n    _parseTable2Values(data, header, records) {\n        const that = this;\n        const secondTableData = data.slice(header.table2StartIndex);\n        records.forEach((record) => {\n            const fieldsReferencingSecondTable = record.fieldsArray.filter(\n                (field) => {\n                    return field.secondTableField;\n                }\n            );\n            fieldsReferencingSecondTable.forEach((field) => {\n                field.secondTableField.unformattedValue =\n                    that.strategyBase.table2Field.getInitialUnformattedValue(\n                        field,\n                        secondTableData\n                    );\n                field.secondTableField.strategy = that.strategyBase.table2Field;\n                that.table2Records.push(field.secondTableField);\n                field.secondTableField.parent = that;\n            });\n        });\n    }\n    /** @param {Buffer} data @param {FranchiseFileTableHeader} header @param {Array<FranchiseFileRecord>} records */\n    _parseTable3Values(data, header, records) {\n        const that = this;\n        const thirdTableData = data.slice(header.table3StartIndex);\n        records.forEach((record) => {\n            const fieldsReferencingThirdTable = record.fieldsArray.filter(\n                (field) => {\n                    return field.thirdTableField;\n                }\n            );\n\n            // Check if this record has an overflow record reference\n            const overflowRecord = utilService.getTable3OverflowRecord(record);\n\n            fieldsReferencingThirdTable.forEach((field) => {\n                field.thirdTableField.unformattedValue =\n                    that.strategyBase.table3Field.getInitialUnformattedValue(\n                        field,\n                        thirdTableData,\n                        overflowRecord ? overflowRecord.fields[field.key] : null\n                    );\n                field.thirdTableField.strategy = that.strategyBase.table3Field;\n                that.table3Records.push(field.thirdTableField);\n                field.thirdTableField.parent = that;\n            });\n        });\n    }\n    /** @param {number} index @param {number} emptyRecordReference */\n    _changeRecordBuffers(index, emptyRecordReference) {\n        this._setBufferToEmptyRecordReference(index, emptyRecordReference);\n        this._setRecordInternalBuffer(index, emptyRecordReference);\n    }\n    /** @param {number} index @param {number} emptyRecordReference */\n    _setBufferToEmptyRecordReference(index, emptyRecordReference) {\n        const recordStartIndex =\n            this.header.table1StartIndex + index * this.header.record1Size;\n        this.data.writeUInt32BE(emptyRecordReference, recordStartIndex);\n        // that.data.fill(0, recordStartIndex + 4, recordStartIndex + that.header.record1Size);\n    }\n    /** @param {number} index @param {number} emptyRecordReference */\n    _setRecordInternalBuffer(index, emptyRecordReference) {\n        // let newData = utilService.dec2bin(emptyRecordReference, 32);\n        // const recordSizeInBits = this.header.record1Size * 8;\n        // if (recordSizeInBits > 32) {\n        //   newData += this.records[index]._data.slice(32);\n        // }\n        // console.log(newData);\n        this.records[index]._data.writeUInt32BE(emptyRecordReference, 0);\n    }\n    /** @param {string} name @param {*} object */\n    onEvent(name, object) {\n        if (object instanceof FranchiseFileRecord) {\n            if (name === 'change') {\n                object.isChanged = true;\n                if (this.isArray) {\n                    this.arraySizes[object.index] = object.arraySize;\n                }\n                // When a record changes, we need to check if it was previously empty\n                // If so, we need to consider the record as no longer empty\n                // So we need to adjust the empty records\n                // First, check if the record's length is greater than 4 bytes (32 bits)\n                // If less than 4 bytes, it can never become empty...probably. :)\n                if (this.header.record1Size >= 4) {\n                    // Ex: Empty record list looks like object: A -> B -> C\n                    // When B's value is changed, the records need updated to: A -> C\n                    const emptyRecordReference = this.emptyRecords.get(\n                        object.index\n                    );\n                    const changedRecordWasEmpty =\n                        emptyRecordReference !== null &&\n                        emptyRecordReference !== undefined;\n                    // Automatically un-empty the row if the setting is enabled and the changed record was empty.\n                    if (changedRecordWasEmpty) {\n                        // Check if the record's first four bytes still have a reference to the 0th table.\n                        // If so, then the record is still considered empty.\n                        // We need to check the buffer because the first field is not always a reference.\n                        // const referenceData = utilService.getReferenceDataFromBuffer(object.data.slice(0, 4));\n                        // if (referenceData.tableId !== 0 || referenceData.rowNumber > this.header.recordCapacity) {\n                        // if the changed field isn't included in the first 32 bits, zero out the first 32 bits.\n                        // Otherwise, it's not necessary to zero out.\n                        const changedFieldsInFirst4Bytes =\n                            object.fieldsArray.filter((field) => {\n                                return (\n                                    field.isChanged &&\n                                    field.offset.indexOffset < 32\n                                );\n                            });\n                        if (\n                            this._settings.autoUnempty &&\n                            changedFieldsInFirst4Bytes.length === 0\n                        ) {\n                            // set first 4 bytes to 0\n                            this._changeRecordBuffers(object.index, 0);\n                            // invalidate the cached values since we set the buffer directly\n                            const fieldsInFirst4Bytes =\n                                object.fieldsArray.filter((field) => {\n                                    return field.offset.indexOffset < 32;\n                                });\n                            fieldsInFirst4Bytes.forEach((field) => {\n                                field.clearCachedValues();\n                            });\n                        }\n                        // If autoUnempty is disabled, only un-empty the row if a field in the first 4 bytes changed.\n                        // If autoUnempty is enabled, un-empty the row if ANY field changed.\n                        if (\n                            this._settings.autoUnempty ||\n                            changedFieldsInFirst4Bytes.length > 0\n                        ) {\n                            // if the record contains any string values, point the string values to\n                            // their correct offsets\n                            this.strategy.recalculateStringOffsets(\n                                this,\n                                object\n                            );\n                            this.strategy.recalculateBlobOffsets(this, object);\n                            // Delete the empty record entry because it is no longer empty\n                            this.emptyRecords.delete(object.index);\n                            // Set the isEmpty back to false because it's no longer empty\n                            object.isEmpty = false;\n                            // Check if there is a previous empty record\n                            const previousEmptyReference =\n                                this.emptyRecords.get(\n                                    emptyRecordReference.previous\n                                );\n                            if (previousEmptyReference) {\n                                // Set the previous empty record to point to the old reference's next node\n                                this.emptyRecords.set(\n                                    emptyRecordReference.previous,\n                                    {\n                                        previous: this.emptyRecords.get(\n                                            emptyRecordReference.previous\n                                        ).previous,\n                                        next: emptyRecordReference.next\n                                    }\n                                );\n                                // change the table buffer and record buffer to reflect object change\n                                this._changeRecordBuffers(\n                                    emptyRecordReference.previous,\n                                    emptyRecordReference.next\n                                );\n                            }\n                            // If there is a next empty reference, update the previous value accordingly to now point\n                            // to the current record's previous index.\n                            const nextEmptyReference = this.emptyRecords.get(\n                                emptyRecordReference.next\n                            );\n                            if (nextEmptyReference) {\n                                this.emptyRecords.set(\n                                    emptyRecordReference.next,\n                                    {\n                                        previous: emptyRecordReference.previous,\n                                        next: this.emptyRecords.get(\n                                            emptyRecordReference.next\n                                        ).next\n                                    }\n                                );\n                                if (!previousEmptyReference) {\n                                    // If no previous empty record exists and a next record exists, we need to update the header to\n                                    // point to object record as the next record to use.\n                                    this.setNextRecordToUse(\n                                        emptyRecordReference.next\n                                    );\n                                }\n                            }\n                            // If there are no previous or next empty references\n                            // Then there are no more empty references in the table\n                            // Update the table header nextRecordToUse back to the table record capacity\n                            if (\n                                !previousEmptyReference &&\n                                !nextEmptyReference\n                            ) {\n                                this.setNextRecordToUse(\n                                    this.header.recordCapacity\n                                );\n                            }\n                        }\n                        // }\n                    }\n                }\n                this.emit('change');\n            } else if (name === 'empty') {\n                this._onRecordEmpty(object);\n                this.emit('change');\n            }\n        } else if (\n            object instanceof FranchiseFileTable2Field ||\n            object instanceof FranchiseFileTable3Field\n        ) {\n            object.isChanged = true;\n            // When a table2 field changes, we need to check if the record is empty. If so, we need to mark it as not empty.\n            if (object.fieldReference) {\n                this.onEvent('change', object.fieldReference._parent);\n            } else {\n                // Only emit change here if the field reference is empty.\n                // the onEvent call will emit a change in the above condition.\n                this.emit('change');\n            }\n        }\n    }\n}\nfunction readOffsetTable(data, schema, header) {\n    let currentIndex = header.offsetStart;\n    let offsetTable = parseOffsetTableFromData();\n    // console.log(offsetTable.sort((a,b) => { return a.indexOffset - b.indexOffset}))\n    sortOffsetTableByIndexOffset();\n    function isSkippedOffset(offset) {\n        return (\n            offset.final ||\n            offset.const ||\n            offset.type.indexOf('()') >= 0 ||\n            offset.type === 'ITransaction_Sleep'\n        );\n    }\n    for (let i = 0; i < offsetTable.length; i++) {\n        let curOffset = offsetTable[i];\n        let nextOffset = offsetTable.length > i + 1 ? offsetTable[i + 1] : null;\n        if (nextOffset) {\n            let curIndex = i + 2;\n            while (nextOffset && isSkippedOffset(nextOffset)) {\n                nextOffset = offsetTable[curIndex];\n                curIndex += 1;\n            }\n            if (nextOffset) {\n                curOffset.length =\n                    nextOffset.indexOffset - curOffset.indexOffset;\n            } else {\n                curOffset.length =\n                    header.record1Size * 8 - curOffset.indexOffset;\n            }\n        } else {\n            curOffset.length = header.record1Size * 8 - curOffset.indexOffset;\n        }\n        if (curOffset.length > 32) {\n            curOffset.length = 32;\n        }\n    }\n    let currentOffsetIndex = 0;\n    let chunked32bit = [];\n    for (let i = 0; i < header.record1Size * 8; i += 32) {\n        let chunkedOffsets = [];\n        let offsetLength = i % 32;\n        do {\n            const currentOffset = offsetTable[currentOffsetIndex];\n            if (currentOffset) {\n                if (isSkippedOffset(currentOffset)) {\n                    currentOffsetIndex += 1;\n                    continue;\n                }\n                offsetLength += currentOffset.length;\n                chunkedOffsets.push(currentOffset);\n                currentOffsetIndex += 1;\n            } else {\n                break;\n            }\n        } while (currentOffsetIndex < offsetTable.length && offsetLength < 32);\n        chunked32bit.push(chunkedOffsets);\n    }\n    chunked32bit.forEach((offsetArray) => {\n        if (offsetArray.length > 0) {\n            let currentOffset = offsetArray[0].indexOffset;\n            offsetArray[offsetArray.length - 1].offset = currentOffset;\n            for (let i = offsetArray.length - 2; i >= 0; i--) {\n                let previousOffset = offsetArray[i + 1];\n                let offset = offsetArray[i];\n                offset.offset = previousOffset.offset + previousOffset.length;\n            }\n        }\n    });\n    offsetTable = offsetTable.filter((offset) => {\n        return !isSkippedOffset(offset);\n    });\n    offsetTable.sort((a, b) => {\n        return a.offset - b.offset;\n    });\n    for (let i = 0; i < offsetTable.length; i++) {\n        schema.attributes[offsetTable[i].index].offsetIndex = i;\n    }\n    return offsetTable;\n    function sortOffsetTableByIndexOffset() {\n        offsetTable.sort((a, b) => {\n            return a.indexOffset - b.indexOffset;\n        });\n    }\n    function parseOffsetTableFromData() {\n        let table = [];\n        let seenIndexOffsets = new Set();\n        schema.attributes.forEach((attribute, index) => {\n            const minValue = parseInt(attribute.minValue);\n            const maxValue = parseInt(attribute.maxValue);\n            const indexOffset = utilService.byteArrayToLong(\n                data.slice(currentIndex, currentIndex + 4),\n                true\n            );\n            const isRepeatedIndexOffset = seenIndexOffsets.has(indexOffset);\n            const entry = {\n                index: index,\n                originalIndex: parseInt(attribute.index),\n                name: attribute.name,\n                type:\n                    minValue < 0 || maxValue < 0\n                        ? 's_' + attribute.type\n                        : attribute.type,\n                isReference:\n                    !attribute.enum &&\n                    (attribute.type[0] == attribute.type[0].toUpperCase() ||\n                        attribute.type.includes('[]') ||\n                        attribute.type === 'record')\n                        ? true\n                        : false,\n                valueInSecondTable:\n                    header.hasSecondTable && attribute.type === 'string',\n                valueInThirdTable:\n                    header.hasThirdTable && attribute.type === 'binaryblob',\n                isSigned: minValue < 0 || maxValue < 0,\n                minValue: minValue,\n                maxValue: maxValue,\n                maxLength: attribute.maxLength\n                    ? parseInt(attribute.maxLength)\n                    : null,\n                final: attribute.final === 'true' || isRepeatedIndexOffset,\n                indexOffset: indexOffset,\n                enum: attribute.enum,\n                const: attribute.const\n            };\n            table.push(entry);\n            // determine if the offset should be skipped. For normal schemas, this is determined by final, const, or type.\n            // For generated schemas, an offset is skipped if the indexOffset has been seen before.\n            const isSkipped = isSkippedOffset(entry);\n            if (!isSkipped) {\n                seenIndexOffsets.add(indexOffset);\n            }\n            currentIndex += 4;\n        });\n        return table;\n    }\n}\nfunction readRecords(data, header, offsetTable, table) {\n    // const binaryData = utilService.getBitArray(data.slice(header.table1StartIndex, header.table2StartIndex));\n    let records = [];\n    if (data) {\n        let index = 0;\n        for (\n            let i = header.table1StartIndex;\n            i < header.table2StartIndex;\n            i += header.record1Size\n        ) {\n            // const recordBinary = binaryData.slice(i, i + (header.record1Size * 8));\n            let record = new FranchiseFileRecord(\n                data.slice(i, i + header.record1Size),\n                index,\n                offsetTable,\n                table\n            );\n            records.push(record);\n            index += 1;\n        }\n    }\n    return records;\n}\nfunction isLoadingNewOffsets(currentlyLoaded, attribsToLoad, offsetTable) {\n    const names = currentlyLoaded.map((currentlyLoadedOffset) => {\n        return currentlyLoadedOffset.name;\n    });\n    if (attribsToLoad) {\n        let newAttribs = attribsToLoad.filter((attrib) => {\n            return !names.includes(attrib);\n        });\n        return newAttribs.length > 0;\n    } else {\n        return currentlyLoaded.length !== offsetTable.length;\n    }\n}\nexport default FranchiseFileTable;\n","let CommonAlgorithms = {};\nCommonAlgorithms.save = (units, oldData) => {\n    // first check if any records changed. If not, we can return immediately because nothing changed.\n    const changedUnits = units.find((unit) => {\n        return unit.isChanged;\n    });\n    if (!changedUnits) {\n        return oldData;\n    }\n    // if there are changed records, we need to loop through them all...kinda :)\n    let offsetDifference = 0;\n    let oldOffsetCounter = 0;\n    let bufferArrays = [];\n    // Ensure the units are sorted by index in the actual file. Otherwise, we may overwrite data\n    units.sort((a, b) => {\n        return a.index - b.index;\n    });\n    units.forEach((unit, index) => {\n        if (unit.offset === 0 && index > 0) {\n            // there are usually trailing records at the end of the table that reference\n            // the first offset. Take a look at the Player table for an example of this.\n            // There are a bunch of rows at the end where FirstName, LastName, etc...\n            // will all point to the very first record.\n            // We don't need to worry about these records at all, so just skip them.\n            return;\n        }\n        // Update the record's offset so that it's up to date with the changes.\n        // Remember, a record's length can change here...so we need to keep the\n        // offsets up to date.\n        unit.offset += offsetDifference;\n        if (unit.isChanged) {\n            // If a record has changed, we want to get all the unchanged data from before this record up until this record\n            // in the old data. Take a look at the test cases and add some console logs if you want to see what I mean by this.\n            // Basically, we are pushing all the unchanged data directly from the old data, and any new data is inserted in there as well.\n            const unchangedDataSinceLastChangedRecord = oldData.slice(\n                oldOffsetCounter,\n                unit.offset - offsetDifference\n            );\n            const newHexData = unit.hexData;\n            bufferArrays.push(unchangedDataSinceLastChangedRecord, newHexData);\n            // Now we need to update our counts so that the above statements work for the rest of the loop.\n            oldOffsetCounter =\n                unit.offset - offsetDifference + unit.lengthAtLastSave;\n            offsetDifference += newHexData.length - unit.lengthAtLastSave;\n            // We update the length at last save so that this algorithm works the next time it's called.\n            unit.lengthAtLastSave = newHexData.length;\n            unit.isChanged = false;\n        }\n    });\n    // Next, we need to push the remainder of data onto the array.\n    // For example, think if a user changed the 3rd record out of 100.\n    // In the loop, we would push the first 2 records as the unchangedDataSinceLastChangedRecord (since they didn't change!)\n    // We would also push the changed 3rd record (newHexData)\n    // Now we need to push records 4 to 100. These did not get added in the loop because they didn't change.\n    // We'll push them here.\n    // console.log(oldOffsetCounter);\n    bufferArrays.push(oldData.slice(oldOffsetCounter));\n    // Finally, concat all of the arrays into one buffer to return it.\n    // Why do all of this BS? Well, concat is an 'expensive' operation.\n    // It's not very efficient and takes a long time comparatively to other methods.\n    // So, instead of concat-ing each change record, we will only do it one time here at the end.\n    // We also want to reduce the number of items in the bufferArrays as much as possible to save on time.\n    // That's why we use the unchangedDataSinceLastChangedRecord to combine a bunch of records that weren't changed together.\n    return Buffer.concat(bufferArrays);\n};\nexport default CommonAlgorithms;\n","import CommonAlgorithms from '../CommonAlgorithms.js';\nlet CommonFileStrategy = {};\nCommonFileStrategy.generateUnpackedContents = CommonAlgorithms.save;\nexport default CommonFileStrategy;\n","import CommonFileStrategy from './CommonFileStrategy.js';\nconst COMPRESSED_DATA_OFFSET = 0x52;\nlet FranchiseFileStrategy = {};\nFranchiseFileStrategy.generateUnpackedContents =\n    CommonFileStrategy.generateUnpackedContents;\nFranchiseFileStrategy.postPackFile = (originalData, newData) => {\n    const header = originalData.slice(0, COMPRESSED_DATA_OFFSET);\n    const endOfData = newData.length.toString(16);\n    header[0x4a] = parseInt(endOfData.substr(4), 16);\n    header[0x4b] = parseInt(endOfData.substr(2, 2), 16);\n    header[0x4c] = parseInt(endOfData.substr(0, 2), 16);\n    const trailer = originalData.slice(newData.length + COMPRESSED_DATA_OFFSET);\n    return Buffer.concat([header, newData, trailer]);\n};\nexport default FranchiseFileStrategy;\n","import FranchiseFileStrategy from '../../common/file/FranchiseFileStrategy.js';\n/**\n * @type {FileStrategy}\n */\nlet M19FileStrategy = {};\nM19FileStrategy.postPackFile = FranchiseFileStrategy.postPackFile;\nM19FileStrategy.generateUnpackedContents =\n    FranchiseFileStrategy.generateUnpackedContents;\nexport default M19FileStrategy;\n","let FranchiseTableStrategy = {};\nFranchiseTableStrategy.getTable2BinaryData = (\n    table2Records,\n    fullTable2Buffer\n) => {\n    let table2Data = [];\n    // Make sure to sort the table2 records by index\n    const changedTable2Records = table2Records\n        .filter((record) => {\n            return record.isChanged;\n        })\n        .sort((a, b) => {\n            return a.index - b.index;\n        });\n    let currentOffset = 0;\n    for (let i = 0; i < changedTable2Records.length; i++) {\n        let record = changedTable2Records[i];\n        record.isChanged = false;\n        const recordOffset = record.index;\n        if (i > 0 && recordOffset === 0) {\n            // this case is true for the last few rows with no data in them. They reference the first table2 value.\n            continue;\n        }\n        const preData = fullTable2Buffer.slice(currentOffset, recordOffset);\n        if (preData.length > 0) {\n            table2Data.push(preData);\n        }\n        const recordHexData = record.hexData;\n        table2Data.push(recordHexData);\n        currentOffset = recordOffset + recordHexData.length;\n    }\n    if (table2Records.length > 0) {\n        table2Data.push(fullTable2Buffer.slice(currentOffset));\n    }\n    return table2Data;\n};\nFranchiseTableStrategy.getMandatoryOffsets = () => {\n    return [];\n};\nFranchiseTableStrategy.recalculateStringOffsets = (table, record) => {\n    // First, calculate length allocated per record in table2\n    const byteLengthPerRecord = table.offsetTable\n        .filter((offsetEntry) => {\n            return offsetEntry.type === 'string';\n        })\n        .reduce((accum, cur) => {\n            return accum + cur.maxLength;\n        }, 0);\n    // Then, go through each string field sorted by offset index, and assign offsets to the table2 fields\n    let runningOffset = 0;\n    record.fieldsArray\n        .filter((field) => {\n            return field.offset.type === 'string';\n        })\n        .sort((a, b) => {\n            return a.offset.index - b.offset.index;\n        })\n        .forEach((field) => {\n            if (field.secondTableField) {\n                field.secondTableField.offset =\n                    record.index * byteLengthPerRecord + runningOffset;\n            }\n            runningOffset += field.offset.maxLength;\n        });\n};\nFranchiseTableStrategy.recalculateBlobOffsets = (table, record) => {\n    // First, calculate length allocated per record in table2\n    const byteLengthPerRecord = table.offsetTable\n        .filter((offsetEntry) => {\n            return offsetEntry.type === 'binaryblob';\n        })\n        .reduce((accum, cur) => {\n            return accum + cur.maxLength + 2; // +2 bytes for size, which is not considered in max length.\n        }, 0);\n    // Then, go through each string field sorted by offset index, and assign offsets to the table2 fields\n    let runningOffset = 0;\n    record.fieldsArray\n        .filter((field) => {\n            return field.offset.type === 'binaryblob';\n        })\n        .sort((a, b) => {\n            return a.offset.index - b.offset.index;\n        })\n        .forEach((field) => {\n            if (field.thirdTableField) {\n                field.thirdTableField.offset =\n                    record.index * byteLengthPerRecord + runningOffset;\n            }\n            runningOffset += field.offset.maxLength;\n        });\n};\nexport default FranchiseTableStrategy;\n","import utilService from '../../../../services/utilService.js';\nlet M19TableHeaderStrategy = {};\nM19TableHeaderStrategy.parseHeader = (data) => {\n    const headerStart = 0x80;\n    const tableName = readTableName(data);\n    const isArray = tableName.indexOf('[]') >= 0;\n    const tableId = data.readUInt32BE(headerStart);\n    const tablePad1 = data.readUInt32BE(headerStart + 4);\n    const tableUnknown1 = data.readUInt32BE(headerStart + 8);\n    const tableUnknown2 = data.readUInt32BE(headerStart + 12);\n    const data1Id = readTableName(\n        data.slice(headerStart + 16, headerStart + 20)\n    );\n    const data1Type = data.readUInt32BE(headerStart + 20);\n    const data1Unknown1 = data.readUInt32BE(headerStart + 24);\n    const data1Flag1 = data[headerStart + 28];\n    const data1Flag2 = data[headerStart + 29];\n    const data1Flag3 = data[headerStart + 30];\n    const data1Flag4 = data[headerStart + 31];\n    const tableStoreLength = data.readUInt32BE(headerStart + 32);\n    let headerOffset = headerStart + 36;\n    let records1SizeOffset = 1689;\n    let tableStoreName = null;\n    if (tableStoreLength > 0) {\n        headerOffset += tableStoreLength;\n        records1SizeOffset += tableStoreLength * 8;\n        tableStoreName = readTableName(\n            data.slice(headerStart + 36, headerStart + 36 + tableStoreLength)\n        );\n    }\n    const data1Offset = data.readUInt32BE(headerOffset);\n    const data1TableId = data.readUInt32BE(headerOffset + 4);\n    const data1RecordCount = data.readUInt32BE(headerOffset + 8);\n    const data1Pad2 = data.readUInt32BE(headerOffset + 12);\n    const table1Length = data.readUInt32BE(headerOffset + 16);\n    const table2Length = data.readUInt32BE(headerOffset + 20);\n    const data1Pad3 = data.readUInt32BE(headerOffset + 24);\n    const data1Pad4 = data.readUInt32BE(headerOffset + 28);\n    const data2Id = readTableName(\n        data.slice(headerOffset + 32, headerOffset + 36)\n    );\n    const table1Length2 = data.readUInt32BE(headerOffset + 36);\n    const tableTotalLength = data.readUInt32BE(headerOffset + 40);\n    const data2RecordWords = data.readUInt32BE(headerOffset + 44);\n    const data2RecordCapacity = data.readUInt32BE(headerOffset + 48);\n    const data2IndexEntries = data.readUInt32BE(headerOffset + 52);\n    // const unknown4 = data.readUInt32BE(headerOffset + 56);\n    const nextRecordToUse = data.readUInt32BE(headerOffset + 60);\n    let offsetStart = 0xe4 + tableStoreLength;\n    const hasSecondTable = tableTotalLength > table1Length;\n    let headerSize = 0;\n    let records1Size = 0;\n    if (isArray) {\n        headerSize = 0xe4 + tableStoreLength;\n        // const binaryData = utilService.getBitArray(data.slice(0, headerSize));\n        records1Size = data2RecordWords * 4;\n    }\n    return {\n        name: tableName,\n        isArray: isArray,\n        tableId: tableId,\n        tablePad1: tablePad1,\n        uniqueId: tablePad1,\n        tableUnknown1: tableUnknown1,\n        tableUnknown2: tableUnknown2,\n        data1Id: data1Id,\n        data1Type: data1Type,\n        data1Unknown1: data1Unknown1,\n        data1Flag1: data1Flag1,\n        data1Flag2: data1Flag2,\n        data1Flag3: data1Flag3,\n        data1Flag4: data1Flag4,\n        tableStoreLength: tableStoreLength,\n        tableStoreName: tableStoreName,\n        data1Offset: data1Offset,\n        data1TableId: data1TableId,\n        data1RecordCount: data1RecordCount,\n        data1Pad2: data1Pad2,\n        table1Length: table1Length,\n        table2Length: table2Length,\n        data1Pad3: data1Pad3,\n        data1Pad4: data1Pad4,\n        headerSize: headerSize,\n        headerOffset: 0xe4,\n        record1SizeOffset: records1SizeOffset,\n        record1SizeLength: 9,\n        record1Size: records1Size,\n        offsetStart: offsetStart,\n        data2Id: data2Id,\n        table1Length2: table1Length2,\n        tableTotalLength: tableTotalLength,\n        hasSecondTable: hasSecondTable,\n        table1StartIndex:\n            tableStoreLength === 0 && !isArray\n                ? headerSize\n                : headerSize + data1RecordCount * 4,\n        table2StartIndex:\n            tableStoreLength === 0 && !isArray\n                ? headerSize + data1RecordCount * records1Size\n                : headerSize +\n                  data1RecordCount * 4 +\n                  data1RecordCount * records1Size,\n        recordWords: data2RecordWords,\n        recordCapacity: data2RecordCapacity,\n        numMembers: data2IndexEntries,\n        nextRecordToUse: nextRecordToUse,\n        hasThirdTable: false\n    };\n};\nM19TableHeaderStrategy.parseHeaderAttributesFromSchema = (\n    schema,\n    data,\n    header\n) => {\n    if (header.isArray) {\n        return {\n            headerSize: header.headerSize,\n            record1Size: header.record1Size,\n            table1StartIndex: header.table1StartIndex,\n            table2StartIndex: header.table2StartIndex\n        };\n    } else {\n        let headerSize =\n            header.headerOffset +\n            schema.numMembers * 4 +\n            header.tableStoreLength;\n        const binaryData = utilService.getBitArray(data.slice(0, headerSize));\n        let records1Size = utilService.bin2dec(\n            binaryData.slice(\n                header.record1SizeOffset,\n                header.record1SizeOffset + header.record1SizeLength\n            )\n        );\n        return {\n            headerSize: headerSize,\n            record1Size: records1Size,\n            table1StartIndex: headerSize,\n            table2StartIndex:\n                headerSize + header.data1RecordCount * records1Size\n        };\n    }\n};\nfunction readTableName(data) {\n    let name = '';\n    let i = 0;\n    do {\n        name += String.fromCharCode(data[i]);\n        i += 1;\n    } while (i < data.length && data[i] !== 0);\n    return name;\n}\nexport default M19TableHeaderStrategy;\n","import FranchiseTableStrategy from '../../common/table/FranchiseTableStrategy.js';\nimport M19TableHeaderStrategy from '../../common/header/m19/M19TableHeaderStrategy.js';\n/**\n * @type {TableStrategy}\n */\nlet M19TableStrategy = {};\nM19TableStrategy.parseHeader = M19TableHeaderStrategy.parseHeader;\nM19TableStrategy.parseHeaderAttributesFromSchema =\n    M19TableHeaderStrategy.parseHeaderAttributesFromSchema;\nM19TableStrategy.getTable2BinaryData =\n    FranchiseTableStrategy.getTable2BinaryData;\nM19TableStrategy.getTable3BinaryData =\n    FranchiseTableStrategy.getTable2BinaryData;\nM19TableStrategy.getMandatoryOffsets =\n    FranchiseTableStrategy.getMandatoryOffsets;\nM19TableStrategy.recalculateStringOffsets =\n    FranchiseTableStrategy.recalculateStringOffsets;\nM19TableStrategy.recalculateBlobOffsets =\n    FranchiseTableStrategy.recalculateBlobOffsets;\nexport default M19TableStrategy;\n","let FranchiseTable2FieldStrategy = {};\nFranchiseTable2FieldStrategy.getInitialUnformattedValue = (field, data) => {\n    return data.slice(\n        field.secondTableField.index,\n        field.secondTableField.index + field.offset.maxLength\n    );\n};\nFranchiseTable2FieldStrategy.setUnformattedValueFromFormatted = (\n    formattedValue,\n    maxLength\n) => {\n    let valuePadded = formattedValue;\n    if (valuePadded.length > maxLength) {\n        valuePadded = valuePadded.substring(0, maxLength);\n    }\n    const numberOfNullCharactersToAdd = maxLength - formattedValue.length;\n    for (let i = 0; i < numberOfNullCharactersToAdd; i++) {\n        valuePadded += String.fromCharCode(0);\n    }\n    return Buffer.from(valuePadded);\n};\nexport default FranchiseTable2FieldStrategy;\n","import FranchiseTable2FieldStrategy from '../../common/table2Field/FranchiseTable2FieldStrategy.js';\n/**\n * @type {Table2FieldStrategy}\n */\nlet M19Table2Strategy = {};\nM19Table2Strategy.getInitialUnformattedValue =\n    FranchiseTable2FieldStrategy.getInitialUnformattedValue;\nM19Table2Strategy.setUnformattedValueFromFormatted =\n    FranchiseTable2FieldStrategy.setUnformattedValueFromFormatted;\nexport default M19Table2Strategy;\n","import { BitView } from 'bit-buffer';\nimport fs from 'fs';\nimport path, { dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst slotsLookup = JSON.parse(\n    fs.readFileSync(\n        path.join(__dirname, '../../data/lookup-files/slotsLookup.json'),\n        'utf8'\n    )\n);\nconst fieldLookup = JSON.parse(\n    fs.readFileSync(\n        path.join(__dirname, '../../data/lookup-files/fieldLookup.json'),\n        'utf8'\n    )\n);\nconst enumLookup = JSON.parse(\n    fs.readFileSync(\n        path.join(__dirname, '../../data/lookup-files/enumLookup.json'),\n        'utf8'\n    )\n);\n\n// Field type constants\nconst FIELD_TYPE_INT = 0;\nconst FIELD_TYPE_STRING = 1;\nconst FIELD_TYPE_ARRAY = 4;\nconst FIELD_TYPE_FLOAT = 10;\n\nlet parser;\nlet offset = 0;\n\nfunction readBytes(length) {\n    const bytes = parser.subarray(offset, offset + length);\n    offset += length;\n    return bytes;\n}\n\nfunction readByte() {\n    return readBytes(1);\n}\n\nfunction decrementOffset(length = 1) {\n    offset -= length;\n}\n\nfunction readChviArray(arrayLength) {\n    let array = [];\n\n    for (let i = 0; i < arrayLength; i++) {\n        let recordObject = {};\n        let previousByte = -1;\n\n        do {\n            if (previousByte !== -1) {\n                decrementOffset();\n            }\n            let fieldKey = getUncompressedTextFromSixBitCompression(\n                readBytes(3)\n            );\n            let fieldName = findFieldByFieldKey(fieldKey);\n\n            let fieldType = readByte().readUInt8(0);\n\n            switch (fieldType) {\n                case FIELD_TYPE_INT: {\n                    let intValue = readModifiedLebEncodedNumber();\n\n                    if (!fieldName) {\n                        break;\n                    }\n\n                    // Check for special cases that require lookups (enums)\n                    if (fieldName === 'slotType') {\n                        intValue = slotsLookup[intValue];\n                    } else if (\n                        fieldName === 'loadoutType' ||\n                        fieldName === 'loadoutCategory'\n                    ) {\n                        intValue = findEnumValByNum(\n                            enumLookup[fieldName],\n                            intValue\n                        );\n                    }\n\n                    recordObject[fieldName] = intValue;\n                    break;\n                }\n                case FIELD_TYPE_STRING: {\n                    let stringLength = readModifiedLebEncodedNumber();\n                    let stringValue = readBytes(stringLength);\n                    // Remove null terminator from string\n                    stringValue = stringValue.slice(0, -1).toString('utf8');\n\n                    if (!fieldName) {\n                        break;\n                    }\n\n                    recordObject[fieldName] = stringValue;\n                    break;\n                }\n                case FIELD_TYPE_FLOAT: {\n                    let floatValue = readBytes(4).readFloatBE(0);\n\n                    if (!fieldName) {\n                        break;\n                    }\n\n                    recordObject[fieldName] = floatValue;\n                    break;\n                }\n                case FIELD_TYPE_ARRAY: {\n                    readByte(); // Unknown byte\n                    let arrayLength = readModifiedLebEncodedNumber();\n\n                    // Hacky way of handling empty arrays (they still have a recordcount of 1 for some reason)\n                    if (parser[offset] === 0x00) {\n                        recordObject[fieldName] = [];\n                        readByte();\n                        break;\n                    }\n                    let arrayObject = readChviArray(arrayLength);\n\n                    if (!fieldName) {\n                        break;\n                    }\n\n                    recordObject[fieldName] = arrayObject;\n                    break;\n                }\n                default:\n                    break;\n            }\n\n            previousByte = readByte().readUInt8(0);\n        } while (previousByte !== 0x00);\n\n        array.push(recordObject);\n    }\n\n    return array;\n}\n\nfunction findFieldByFieldKey(fieldKey) {\n    const fields = Object.keys(fieldLookup);\n\n    for (const field of fields) {\n        if (fieldLookup[field].key === fieldKey) {\n            return field;\n        }\n    }\n}\n\nfunction findEnumValByNum(object, enumNum) {\n    const fields = Object.keys(object);\n\n    for (const field of fields) {\n        if (object[field] === enumNum) {\n            return field;\n        }\n    }\n}\n\n// Function to read a CHVI record\nexport function readChviRecord(dataBuf) {\n    parser = dataBuf;\n    offset = 0;\n\n    let recordObject = {};\n\n    while (offset < parser.length) {\n        let fieldBytes = readBytes(3);\n        let fieldKey = getUncompressedTextFromSixBitCompression(fieldBytes);\n\n        let fieldName = findFieldByFieldKey(fieldKey);\n        let fieldType = readByte().readUInt8(0);\n\n        if (fieldType === 0x03) {\n            readByte();\n            continue;\n        }\n        switch (fieldType) {\n            case FIELD_TYPE_INT: {\n                let intValue = readModifiedLebEncodedNumber();\n\n                if (!fieldName) {\n                    break;\n                }\n\n                // Check for special cases that require lookups\n                if (fieldName === 'slotType') {\n                    intValue = slotsLookup[intValue];\n                } else if (\n                    fieldName === 'loadoutType' ||\n                    fieldName === 'loadoutCategory'\n                ) {\n                    intValue = enumLookup[fieldName][intValue];\n                }\n\n                recordObject[fieldName] = intValue;\n                break;\n            }\n            case FIELD_TYPE_STRING: {\n                let stringLength = readModifiedLebEncodedNumber();\n                let stringValue = readBytes(stringLength);\n                // Remove null terminator from string\n                stringValue = stringValue.slice(0, -1).toString('utf8');\n\n                if (!fieldName) {\n                    break;\n                }\n\n                recordObject[fieldName] = stringValue;\n                break;\n            }\n            case FIELD_TYPE_FLOAT: {\n                let floatValue = readBytes(4).readFloatBE(0);\n\n                if (!fieldName) {\n                    break;\n                }\n\n                recordObject[fieldName] = floatValue;\n                break;\n            }\n            case FIELD_TYPE_ARRAY: {\n                readByte();\n                let arrayLength = readModifiedLebEncodedNumber();\n                let arrayObject = readChviArray(arrayLength);\n\n                if (!fieldName) {\n                    break;\n                }\n\n                if (readByte().readUInt8(0) !== 0x00) {\n                    decrementOffset();\n                }\n\n                recordObject[fieldName] = arrayObject;\n                break;\n            }\n            default:\n                break;\n        }\n    }\n\n    return recordObject;\n}\n\nfunction getUncompressedTextFromSixBitCompression(data) {\n    const bv = new BitView(data, data.byteOffset);\n    bv.bigEndian = true;\n    const numCharacters = (data.length * 8) / 6;\n\n    let text = '';\n\n    for (let i = 0; i < numCharacters; i++) {\n        text += String.fromCharCode(getCharCode(i * 6));\n    }\n\n    return text;\n\n    function getCharCode(offset) {\n        return bv.getBits(offset, 6) + 32;\n    }\n}\n\nfunction readModifiedLebEncodedNumber() {\n    let byteArray = [];\n    let currentByte;\n\n    do {\n        currentByte = readByte().readUInt8(0);\n        byteArray.push(currentByte);\n    } while (currentByte & 0x80);\n\n    let value = 0;\n    let isNegative = false;\n\n    const buf = Buffer.from(byteArray);\n\n    for (let i = buf.length - 1; i >= 0; i--) {\n        let currentByte = buf.readUInt8(i);\n\n        if (i !== buf.length - 1) {\n            currentByte = currentByte ^ 0x80;\n        }\n\n        if (i === 0 && (currentByte & 0x40) === 0x40) {\n            currentByte = currentByte ^ 0x40;\n            isNegative = true;\n        }\n\n        let multiplicationFactor = 1 << (i * 6);\n\n        if (i > 1) {\n            multiplicationFactor = multiplicationFactor << 1;\n        }\n\n        value += currentByte * multiplicationFactor;\n\n        if (isNegative) {\n            value *= -1;\n        }\n    }\n\n    return value;\n}\n","import zlib from 'zlib';\nimport { readChviRecord } from '../../../services/TDB2Converter.js';\n\nlet FranchiseTable3FieldStrategy = {};\nFranchiseTable3FieldStrategy.getZlibDataStartIndex = (unformattedValue) => {\n    return unformattedValue.indexOf(Buffer.from([0x1f, 0x8b]));\n};\nFranchiseTable3FieldStrategy.getInitialUnformattedValue = (field, data) => {\n    return data.slice(\n        field.thirdTableField.index,\n        field.thirdTableField.index + field.offset.maxLength + 2\n    );\n    // extend maxLength + 2 because the first 2 bytes are the size of the zipped data\n};\nFranchiseTable3FieldStrategy.getFormattedValueFromUnformatted = (\n    unformattedValue\n) => {\n    try {\n        const zlibDataStartIndex =\n            FranchiseTable3FieldStrategy.getZlibDataStartIndex(\n                unformattedValue\n            );\n        // first few bytes are the size of the zipped data & other flags, so skip those.\n        const decompressedData = zlib.gunzipSync(\n            unformattedValue.subarray(zlibDataStartIndex)\n        );\n        // If the size is followed by 0x7 before the gzip-compressed data, the decompressed data is in TDB2 format, so use the TDB2 converter\n        if (unformattedValue[2] === 0x7) {\n            const jsonData = readChviRecord(decompressedData);\n            return JSON.stringify(jsonData);\n        }\n        // Otherwise, it's a standard JSON, so just convert the buffer to a string\n        return decompressedData.toString();\n    } catch (err) {\n        console.log(\n            `Error occurred while attempting to fetch formatted value. Returning an empty string. Full error: ${err}`\n        );\n        return '';\n    }\n};\nFranchiseTable3FieldStrategy.setUnformattedValueFromFormatted = (\n    formattedValue,\n    oldUnformattedValue,\n    maxLength\n) => {\n    let zippedData = zlib.gzipSync(formattedValue);\n    let padding = Buffer.alloc(maxLength - zippedData.length); // table3s all have the same length and are zero padded to the end.\n    let sizeBuf = Buffer.alloc(2);\n    sizeBuf.writeUInt16LE(zippedData.length);\n    return Buffer.concat([sizeBuf, zippedData, padding]);\n};\nexport default FranchiseTable3FieldStrategy;\n","import FranchiseTable3FieldStrategy from '../../common/table3Field/FranchiseTable3FieldStrategy.js';\n/**\n * @type {Table3FieldStrategy}\n */\nlet M24Table3Strategy = {};\nM24Table3Strategy.getInitialUnformattedValue =\n    FranchiseTable3FieldStrategy.getInitialUnformattedValue;\nM24Table3Strategy.getFormattedValueFromUnformatted =\n    FranchiseTable3FieldStrategy.getFormattedValueFromUnformatted;\nM24Table3Strategy.setUnformattedValueFromFormatted =\n    FranchiseTable3FieldStrategy.setUnformattedValueFromFormatted;\nexport default M24Table3Strategy;\n","import M19FileStrategy from './M19FileStrategy.js';\nimport M19TableStrategy from './M19TableStrategy.js';\nimport M19Table2FieldStrategy from './M19Table2FieldStrategy.js';\nimport M24Table3Strategy from '../m24/M24Table3FieldStrategy.js';\nexport const name = 'M19Strategy';\nexport { M19FileStrategy as file };\nexport { M19TableStrategy as table };\nexport { M19Table2FieldStrategy as table2Field };\nexport { M24Table3Strategy as table3Field };\nexport default {\n    name,\n    file: M19FileStrategy,\n    table: M19TableStrategy,\n    table2Field: M19Table2FieldStrategy,\n    table3Field: M24Table3Strategy\n};\n","import FranchiseFileStrategy from '../../common/file/FranchiseFileStrategy.js';\n/**\n * @type {FileStrategy}\n */\nlet M20FileStrategy = {};\nM20FileStrategy.postPackFile = FranchiseFileStrategy.postPackFile;\nM20FileStrategy.generateUnpackedContents =\n    FranchiseFileStrategy.generateUnpackedContents;\nexport default M20FileStrategy;\n","let M20TableHeaderStrategy = {};\nM20TableHeaderStrategy.parseHeader = (data) => {\n    const headerStart = 0x80;\n    const tableName = readTableName(data);\n    const isArray = tableName.indexOf('[]') >= 0;\n    const tableId = data.readUInt32BE(headerStart);\n    const tablePad1 = data.readUInt32BE(headerStart + 4);\n    const tableUnknown1 = data.readUInt32BE(headerStart + 8);\n    const tableUnknown2 = data.readUInt32BE(headerStart + 12);\n    // const tableUnknown3 = data.readUInt32BE(headerStart + 16);\n    const data1Id = readTableName(\n        data.slice(headerStart + 20, headerStart + 24)\n    );\n    const data1Type = data.readUInt32BE(headerStart + 24);\n    const data1Unknown1 = data.readUInt32BE(headerStart + 28);\n    const data1Flag1 = data[headerStart + 32];\n    const data1Flag2 = data[headerStart + 33];\n    const data1Flag3 = data[headerStart + 34];\n    const data1Flag4 = data[headerStart + 35];\n    const tableStoreLength = data.readUInt32BE(headerStart + 36);\n    let headerOffset = headerStart + 40;\n    let records1SizeOffset = 1720;\n    let tableStoreName = null;\n    if (tableStoreLength > 0) {\n        headerOffset += tableStoreLength;\n        records1SizeOffset += tableStoreLength * 8;\n        tableStoreName = readTableName(\n            data.slice(headerStart + 40, headerStart + 40 + tableStoreLength)\n        );\n    }\n    const data1Offset = data.readUInt32BE(headerOffset);\n    const data1TableId = data.readUInt32BE(headerOffset + 4);\n    const data1RecordCount = data.readUInt32BE(headerOffset + 8);\n    const data1Pad2 = data.readUInt32BE(headerOffset + 12);\n    const table1Length = data.readUInt32BE(headerOffset + 16);\n    const table2Length = data.readUInt32BE(headerOffset + 20);\n    const data1Pad3 = data.readUInt32BE(headerOffset + 24);\n    const data1Pad4 = data.readUInt32BE(headerOffset + 28);\n    const data2Id = readTableName(\n        data.slice(headerOffset + 32, headerOffset + 36)\n    );\n    const table1Length2 = data.readUInt32BE(headerOffset + 36);\n    const tableTotalLength = data.readUInt32BE(headerOffset + 40);\n    const data2RecordWords = data.readUInt32BE(headerOffset + 44);\n    const data2RecordCapacity = data.readUInt32BE(headerOffset + 48);\n    const data2IndexEntries = data.readUInt32BE(headerOffset + 52);\n    // const unknown4 = data.readUInt32BE(headerOffset + 56);\n    const nextRecordToUse = data.readUInt32BE(headerOffset + 60);\n    let offsetStart = 0xe8 + tableStoreLength;\n    const hasSecondTable = tableTotalLength > table1Length;\n    let headerSize = offsetStart;\n    let records1Size = data2RecordWords * 4;\n    let table1StartIndex, table2StartIndex;\n\n    if (!isArray) {\n        headerSize = headerSize + data2IndexEntries * 4;\n        table1StartIndex = headerSize;\n        table2StartIndex = headerSize + data1RecordCount * records1Size;\n    } else {\n        table1StartIndex = headerSize + data1RecordCount * 4;\n        table2StartIndex = table1StartIndex + data1RecordCount * records1Size;\n    }\n    return {\n        name: tableName,\n        isArray: isArray,\n        tableId: tableId,\n        tablePad1: tablePad1,\n        uniqueId: tablePad1,\n        tableUnknown1: tableUnknown1,\n        tableUnknown2: tableUnknown2,\n        data1Id: data1Id,\n        data1Type: data1Type,\n        data1Unknown1: data1Unknown1,\n        data1Flag1: data1Flag1,\n        data1Flag2: data1Flag2,\n        data1Flag3: data1Flag3,\n        data1Flag4: data1Flag4,\n        tableStoreLength: tableStoreLength,\n        tableStoreName: tableStoreName,\n        data1Offset: data1Offset,\n        data1TableId: data1TableId,\n        data1RecordCount: data1RecordCount,\n        data1Pad2: data1Pad2,\n        table1Length: table1Length,\n        table2Length: table2Length,\n        data1Pad3: data1Pad3,\n        data1Pad4: data1Pad4,\n        headerSize: headerSize,\n        headerOffset: 0xe8,\n        record1SizeOffset: records1SizeOffset,\n        record1SizeLength: 10,\n        record1Size: records1Size,\n        offsetStart: offsetStart,\n        data2Id: data2Id,\n        table1Length2: table1Length2,\n        tableTotalLength: tableTotalLength,\n        hasSecondTable: hasSecondTable,\n        table1StartIndex: table1StartIndex,\n        table2StartIndex: table2StartIndex,\n        recordWords: data2RecordWords,\n        recordCapacity: data2RecordCapacity,\n        numMembers: data2IndexEntries,\n        nextRecordToUse: nextRecordToUse,\n        hasThirdTable: false\n    };\n};\nM20TableHeaderStrategy.parseHeaderAttributesFromSchema = (\n    schema,\n    data,\n    header\n) => {\n    // headerSize = header.headerOffset + (schema.numMembers * 4) + header.tableStoreLength;\n    // const binaryData = utilService.getBitArray(data.slice(0, headerSize));\n    // let records1SizeNew = utilService.bin2dec(binaryData.slice(header.record1SizeOffset, header.record1SizeOffset + header.record1SizeLength));\n    return {\n        headerSize: header.headerSize,\n        record1Size: header.record1Size,\n        table1StartIndex: header.table1StartIndex,\n        table2StartIndex: header.table2StartIndex\n    };\n};\nfunction readTableName(data) {\n    let name = '';\n    let i = 0;\n    do {\n        name += String.fromCharCode(data[i]);\n        i += 1;\n    } while (i < data.length && data[i] !== 0);\n    return name;\n}\nexport default M20TableHeaderStrategy;\n","import FranchiseTableStrategy from '../../common/table/FranchiseTableStrategy.js';\nimport M20TableHeaderStrategy from '../../common/header/m20/M20TableHeaderStrategy.js';\n/**\n * @type {TableStrategy}\n */\nlet M20TableStrategy = {};\nM20TableStrategy.parseHeader = M20TableHeaderStrategy.parseHeader;\nM20TableStrategy.parseHeaderAttributesFromSchema =\n    M20TableHeaderStrategy.parseHeaderAttributesFromSchema;\nM20TableStrategy.getTable2BinaryData =\n    FranchiseTableStrategy.getTable2BinaryData;\nM20TableStrategy.getTable3BinaryData =\n    FranchiseTableStrategy.getTable2BinaryData;\nM20TableStrategy.getMandatoryOffsets =\n    FranchiseTableStrategy.getMandatoryOffsets;\nM20TableStrategy.recalculateStringOffsets =\n    FranchiseTableStrategy.recalculateStringOffsets;\nM20TableStrategy.recalculateBlobOffsets =\n    FranchiseTableStrategy.recalculateBlobOffsets;\nexport default M20TableStrategy;\n","import FranchiseTable2FieldStrategy from '../../common/table2Field/FranchiseTable2FieldStrategy.js';\n/**\n * @type {Table2FieldStrategy}\n */\nlet M20Table2Strategy = {};\nM20Table2Strategy.getInitialUnformattedValue =\n    FranchiseTable2FieldStrategy.getInitialUnformattedValue;\nM20Table2Strategy.setUnformattedValueFromFormatted =\n    FranchiseTable2FieldStrategy.setUnformattedValueFromFormatted;\nexport default M20Table2Strategy;\n","import M20FileStrategy from './M20FileStrategy.js';\nimport M20TableStrategy from './M20TableStrategy.js';\nimport M20Table2FieldStrategy from './M20Table2FieldStrategy.js';\nimport M24Table3FieldStrategy from '../m24/M24Table3FieldStrategy.js';\nexport const name = 'M20Strategy';\nexport { M20FileStrategy as file };\nexport { M20TableStrategy as table };\nexport { M20Table2FieldStrategy as table2Field };\nexport { M24Table3FieldStrategy as table3Field };\nexport default {\n    name,\n    file: M20FileStrategy,\n    table: M20TableStrategy,\n    table2Field: M20Table2FieldStrategy,\n    table3Field: M24Table3FieldStrategy\n};\n","import M20TableHeaderStrategy from '../m20/M20TableHeaderStrategy.js';\nlet M24TableHeaderStrategy = {};\nM24TableHeaderStrategy.parseHeader = (data) => {\n    let header = M20TableHeaderStrategy.parseHeader(data);\n    header.table3Length = header.data1Pad3;\n    header.hasThirdTable = header.table3Length > 0;\n    header.table3StartIndex = header.table2StartIndex + header.table2Length;\n    return header;\n};\nexport default M24TableHeaderStrategy;\n","import FranchiseTableStrategy from '../../common/table/FranchiseTableStrategy.js';\nimport M20TableHeaderStrategy from '../../common/header/m20/M20TableHeaderStrategy.js';\nimport M24TableHeaderStrategy from '../../common/header/m24/M24TableHeaderStrategy.js';\n/**\n * @type {TableStrategy}\n */\nlet M24TableStrategy = {};\nM24TableStrategy.parseHeader = M24TableHeaderStrategy.parseHeader;\nM24TableStrategy.parseHeaderAttributesFromSchema =\n    M20TableHeaderStrategy.parseHeaderAttributesFromSchema;\nM24TableStrategy.getTable2BinaryData =\n    FranchiseTableStrategy.getTable2BinaryData;\nM24TableStrategy.getTable3BinaryData =\n    FranchiseTableStrategy.getTable2BinaryData;\nM24TableStrategy.getMandatoryOffsets =\n    FranchiseTableStrategy.getMandatoryOffsets;\nM24TableStrategy.recalculateStringOffsets =\n    FranchiseTableStrategy.recalculateStringOffsets;\nM24TableStrategy.recalculateBlobOffsets =\n    FranchiseTableStrategy.recalculateBlobOffsets;\nexport default M24TableStrategy;\n","import M20FileStrategy from '../m20/M20FileStrategy.js';\nimport M24TableStrategy from './M24TableStrategy.js';\nimport M20Table2FieldStrategy from '../m20/M20Table2FieldStrategy.js';\nimport M24Table3FieldStrategy from './M24Table3FieldStrategy.js';\nexport const name = 'M24Strategy';\nexport { M20FileStrategy as file };\nexport { M24TableStrategy as table };\nexport { M20Table2FieldStrategy as table2Field };\nexport { M24Table3FieldStrategy as table3Field };\nexport default {\n    name,\n    file: M20FileStrategy,\n    table: M24TableStrategy,\n    table2Field: M20Table2FieldStrategy,\n    table3Field: M24Table3FieldStrategy\n};\n","// Required modules\nimport path, { dirname } from 'path';\nimport fs from 'fs';\nimport zlib from 'zlib';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * ISON processor class that handles game year specific interned string lookups\n */\nexport class IsonProcessor {\n    // ISON constants\n    static ISON_HEADER = 0x0d;\n    static ISON_OBJECT_START = 0x0f;\n    static ISON_OBJECT_END = 0x13;\n    static ISON_ARRAY_START = 0x0e;\n    static ISON_ARRAY_END = 0x12;\n    static ISON_INTERNED_STRING = 0x0a;\n    static ISON_STRING = 0x0b;\n    static ISON_KEYVALUEPAIR = 0x10;\n    static ISON_DOUBLE = 0x09;\n    static ISON_BYTE = 0x03;\n    static ISON_END = 0x11;\n\n    constructor(gameYear = 25) {\n        this.gameYear = gameYear;\n        this.stringLookup = null;\n        this.reverseStringLookup = {};\n        this.fileData = null;\n        this.isonOffset = 0;\n\n        // Static cache shared across all instances to avoid reloading the same data\n        if (!IsonProcessor.internedLookups) {\n            IsonProcessor.internedLookups = {};\n        }\n\n        // Initialize the lookup data for this game year\n        this.loadGameYearData();\n    }\n\n    /**\n     * Lazy load the interned string lookup for the specified game year\n     */\n    loadGameYearData() {\n        // Check if we already have this game year's lookup loaded into memory, and if not, load it from file\n        if (!IsonProcessor.internedLookups[this.gameYear]) {\n            const lookupFilePath = path.join(\n                __dirname,\n                `../../data/interned-strings/${this.gameYear.toString()}/lookup.json`\n            );\n            if (fs.existsSync(lookupFilePath)) {\n                IsonProcessor.internedLookups[this.gameYear] = JSON.parse(\n                    fs.readFileSync(lookupFilePath, 'utf8')\n                );\n            } else {\n                // If we don't have a lookup for this game year, recursively fall back to Madden 25 (which we should always have a lookup for)\n                if (this.gameYear !== 25) {\n                    IsonProcessor.internedLookups[this.gameYear] =\n                        this.loadGameYearDataStatic(25);\n                } else {\n                    throw new Error(\n                        `Interned string lookup file not found for game year ${this.gameYear} and no fallback available`\n                    );\n                }\n            }\n        }\n\n        this.stringLookup = IsonProcessor.internedLookups[this.gameYear];\n        this.populateReverseStringLookup();\n    }\n\n    /**\n     * Static helper method for loading game year data (used for fallback)\n     */\n    loadGameYearDataStatic(gameYear) {\n        if (!IsonProcessor.internedLookups[gameYear]) {\n            const lookupFilePath = path.join(\n                __dirname,\n                `../../data/interned-strings/${gameYear.toString()}/lookup.json`\n            );\n            if (fs.existsSync(lookupFilePath)) {\n                IsonProcessor.internedLookups[gameYear] = JSON.parse(\n                    fs.readFileSync(lookupFilePath, 'utf8')\n                );\n            } else {\n                throw new Error(\n                    `Interned string lookup file not found for game year ${gameYear}`\n                );\n            }\n        }\n        return IsonProcessor.internedLookups[gameYear];\n    }\n\n    /**\n     * Create a reverse lookup for JSON -> ISON conversion\n     */\n    populateReverseStringLookup() {\n        this.reverseStringLookup = {}; // Reset the lookup\n        if (this.stringLookup) {\n            for (let key in this.stringLookup) {\n                this.reverseStringLookup[this.stringLookup[key].toLowerCase()] =\n                    parseInt(key);\n            }\n        }\n    }\n\n    /**\n     * Convert ISON buffer to JSON object\n     */\n    isonVisualsToJson(fileBuf) {\n        this.isonOffset = 0;\n        this.fileData = fileBuf;\n\n        let obj = {};\n\n        // Read the first byte\n        const firstByte = this.readBytes(1).readUInt8(0);\n\n        // Check if the first byte is 0x0D (ISON_HEADER)\n        if (firstByte !== IsonProcessor.ISON_HEADER) {\n            // Not an ISON file, so return null\n            return null;\n        }\n\n        // Start reading the value into the object\n        obj = this.readValue();\n\n        this.readBytes(1).readUInt8(0);\n\n        return obj;\n    }\n\n    /**\n     * Convert JSON object to ISON buffer\n     */\n    jsonVisualsToIson(jsonObj) {\n        const isonBuffer = this.writeIsonFromJson(jsonObj);\n\n        // For 26 onwards, return the raw ISON buffer (strategy will handle compression).\n        // For 25, return the compressed buffer since it's just simple gzip\n        return this.gameYear >= 26\n            ? isonBuffer\n            : this.writeTable3IsonData(isonBuffer);\n    }\n\n    /**\n     * Function to write the ISON data to a compressed buffer\n     */\n    writeTable3IsonData(isonBuffer) {\n        const compressedData = zlib.gzipSync(isonBuffer);\n        return compressedData;\n    }\n\n    // Helper to write ISON file\n    writeIsonFromJson(jsonObj) {\n        // Estimate the buffer size; this can be optimized based on specific requirements.\n        let buffer = Buffer.alloc(1024 * 1024); // 1MB buffer for now\n        let offset = 0;\n\n        // Write the ISON header\n        offset = this.writeByte(buffer, offset, IsonProcessor.ISON_HEADER);\n\n        // Convert the JSON to ISON\n        offset = this.jsonToIson(jsonObj, buffer, offset);\n\n        // Write the ISON terminator\n        offset = this.writeByte(buffer, offset, IsonProcessor.ISON_END);\n\n        return buffer.subarray(0, offset);\n    }\n\n    // Helper to write bytes\n    writeBytes(buffer, offset, data) {\n        data.copy(buffer, offset);\n        return offset + data.length;\n    }\n\n    // Helper to write a single byte\n    writeByte(buffer, offset, byte) {\n        if (byte < 0 || byte > 255) {\n            byte = 0;\n        }\n\n        buffer.writeUInt8(byte, offset);\n        return offset + 1;\n    }\n\n    // Helper to write a double\n    writeDouble(buffer, offset, value) {\n        buffer.writeDoubleLE(value, offset);\n        return offset + 8;\n    }\n\n    // Helper to write a string\n    writeString(buffer, offset, value) {\n        if (\n            Object.prototype.hasOwnProperty.call(\n                this.reverseStringLookup,\n                value.toLowerCase()\n            )\n        ) {\n            offset = this.writeByte(\n                buffer,\n                offset,\n                IsonProcessor.ISON_INTERNED_STRING\n            ); // Write interned string type\n            const stringKey = this.reverseStringLookup[value.toLowerCase()];\n            buffer.writeUInt16LE(stringKey, offset); // Write the string key (2 bytes)\n            offset += 2;\n            return offset;\n        }\n\n        offset = this.writeByte(buffer, offset, IsonProcessor.ISON_STRING); // Write string type\n        const strBuffer = Buffer.from(value, 'utf8');\n        buffer.writeUInt32LE(strBuffer.length, offset); // Write the string length (4 bytes)\n        offset += 4;\n        return this.writeBytes(buffer, offset, strBuffer);\n    }\n\n    // Convert JSON back to ISON\n    jsonToIson(json, buffer, offset = 0) {\n        if (typeof json === 'object' && !Array.isArray(json)) {\n            offset = this.writeByte(\n                buffer,\n                offset,\n                IsonProcessor.ISON_OBJECT_START\n            ); // Write object start byte\n            for (const key in json) {\n                offset = this.writeByte(\n                    buffer,\n                    offset,\n                    IsonProcessor.ISON_KEYVALUEPAIR\n                ); // Write key-value pair marker\n                offset = this.writeString(buffer, offset, key); // Write the key (assume all keys are strings)\n                offset = this.jsonToIson(json[key], buffer, offset); // Write the value recursively\n            }\n            offset = this.writeByte(\n                buffer,\n                offset,\n                IsonProcessor.ISON_OBJECT_END\n            ); // Write object end byte\n        } else if (Array.isArray(json)) {\n            offset = this.writeByte(\n                buffer,\n                offset,\n                IsonProcessor.ISON_ARRAY_START\n            ); // Write array start byte\n            for (const item of json) {\n                offset = this.jsonToIson(item, buffer, offset); // Write each array item recursively\n            }\n            offset = this.writeByte(\n                buffer,\n                offset,\n                IsonProcessor.ISON_ARRAY_END\n            ); // Write array end byte\n        } else if (typeof json === 'string') {\n            if (\n                Object.prototype.hasOwnProperty.call(\n                    this.reverseStringLookup,\n                    json.toLowerCase()\n                )\n            ) {\n                offset = this.writeByte(\n                    buffer,\n                    offset,\n                    IsonProcessor.ISON_INTERNED_STRING\n                ); // Write interned string type\n                const stringKey = this.reverseStringLookup[json.toLowerCase()];\n                buffer.writeUInt16LE(stringKey, offset); // Write the string key (2 bytes)\n                offset += 2;\n            } else {\n                offset = this.writeString(buffer, offset, json); // Write the string value\n            }\n        } else if (typeof json === 'number' && !Number.isInteger(json)) {\n            offset = this.writeByte(buffer, offset, IsonProcessor.ISON_DOUBLE); // Write double type\n            offset = this.writeDouble(buffer, offset, json); // Write the double value\n        } else if (typeof json === 'boolean' || typeof json === 'number') {\n            offset = this.writeByte(buffer, offset, IsonProcessor.ISON_BYTE); // Write byte type for boolean or byte\n            offset = this.writeByte(buffer, offset, json); // Write the byte value\n        }\n        return offset;\n    }\n\n    // Function to read a specified number of bytes from the buffer\n    readBytes(length) {\n        const bytes = this.fileData.subarray(\n            this.isonOffset,\n            this.isonOffset + length\n        );\n        this.isonOffset += length;\n        return bytes;\n    }\n\n    // Decrement the offset\n    decrementOffset(length = 1) {\n        this.isonOffset -= length;\n    }\n\n    // Function to read the value depending on its type\n    readValue() {\n        const valueType = this.readBytes(1).readUInt8(0);\n\n        if (valueType === IsonProcessor.ISON_INTERNED_STRING) {\n            const stringKey = this.readBytes(2).readUInt16LE(0);\n\n            if (\n                !Object.prototype.hasOwnProperty.call(\n                    this.stringLookup,\n                    stringKey\n                )\n            ) {\n                return 'UnkString';\n            }\n            return this.stringLookup[stringKey]; // Return the interned string from the lookup\n        } else if (valueType === IsonProcessor.ISON_STRING) {\n            const stringLength = this.readBytes(4).readUInt32LE(0);\n            return this.readBytes(stringLength).toString('utf8'); // Read and return the full string\n        } else if (valueType === IsonProcessor.ISON_DOUBLE) {\n            return this.readBytes(8).readDoubleLE(0); // Read and return a double value\n        } else if (valueType === IsonProcessor.ISON_BYTE) {\n            return this.readBytes(1).readUInt8(0); // Read and return a byte value\n        } else if (valueType === IsonProcessor.ISON_OBJECT_START) {\n            return this.readObject(); // Recursively read an object\n        } else if (valueType === IsonProcessor.ISON_ARRAY_START) {\n            return this.readArray(); // Recursively read an array\n        }\n\n        return null;\n    }\n\n    // Function to read an array\n    readArray() {\n        let arr = [];\n        let byte;\n\n        do {\n            byte = this.readBytes(1).readUInt8(0);\n            if (byte !== IsonProcessor.ISON_ARRAY_END) {\n                this.decrementOffset(1); // Decrement offset to re-read this byte for the next value type\n                arr.push(this.readValue()); // Read the value and push it to the array\n            }\n        } while (byte !== IsonProcessor.ISON_ARRAY_END);\n\n        return arr; // Return the constructed array\n    }\n\n    // Function to read an object\n    readObject() {\n        let obj = {};\n        let byte;\n\n        do {\n            byte = this.readBytes(1).readUInt8(0);\n            if (byte === IsonProcessor.ISON_KEYVALUEPAIR) {\n                const key = this.readValue(); // Read the key\n                const value = this.readValue(); // Read the corresponding value\n                obj[key] = value; // Assign key-value pair to the object\n            } else if (byte !== IsonProcessor.ISON_OBJECT_END) {\n                // If we haven't reached the object end, put the byte back and continue reading\n                this.decrementOffset(1);\n                this.readValue(); // Continue reading values (this might be nested structures)\n            }\n        } while (byte !== IsonProcessor.ISON_OBJECT_END);\n\n        return obj; // Return the constructed object\n    }\n}\n\n// Backward compatibility functions that create instances as needed. I don't think these will be needed but they're here just in case.\nexport function isonVisualsToJson(fileBuf, gameYear = 25) {\n    const processor = new IsonProcessor(gameYear);\n    return processor.isonVisualsToJson(fileBuf);\n}\n\nexport function jsonVisualsToIson(jsonObj, gameYear = 25) {\n    const processor = new IsonProcessor(gameYear);\n    return processor.jsonVisualsToIson(jsonObj);\n}\n","import zlib from 'zlib';\nimport { IsonProcessor } from '../../../services/isonProcessor.js';\n\nlet FranchiseTable3FieldStrategy = {};\n// Create a single IsonProcessor instance for M25 and reuse it for better performance\nconst isonProcessor = new IsonProcessor(25);\n\nFranchiseTable3FieldStrategy.getZlibDataStartIndex = (unformattedValue) => {\n    return unformattedValue.indexOf(Buffer.from([0x1f, 0x8b]));\n};\n\nFranchiseTable3FieldStrategy.getInitialUnformattedValue = (field, data) => {\n    return data.slice(\n        field.thirdTableField.index,\n        field.thirdTableField.index + field.offset.maxLength + 2\n    );\n    // extend maxLength + 2 because the first 2 bytes are the size of the zipped data\n};\n\nFranchiseTable3FieldStrategy.getFormattedValueFromUnformatted = (\n    unformattedValue\n) => {\n    // First two bytes are the size of the zipped data, so skip those and get the raw ISON buffer\n    const zlibDataStartIndex =\n        FranchiseTable3FieldStrategy.getZlibDataStartIndex(unformattedValue);\n    const isonBuf = zlib.gunzipSync(\n        unformattedValue.subarray(zlibDataStartIndex)\n    );\n    // Convert the ISON buffer to a JSON object using the class instance\n    const jsonObj = isonProcessor.isonVisualsToJson(isonBuf);\n    return JSON.stringify(jsonObj);\n};\n\nFranchiseTable3FieldStrategy.setUnformattedValueFromFormatted = (\n    formattedValue,\n    oldUnformattedValue,\n    maxLength\n) => {\n    // Parse the JSON string into a JSON object\n    let jsonObj = JSON.parse(formattedValue);\n    // Convert the object into an ISON buffer using the class instance\n    let isonBuf = isonProcessor.jsonVisualsToIson(jsonObj);\n    let padding = Buffer.alloc(maxLength - isonBuf.length); // table3s all have the same length and are zero padded to the end.\n    let sizeBuf = Buffer.alloc(2);\n    sizeBuf.writeUInt16LE(isonBuf.length);\n    return Buffer.concat([sizeBuf, isonBuf, padding]);\n};\n\nexport default FranchiseTable3FieldStrategy;\n","import FranchiseTable3FieldStrategy from '../../common/table3Field/FranchiseIsonTable3FieldStrategy.js';\n/**\n * @type {Table3FieldStrategy}\n */\nlet M25Table3Strategy = {};\nM25Table3Strategy.getInitialUnformattedValue =\n    FranchiseTable3FieldStrategy.getInitialUnformattedValue;\nM25Table3Strategy.getFormattedValueFromUnformatted =\n    FranchiseTable3FieldStrategy.getFormattedValueFromUnformatted;\nM25Table3Strategy.setUnformattedValueFromFormatted =\n    FranchiseTable3FieldStrategy.setUnformattedValueFromFormatted;\nexport default M25Table3Strategy;\n","import M20FileStrategy from '../m20/M20FileStrategy.js';\nimport M24TableStrategy from '../m24/M24TableStrategy.js';\nimport M20Table2FieldStrategy from '../m20/M20Table2FieldStrategy.js';\nimport M25Table3FieldStrategy from './M25Table3FieldStrategy.js';\nexport const name = 'M24Strategy';\nexport { M20FileStrategy as file };\nexport { M24TableStrategy as table };\nexport { M20Table2FieldStrategy as table2Field };\nexport { M25Table3FieldStrategy as table3Field };\nexport default {\n    name,\n    file: M20FileStrategy,\n    table: M24TableStrategy,\n    table2Field: M20Table2FieldStrategy,\n    table3Field: M25Table3FieldStrategy\n};\n","import zlib from 'zlib';\nimport fs from 'fs';\nimport path, { dirname } from 'path';\nimport { IsonProcessor } from '../../../services/isonProcessor.js';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nlet FranchiseZstdTable3FieldStrategy = {};\nlet dictionary = fs.readFileSync(\n    path.join(__dirname, '../../../../data/zstd-dicts/26/dict.bin')\n);\n// Create a single IsonProcessor instance for M26 and reuse it for better performance\nconst isonProcessor = new IsonProcessor(26);\n\nFranchiseZstdTable3FieldStrategy.getZstdDataStartIndex = (unformattedValue) => {\n    return unformattedValue.indexOf(Buffer.from([0x28, 0xb5, 0x2f, 0xfd]));\n};\n\nFranchiseZstdTable3FieldStrategy.getInitialUnformattedValue = (\n    field,\n    data,\n    overflowField\n) => {\n    // extend maxLength + 2 because the first 2 bytes are the size of the compressed data\n    const table3InitialData = data.slice(\n        field.thirdTableField.index,\n        field.thirdTableField.index + field.offset.maxLength + 2\n    );\n\n    // If an overflow field exists, concatenate its data to get the full unformatted value\n    if (overflowField) {\n        const overflowData = data.slice(\n            overflowField.thirdTableField.index,\n            overflowField.thirdTableField.index +\n                overflowField.offset.maxLength +\n                2\n        );\n        return Buffer.concat([table3InitialData, overflowData]);\n    }\n\n    // Otherwise, just return the initial data\n    return table3InitialData;\n};\n\nFranchiseZstdTable3FieldStrategy.getFormattedValueFromUnformatted = (\n    unformattedValue\n) => {\n    // First two bytes are the size of the zipped data, so skip those and get the raw ISON buffer\n    const zstdDataStartIndex =\n        FranchiseZstdTable3FieldStrategy.getZstdDataStartIndex(\n            unformattedValue\n        );\n    // Zstd decoder cannot handle extra padding bytes, so we need to get the exact number of bytes\n    const length = unformattedValue.readUInt16LE(0);\n\n    const isonBuf = zlib.zstdDecompressSync(\n        unformattedValue.subarray(\n            zstdDataStartIndex,\n            zstdDataStartIndex + length\n        ),\n        { dictionary: dictionary }\n    );\n\n    // Convert the ISON buffer to a JSON object using the class instance\n    const jsonObj = isonProcessor.isonVisualsToJson(isonBuf);\n    return JSON.stringify(jsonObj);\n};\n\nFranchiseZstdTable3FieldStrategy.setUnformattedValueFromFormatted = (\n    formattedValue,\n    oldUnformattedValue,\n    maxLength\n) => {\n    // Parse the JSON string into a JSON object\n    let jsonObj = JSON.parse(formattedValue);\n    // Convert the object into an ISON buffer using the class instance\n    let isonBuf = isonProcessor.jsonVisualsToIson(jsonObj);\n\n    // Create the zstd-compressed buffer\n    let compressedBuf = zlib.zstdCompressSync(isonBuf, {\n        dictionary: dictionary\n    });\n\n    // Some larger formatted values may require a higher compression level to fit within the field\n    // We use this check instead of always using the higher compression level for performance reasons\n    if (compressedBuf.length > maxLength) {\n        compressedBuf = zlib.zstdCompressSync(isonBuf, {\n            dictionary: dictionary,\n            params: { [zlib.constants.ZSTD_c_compressionLevel]: 19 }\n        });\n\n        // If it still doesn't fit, return just the size + buffer so it can be handled via overflow record\n        if (compressedBuf.length > maxLength) {\n            const sizeBuf = Buffer.alloc(2);\n            sizeBuf.writeUInt16LE(compressedBuf.length);\n            return Buffer.concat([sizeBuf, compressedBuf]);\n        }\n    }\n\n    let padding = Buffer.alloc(maxLength - compressedBuf.length); // table3s all have the same length and are zero padded to the end.\n    let sizeBuf = Buffer.alloc(2);\n    sizeBuf.writeUInt16LE(compressedBuf.length);\n    return Buffer.concat([sizeBuf, compressedBuf, padding]);\n};\n\nexport default FranchiseZstdTable3FieldStrategy;\n","import FranchiseTable3FieldStrategy from '../../common/table3Field/FranchiseZstdTable3FieldStrategy.js';\n/**\n * @type {Table3FieldStrategy}\n */\nlet M26Table3Strategy = {};\nM26Table3Strategy.getInitialUnformattedValue =\n    FranchiseTable3FieldStrategy.getInitialUnformattedValue;\nM26Table3Strategy.getFormattedValueFromUnformatted =\n    FranchiseTable3FieldStrategy.getFormattedValueFromUnformatted;\nM26Table3Strategy.setUnformattedValueFromFormatted =\n    FranchiseTable3FieldStrategy.setUnformattedValueFromFormatted;\nexport default M26Table3Strategy;\n","import M20FileStrategy from '../m20/M20FileStrategy.js';\nimport M24TableStrategy from '../m24/M24TableStrategy.js';\nimport M20Table2FieldStrategy from '../m20/M20Table2FieldStrategy.js';\nimport M26Table3FieldStrategy from './M26Table3FieldStrategy.js';\nexport const name = 'M26Strategy';\nexport { M20FileStrategy as file };\nexport { M24TableStrategy as table };\nexport { M20Table2FieldStrategy as table2Field };\nexport { M26Table3FieldStrategy as table3Field };\nexport default {\n    name,\n    file: M20FileStrategy,\n    table: M24TableStrategy,\n    table2Field: M20Table2FieldStrategy,\n    table3Field: M26Table3FieldStrategy\n};\n","import CommonFileStrategy from './CommonFileStrategy.js';\nlet FTCFileStrategy = {};\nFTCFileStrategy.generateUnpackedContents =\n    CommonFileStrategy.generateUnpackedContents;\nFTCFileStrategy.postPackFile = (originalData, newData) => {\n    return newData;\n};\nexport default FTCFileStrategy;\n","import FTCFileStrategy from '../../common/file/FTCFileStrategy.js';\n/**\n * @type {FileStrategy}\n */\nlet M19FTCFileStrategy = {};\nM19FTCFileStrategy.postPackFile = FTCFileStrategy.postPackFile;\nM19FTCFileStrategy.generateUnpackedContents =\n    FTCFileStrategy.generateUnpackedContents;\nexport default M19FTCFileStrategy;\n","import CommonAlgorithms from '../CommonAlgorithms.js';\nlet FTCTableStrategy = {};\nFTCTableStrategy.getTable2BinaryData = (table2Records, fullTable2Buffer) => {\n    return [CommonAlgorithms.save(table2Records, fullTable2Buffer)];\n};\nFTCTableStrategy.getMandatoryOffsets = (offsets) => {\n    return offsets\n        .filter((offset) => {\n            return offset.valueInSecondTable;\n        })\n        .map((offset) => {\n            return offset.name;\n        });\n};\nexport default FTCTableStrategy;\n","import M19TableHeaderStrategy from '../../common/header/m19/M19TableHeaderStrategy.js';\nimport FTCTableStrategy from '../../common/table/FTCTableStrategy.js';\n/**\n * @type {TableStrategy}\n */\nlet M19FTCTableStrategy = {};\nM19FTCTableStrategy.parseHeader = M19TableHeaderStrategy.parseHeader;\nM19FTCTableStrategy.parseHeaderAttributesFromSchema =\n    M19TableHeaderStrategy.parseHeaderAttributesFromSchema;\nM19FTCTableStrategy.getTable2BinaryData = FTCTableStrategy.getTable2BinaryData;\nM19FTCTableStrategy.getTable3BinaryData = FTCTableStrategy.getTable2BinaryData;\nM19FTCTableStrategy.getMandatoryOffsets = FTCTableStrategy.getMandatoryOffsets;\nM19FTCTableStrategy.recalculateStringOffsets = () => {};\nexport default M19FTCTableStrategy;\n","let FTCTable2FieldStrategy = {};\nFTCTable2FieldStrategy.getInitialUnformattedValue = (field, data) => {\n    let fieldData = data.slice(\n        field.secondTableField.index,\n        field.secondTableField.index + field.offset.maxLength\n    );\n    const endOfFieldIndex = fieldData.indexOf(0x00);\n    if (endOfFieldIndex >= 0) {\n        // if there's a match, break the string early, making sure to include the 0s from the '00'.\n        // All table2 fields include the trailing 0x00.\n        fieldData = fieldData.slice(0, endOfFieldIndex + 1);\n    }\n    return fieldData;\n};\nFTCTable2FieldStrategy.setUnformattedValueFromFormatted = (\n    formattedValue,\n    maxLength\n) => {\n    if (formattedValue.length >= maxLength) {\n        // FTC strings cannot equal max length because the last character must be the null character.\n        formattedValue = formattedValue.substring(0, maxLength - 1);\n    }\n    return Buffer.from(formattedValue + '\\u0000');\n};\nexport default FTCTable2FieldStrategy;\n","import FTCTable2FieldStrategy from '../../common/table2Field/FTCTable2FieldStrategy.js';\n/**\n * @type {Table2FieldStrategy}\n */\nlet M19FTCTable2FieldStrategy = {};\nM19FTCTable2FieldStrategy.getInitialUnformattedValue =\n    FTCTable2FieldStrategy.getInitialUnformattedValue;\nM19FTCTable2FieldStrategy.setUnformattedValueFromFormatted =\n    FTCTable2FieldStrategy.setUnformattedValueFromFormatted;\nexport default M19FTCTable2FieldStrategy;\n","import M19FTCFileStrategy from './M19FTCFileStrategy.js';\nimport M19FTCTableStrategy from './M19FTCTableStrategy.js';\nimport M19FTCTable2FieldStrategy from './M19FTCTable2FieldStrategy.js';\nimport M24Table3Strategy from '../../franchise/m24/M24Table3FieldStrategy.js';\nexport const name = 'M19FTCStrategy';\nexport { M19FTCFileStrategy as file };\nexport { M19FTCTableStrategy as table };\nexport { M19FTCTable2FieldStrategy as table2Field };\nexport { M24Table3Strategy as table3Field };\nexport default {\n    name,\n    file: M19FTCFileStrategy,\n    table: M19FTCTableStrategy,\n    table2Field: M19FTCTable2FieldStrategy,\n    table3Field: M24Table3Strategy\n};\n","import FTCFileStrategy from '../../common/file/FTCFileStrategy.js';\n/**\n * @type {FileStrategy}\n */\nlet M20FTCFileStrategy = {};\nM20FTCFileStrategy.postPackFile = FTCFileStrategy.postPackFile;\nM20FTCFileStrategy.generateUnpackedContents =\n    FTCFileStrategy.generateUnpackedContents;\nexport default M20FTCFileStrategy;\n","import M20TableHeaderStrategy from '../../common/header/m20/M20TableHeaderStrategy.js';\nimport M24TableHeaderStrategy from '../../common/header/m24/M24TableHeaderStrategy.js';\nimport FTCTableStrategy from '../../common/table/FTCTableStrategy.js';\n/**\n * @type {TableStrategy}\n */\nlet M20FTCTableStrategy = {};\nM20FTCTableStrategy.parseHeader = M24TableHeaderStrategy.parseHeader;\nM20FTCTableStrategy.parseHeaderAttributesFromSchema =\n    M20TableHeaderStrategy.parseHeaderAttributesFromSchema;\nM20FTCTableStrategy.getTable2BinaryData = FTCTableStrategy.getTable2BinaryData;\nM20FTCTableStrategy.getTable3BinaryData = FTCTableStrategy.getTable2BinaryData;\nM20FTCTableStrategy.getMandatoryOffsets = FTCTableStrategy.getMandatoryOffsets;\nM20FTCTableStrategy.recalculateStringOffsets = () => {};\nexport default M20FTCTableStrategy;\n","import FTCTable2FieldStrategy from '../../common/table2Field/FTCTable2FieldStrategy.js';\n/**\n * @type {Table2FieldStrategy}\n */\nlet M20FTCTable2FieldStrategy = {};\nM20FTCTable2FieldStrategy.getInitialUnformattedValue =\n    FTCTable2FieldStrategy.getInitialUnformattedValue;\nM20FTCTable2FieldStrategy.setUnformattedValueFromFormatted =\n    FTCTable2FieldStrategy.setUnformattedValueFromFormatted;\nexport default M20FTCTable2FieldStrategy;\n","import M20FTCFileStrategy from './M20FTCFileStrategy.js';\nimport M20FTCTableStrategy from './M20FTCTableStrategy.js';\nimport M20FTCTable2FieldStrategy from './M20FTCTable2FieldStrategy.js';\nimport M24Table3Strategy from '../../franchise/m24/M24Table3FieldStrategy.js';\nexport const name = 'M20FTCStrategy';\nexport { M20FTCFileStrategy as file };\nexport { M20FTCTableStrategy as table };\nexport { M20FTCTable2FieldStrategy as table2Field };\nexport { M24Table3Strategy as table3Field };\nexport default {\n    name,\n    file: M20FTCFileStrategy,\n    table: M20FTCTableStrategy,\n    table2Field: M20FTCTable2FieldStrategy,\n    table3Field: M24Table3Strategy\n};\n","import Constants from '../Constants.js';\nimport M19Strategy from './franchise/m19/M19Strategy.js';\nimport M20Strategy from './franchise/m20/M20Strategy.js';\nimport M24Strategy from './franchise/m24/M24Strategy.js';\nimport M25Strategy from './franchise/m25/M25Strategy.js';\nimport M26Strategy from './franchise/m26/M26Strategy.js';\nimport M19FTCStrategy from './franchise-common/m19/M19FTCStrategy.js';\nimport M20FTCStrategy from './franchise-common/m20/M20FTCStrategy.js';\n\n/**\n * @typedef FileStrategy\n * @property {function(any, any): any} postPackFile\n * @property {function(any, any): any} generateUnpackedContents\n *\n * @typedef {import('../FranchiseFileTable.js').FranchiseFileTableHeader} FranchiseFileTableHeader\n * @typedef TableStrategy\n * @property {function(any): FranchiseFileTableHeader} parseHeader\n * @property {function(any, any, any): {\n *  headerSize: any;\n *  record1Size: any;\n *  table1StartIndex: any;\n *  table2StartIndex: any;\n * }} parseHeaderAttributesFromSchema\n * @property {function(any, any): any[]} getTable2BinaryData\n * @property {function(any, any): any[]} getTable3BinaryData\n * @property {function(any): any[]} getMandatoryOffsets\n * @property {function(any, any): void} recalculateStringOffsets\n * @property {function(any, any): void} recalculateBlobOffsets\n *\n * @typedef Table2FieldStrategy\n * @property {function(any, any): any} getInitialUnformattedValue\n * @property {function(any, any): any} setUnformattedValueFromFormatted\n *\n * @typedef Table3FieldStrategy\n * @property {function(any, any): any} getInitialUnformattedValue\n * @property {function(any): any} getFormattedValueFromUnformatted\n * @property {function(any, any, any): any} setUnformattedValueFromFormatted\n *\n * @typedef GameStrategy\n * @property {string} name\n * @property {FileStrategy} file\n * @property {TableStrategy} table\n * @property {Table2FieldStrategy} table2Field\n * @property {Table3FieldStrategy} table3Field\n */\n\nlet StrategyPicker = {};\n/**\n * @returns GameStrategy\n */\nStrategyPicker.pick = (type) => {\n    if (type.format === Constants.FORMAT.FRANCHISE) {\n        switch (type.year) {\n            case 19:\n                return M19Strategy;\n            case 20:\n            case 21:\n            case 22:\n            case 23:\n            default:\n                return M20Strategy;\n            case 24:\n                return M24Strategy;\n            case 25:\n                return M25Strategy;\n            case 26:\n                return M26Strategy;\n        }\n    } else {\n        switch (type.year) {\n            case 19:\n                return M19FTCStrategy;\n            case 20:\n            case 21:\n            default:\n                return M20FTCStrategy;\n        }\n    }\n};\nexport default StrategyPicker;\n","/**\n * @typedef {import('./FranchiseFile').SchemaMetadata} SchemaMetadata\n */\n\n/**\n * @typedef {Object} SettingsParam\n * @property {boolean?} [saveOnChange]\n * @property {SchemaMetadata?} [schemaOverride]\n * @property {string?} [schemaDirectory]\n * @property {boolean?} [autoParse]\n * @property {boolean?} [autoUnempty]\n */\nclass FranchiseFileSettings {\n    /** @param {SettingsParam} settings */\n    constructor(settings) {\n        /** @type {boolean} */\n        this.saveOnChange =\n            settings && settings.saveOnChange ? settings.saveOnChange : false;\n        /** @type {SchemaMetadata | false} */\n        this.schemaOverride =\n            settings && settings.schemaOverride\n                ? settings.schemaOverride\n                : false;\n        /** @type {string | false} */\n        this.schemaDirectory =\n            settings && settings.schemaDirectory\n                ? settings.schemaDirectory\n                : false;\n        /** @type {boolean} */\n        this.useNewSchemaGeneration = settings?.useNewSchemaGeneration ?? false;\n        /** @type {Object} */\n        this.schemaFileMap = settings?.schemaFileMap || {};\n        /** @type {Object[]} */\n        this.extraSchemas = settings?.extraSchemas || undefined;\n        /** @type {boolean} */\n        this.autoParse =\n            settings &&\n            settings.autoParse !== null &&\n            settings.autoParse !== undefined\n                ? settings.autoParse\n                : true;\n        /** @type {boolean} */\n        this.autoUnempty =\n            settings &&\n            settings.autoUnempty !== null &&\n            settings.autoUnempty !== undefined\n                ? settings.autoUnempty\n                : false;\n        /** @type {number} */\n        this.gameYearOverride =\n            settings &&\n            settings.gameYearOverride !== null &&\n            settings.gameYearOverride !== undefined\n                ? settings.gameYearOverride\n                : null;\n    }\n}\nexport default FranchiseFileSettings;\n","import fs from 'fs';\nimport path, { dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst SCHEMA_DIRECTORY = path.join(__dirname, '../../data/schemas');\nlet schemaPicker = {};\n/** @param {number} gameYear @param {number} major @param {number} minor @param {FranchiseFileSettings?} [settings] @returns {SchemaMetadata?} */\nschemaPicker.pick = (gameYear, major, minor, settings) => {\n    let schemaDirectories = [SCHEMA_DIRECTORY];\n    if (settings && settings.schemaDirectory) {\n        schemaDirectories.unshift(settings.schemaDirectory);\n    }\n    const schemasMeta = readSchemaDirectories(schemaDirectories);\n    return findApplicableSchema(schemasMeta, gameYear, major, minor);\n};\n/** @param {string} customDirectory @returns {Array<SchemaMetadata>} */\nschemaPicker.retrieveSchemas = (customDirectory) => {\n    let dirsToRead = [SCHEMA_DIRECTORY];\n    if (customDirectory) {\n        dirsToRead.push(customDirectory);\n    }\n    return readSchemaDirectories(dirsToRead).filter((schema) => {\n        return schema.major !== null && schema.minor !== null;\n    });\n};\nexport default schemaPicker;\nfunction readSchemaDirectories(dirpaths) {\n    let schemaMeta = [];\n    dirpaths.forEach(function (dirpath) {\n        const dirs = fs\n            .readdirSync(dirpath)\n            .filter((f) => fs.statSync(path.join(dirpath, f)).isDirectory());\n        const schemaMap = dirs.map((dir) => {\n            return getSchemasInFolder(path.join(dirpath, dir));\n        });\n        schemaMeta.push(schemaMap);\n        schemaMeta.push(getSchemasInFolder(dirpath));\n    });\n    return flatten(schemaMeta);\n    function flatten(arr) {\n        return arr.reduce(function (flat, toFlatten) {\n            return flat.concat(\n                Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten\n            );\n        }, []);\n    }\n}\nfunction getSchemasInFolder(dir) {\n    const files = fs.readdirSync(dir);\n    return files.map((file) => {\n        let regex = /(?:(?=M)M(\\d+)_(\\d+)_(\\d+)|(?!M)(\\d+)_(\\d+))/.exec(file);\n        return {\n            gameYear: regex && regex[1] ? parseInt(regex[1]) : null,\n            major:\n                regex && (regex[2] || regex[4])\n                    ? parseInt(regex[2] || regex[4])\n                    : null,\n            minor:\n                regex && (regex[3] || regex[5])\n                    ? parseInt(regex[3] || regex[5])\n                    : null,\n            path: path.join(dir, file)\n        };\n    });\n}\nfunction findApplicableSchema(schemaMeta, gameYear, major, minor) {\n    // check if game year exists\n    if (schemaMeta) {\n        const schemasToSearch = schemaMeta.filter((schema) => {\n            if (gameYear) {\n                return (\n                    schema.gameYear == gameYear ||\n                    (schema.gameYear === null &&\n                        schema.major !== null &&\n                        schema.minor !== null)\n                );\n            } else {\n                return schema.major !== null && schema.minor !== null;\n            }\n        });\n        // check if exact major exists\n        const exactMajor = schemasToSearch.filter((schema) => {\n            return schema.major == major;\n        });\n        if (exactMajor.length > 0) {\n            return getClosestMinor(exactMajor, minor);\n        } else {\n            const majors = schemasToSearch.map((schema) => {\n                return schema.major;\n            });\n            const closest = getClosestValue(majors, major);\n            const majorMatches = schemasToSearch.filter((schema) => {\n                return schema.major === closest;\n            });\n            if (majorMatches.length > 0) {\n                return getClosestMinor(majorMatches);\n            }\n        }\n        return null;\n    }\n    function getClosestMinor(arr, goal) {\n        const minors = arr.map((schema) => {\n            return schema.minor;\n        });\n        const closest = getClosestValue(minors, goal);\n        return arr.find((schema) => {\n            return schema.minor === closest;\n        });\n    }\n    function getClosestValue(arr, goal) {\n        return arr.reduce(function (prev, curr) {\n            return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;\n        });\n    }\n}\n","import fs from 'fs';\nimport zlib from 'zlib';\nimport Constants from './Constants.js';\nimport events from 'events';\nimport FranchiseSchema from './FranchiseSchema.js';\nimport utilService from './services/utilService.js';\nimport FranchiseFileTable from './FranchiseFileTable.js';\nimport StrategyPicker from './strategies/StrategyPicker.js';\nimport FranchiseFileSettings from './FranchiseFileSettings.js';\nimport schemaPickerService from './services/schemaPicker.js';\n\nconst EventEmitter = events.EventEmitter;\nconst COMPRESSED_DATA_OFFSET = 0x52;\n/**\n * @typedef {Object} AssetTable\n * @property {number} assetId\n * @property {number} reference\n */\n/**\n * @typedef {Object} RecordReference\n * @property {number} tableId\n * @property {number} rowNumber\n */\nclass FranchiseFile extends EventEmitter {\n    /**\n     *\n     * @param {string} filePath\n     * @param {FranchiseFileSettings?} [settings]\n     * @returns {Promise<FranchiseFile>}\n     */\n    static create(filePath, settings) {\n        return new Promise((resolve, reject) => {\n            const file = new FranchiseFile(filePath, settings);\n            if (file.settings.autoParse) {\n                file.on('ready', () => resolve(file));\n                file.on('error', (err) => reject(err));\n            } else {\n                resolve(file);\n            }\n        });\n    }\n    /**\n     *\n     * @param {string} filePath\n     * @param {FranchiseFileSettings} settings\n     */\n    constructor(filePath, settings) {\n        super();\n        /** @private @type {FranchiseFileSettings} */\n        this._settings = new FranchiseFileSettings(settings);\n        this.isLoaded = false;\n        if (Array.isArray(filePath)) {\n            /** @private @type {string} */\n            this._filePath = filePath[0];\n        } else {\n            this._filePath = filePath;\n        }\n        /** @private @type {Buffer} */\n        this._rawContents = fs.readFileSync(filePath);\n        /** @private @type {FileType} */\n        this._type = getFileType(this._rawContents, this._settings);\n        /** @private @type {number} */\n        this._gameYear = this._type.year;\n        /** @private @type {SchemaMetadata} */\n        this._expectedSchemaVersion = getSchemaMetadata(\n            this.rawContents,\n            this._type\n        );\n        if (this._type.compressed) {\n            /** @type {Buffer} */\n            this.packedFileContents = this._rawContents;\n            /** @type {Buffer} */\n            this.unpackedFileContents = unpackFile(\n                this._rawContents,\n                this._type\n            );\n            if (this._type.format === Constants.FORMAT.FRANCHISE_COMMON) {\n                const newType = getFileType(\n                    this.unpackedFileContents,\n                    this._settings\n                );\n                this._type.year = newType.year;\n                this._gameYear = this._type.year;\n                this._expectedSchemaVersion = getSchemaMetadata(\n                    this.unpackedFileContents,\n                    newType\n                );\n            }\n        } else {\n            this.unpackedFileContents = this._rawContents;\n        }\n        if (this._settings.autoParse) {\n            this.parse();\n        }\n    }\n    /**\n     * @returns {Promise<void>}\n     */\n    parse() {\n        const that = this;\n        this.strategy = StrategyPicker.pick(this.type);\n        let schemaPromise = new Promise((resolve, reject) => {\n            const schemaMeta = this.settings.schemaOverride\n                ? this.settings.schemaOverride\n                : this.expectedSchemaVersion;\n            const schemaPath =\n                this.settings.schemaOverride &&\n                this.settings.schemaOverride.path\n                    ? this.settings.schemaOverride.path\n                    : schemaPickerService.pick(\n                          this._gameYear,\n                          schemaMeta.major,\n                          schemaMeta.minor,\n                          this.settings\n                      ).path;\n            try {\n                this.schemaList = new FranchiseSchema(schemaPath, {\n                    extraSchemas: this.settings.extraSchemas,\n                    fileMap: this.settings.schemaFileMap,\n                    useNewSchemaGeneration: this.settings.useNewSchemaGeneration\n                });\n                this.schemaList.on('schemas:done', () => {\n                    resolve();\n                });\n                this.schemaList.evaluate();\n            } catch (err) {\n                reject(err);\n            }\n        });\n        let tablePromise = new Promise((resolve) => {\n            const firstCheck = 0x53;\n            const secondCheck = 0x50;\n            const thirdCheck = 0x42;\n            const fourthCheck = 0x46;\n            const altFirstCheck = 0x41;\n            const altSecondCheck = 0x53;\n            const altThirdCheck = 0x54;\n            const altFourthCheck = 0x4f;\n            const alt2FirstCheck = 0x53;\n            const alt2SecondCheck = 0x50;\n            const alt2ThirdCheck = 0x45;\n            const alt2FourthCheck = 0x58;\n            const tableIndicies = [];\n            for (let i = 0; i <= this.unpackedFileContents.length - 4; i += 1) {\n                if (\n                    (this.unpackedFileContents[i] === firstCheck &&\n                        this.unpackedFileContents[i + 1] === secondCheck &&\n                        this.unpackedFileContents[i + 2] === thirdCheck &&\n                        this.unpackedFileContents[i + 3] === fourthCheck) ||\n                    (this.unpackedFileContents[i] === altFirstCheck &&\n                        this.unpackedFileContents[i + 1] === altSecondCheck &&\n                        this.unpackedFileContents[i + 2] === altThirdCheck &&\n                        this.unpackedFileContents[i + 3] === altFourthCheck) ||\n                    (this.unpackedFileContents[i] === alt2FirstCheck &&\n                        this.unpackedFileContents[i + 1] === alt2SecondCheck &&\n                        this.unpackedFileContents[i + 2] === alt2ThirdCheck &&\n                        this.unpackedFileContents[i + 3] === alt2FourthCheck)\n                ) {\n                    const tableStart =\n                        i - getTableStartOffsetByGameYear(this._gameYear);\n                    tableIndicies.push(tableStart);\n                }\n            }\n            /** @type {Array<FranchiseFileTable>} */\n            this.tables = [];\n            for (let i = 0; i < tableIndicies.length; i++) {\n                const currentTable = tableIndicies[i];\n                const nextTable =\n                    tableIndicies.length > i + 1\n                        ? tableIndicies[i + 1]\n                        : this.unpackedFileContents.length - 8; // Ignore trailing 8 bytes on last table\n                const tableData = this.unpackedFileContents.slice(\n                    currentTable,\n                    nextTable\n                );\n                const newFranchiseTable = new FranchiseFileTable(\n                    tableData,\n                    currentTable,\n                    this._gameYear,\n                    this.strategy,\n                    this.settings\n                );\n                newFranchiseTable.index = i;\n                this.tables.push(newFranchiseTable);\n                newFranchiseTable.on('change', function () {\n                    this.isChanged = true;\n                    if (that.settings.saveOnChange) {\n                        that.packFile();\n                    }\n                    that.emit('change', newFranchiseTable);\n                });\n            }\n            resolve();\n        });\n        let assetTablePromise = new Promise((resolve) => {\n            /** @type {Array<AssetTable>} */\n            this.assetTable = [];\n            const assetTableOffset = this.unpackedFileContents.readUInt32BE(4);\n            const assetTableEntries =\n                this.unpackedFileContents.readUInt32BE(36);\n            let currentOffset = assetTableOffset;\n            for (let i = 0; i < assetTableEntries; i++) {\n                const assetId =\n                    this.unpackedFileContents.readUInt32BE(currentOffset);\n                const reference = this.unpackedFileContents.readUInt32BE(\n                    currentOffset + 4\n                );\n                this.assetTable.push({\n                    assetId: assetId,\n                    reference: reference\n                });\n                currentOffset += 8;\n            }\n            resolve();\n        });\n        Promise.all([schemaPromise, tablePromise, assetTablePromise])\n            .then(() => {\n                that.tables.forEach((table) => {\n                    const schema = that.schemaList.getSchema(table.name);\n                    if (schema) {\n                        table.schema = schema;\n                    }\n                });\n                that.isLoaded = true;\n                that.emit('ready');\n            })\n            .catch((err) => {\n                console.log(err);\n                that.emit('error', err);\n            });\n    }\n    /**\n     *\n     * @param {string} outputFilePath\n     * @param {object} options\n     * @returns {Promise<string>}\n     */\n    save(outputFilePath, options) {\n        return this.packFile(outputFilePath, options);\n    }\n    /**\n     *\n     * @param {string} outputFilePath\n     * @param {object} options\n     * @returns {Promise<string>}\n     */\n    packFile(outputFilePath, options) {\n        const that = this;\n        this.emit('saving');\n        return new Promise((resolve, reject) => {\n            this.unpackedFileContents =\n                this.strategy.file.generateUnpackedContents(\n                    this.tables,\n                    this.unpackedFileContents\n                );\n            let destination = outputFilePath ? outputFilePath : this.filePath;\n            _packFile(this.unpackedFileContents, options).then((data) => {\n                const dataToSave = this.strategy.file.postPackFile(\n                    this.packedFileContents,\n                    data\n                );\n                if (options && options.sync) {\n                    _saveSync(destination, dataToSave);\n                    postSaveActions();\n                } else {\n                    _save(destination, dataToSave, (err) => {\n                        postSaveActions(err);\n                    });\n                }\n                function postSaveActions(err) {\n                    if (err) {\n                        reject(err);\n                        that.emit('save-error');\n                    }\n                    resolve('saved');\n                    that.emit('saved');\n                }\n            });\n        });\n    }\n    /**\n     * @returns {Buffer}\n     */\n    get rawContents() {\n        return this._rawContents;\n    }\n    get openedFranchiseFile() {\n        return this._openedFranchiseFile;\n    }\n    /**\n     * @returns {string}\n     */\n    get filePath() {\n        return this._filePath;\n    }\n    /**\n     * @returns {FranchiseSchema}\n     */\n    get schema() {\n        return this.schemaList;\n    }\n    /**\n     * @returns {SchemaMetadata}\n     */\n    get expectedSchemaVersion() {\n        return this._expectedSchemaVersion;\n    }\n    /**\n     * @returns {FranchiseFileSettings}\n     */\n    get settings() {\n        return this._settings;\n    }\n    /**\n     * @returns {number}\n     */\n    get gameYear() {\n        return this._gameYear;\n    }\n    /**\n     * @returns {FileType}\n     */\n    get type() {\n        return this._type;\n    }\n    set filePath(path) {\n        this._filePath = path;\n    }\n    set settings(settings) {\n        this._settings = new FranchiseFileSettings(settings);\n    }\n    /**\n     *\n     * @param {string} name\n     * @returns {FranchiseFileTable?}\n     */\n    getTableByName(name) {\n        return this.tables.find((table) => {\n            return table.name === name;\n        });\n    }\n    /**\n     *\n     * @param {string} name\n     * @returns {Array<FranchiseFileTable>}\n     */\n    getAllTablesByName(name) {\n        return this.tables.filter((table) => {\n            return table.name === name;\n        });\n    }\n    /**\n     *\n     * @param {number} id\n     * @returns {FranchiseFileTable?}\n     */\n    getTableById(id) {\n        return this.tables.find((table) => {\n            return table.header && table.header.tableId === id;\n        });\n    }\n    /**\n     *\n     * @param {number} index\n     * @returns {FranchiseFileTable?}\n     */\n    getTableByIndex(index) {\n        return this.tables[index];\n    }\n    /**\n     *\n     * @param {number} id\n     * @returns {FranchiseFileTable?}\n     */\n    getTableByUniqueId(id) {\n        return this.tables.find((table) => {\n            return table.header && table.header.uniqueId === id;\n        });\n    }\n    /**\n     *\n     * @param {string} referenceValue\n     * @returns {RecordReference}\n     */\n    getReferencedRecord(referenceValue) {\n        const reference = utilService.getReferenceData(referenceValue);\n        return this.getTableById(reference.tableId)?.records[\n            reference.rowNumber\n        ];\n    }\n    /**\n     *\n     * @param {number} assetId\n     * @returns {RecordReference?}\n     */\n    getReferenceFromAssetId(assetId) {\n        const assetEntry = this.assetTable.find((assetEntry) => {\n            return assetEntry.assetId === assetId;\n        });\n        if (assetEntry) {\n            const referenceBinaryString = assetEntry.reference\n                .toString(2)\n                .padStart(32);\n            return utilService.getReferenceData(referenceBinaryString);\n        } else {\n            return null;\n        }\n    }\n    /**\n     * @typedef {Object} TableRecordReference\n     * @property {number} tableId\n     * @property {string} name\n     * @property {FranchiseFileTable} table\n     */\n    /**\n     *\n     * @param {number} tableId\n     * @param {number} recordIndex\n     * @returns {Array<TableRecordReference>}\n     */\n    getReferencesToRecord(tableId, recordIndex) {\n        const referencedTable = this.getTableById(tableId);\n        if (referencedTable) {\n            const fullBinary = utilService.getBinaryReferenceData(\n                tableId,\n                recordIndex\n            );\n            const hex = utilService.bin2hex(fullBinary).padStart(8, '0');\n            return this.tables\n                .filter((table) => {\n                    if (table.schema) {\n                        return (\n                            table.schema &&\n                            table.schema.attributes.find((attribute) => {\n                                // Generic record types can contain any table type\n                                return (\n                                    attribute.type === referencedTable.name ||\n                                    attribute.type === 'record'\n                                );\n                            })\n                        );\n                    } else if (table.isArray && referencedTable.schema) {\n                        // If the referenced table has a schema, we can check its base name.\n                        // Some array table names are by the base name like EnumTable[] can contain AwardTypeEnumTableEntry\n                        return (\n                            table.name.slice(0, table.name.length - 2) ===\n                                referencedTable.name ||\n                            table.name.slice(0, table.name.length - 2) ===\n                                referencedTable.schema.base\n                        );\n                    } else if (table.isArray) {\n                        return (\n                            table.name.slice(0, table.name.length - 2) ===\n                            referencedTable.name\n                        );\n                    }\n                })\n                .filter((table) => {\n                    return table.data.indexOf(hex, 0, 'hex') !== -1;\n                })\n                .map((table) => {\n                    return {\n                        tableId: table.header.tableId,\n                        name: table.name,\n                        table: table\n                    };\n                });\n        }\n    }\n}\nfunction getTableStartOffsetByGameYear(gameYear) {\n    switch (gameYear) {\n        case 19:\n            return 0x90;\n        case 20:\n        case 21:\n        default:\n            return 0x94;\n    }\n}\nfunction unpackFile(data, type) {\n    let offset = 0;\n    if (type.format === Constants.FORMAT.FRANCHISE) {\n        offset = COMPRESSED_DATA_OFFSET;\n    }\n    return zlib.inflateSync(data.slice(offset));\n}\nfunction _packFile(data, options) {\n    return new Promise((resolve, reject) => {\n        if (options && options.sync) {\n            const newData = zlib.deflateSync(data, {\n                windowBits: 15\n            });\n            resolve(newData);\n        } else {\n            zlib.deflate(\n                data,\n                {\n                    windowBits: 15\n                },\n                function (err, newData) {\n                    if (err) reject(err);\n                    resolve(newData);\n                }\n            );\n        }\n    });\n}\nfunction _save(destination, packedContents, callback) {\n    fs.writeFile(destination, packedContents, callback);\n}\nfunction _saveSync(destination, packedContents) {\n    fs.writeFileSync(destination, packedContents);\n}\n/**\n * @typedef {Object} FileType\n * @property {string} format\n * @property {number} year\n * @property {boolean} compressed\n */\n/**\n *\n * @param {Buffer} data\n * @param {FranchiseFileSettings} settings\n * @returns {FileType}\n */\nfunction getFileType(data, settings) {\n    const isDataCompressed = isCompressed(data);\n    const format = getFormat(data, isDataCompressed);\n    const year =\n        settings?.gameYearOverride ??\n        getGameYear(data, isDataCompressed, format);\n    return {\n        format: format,\n        compressed: isDataCompressed,\n        year: year\n    };\n}\n/**\n *\n * @param {Buffer} data\n * @returns {Boolean}\n */\nfunction isCompressed(data) {\n    const DECOMPRESSED_HEADER = Buffer.from([0x46, 0x72, 0x54, 0x6b]); // FrTk\n    if (Buffer.compare(data.slice(0, 4), DECOMPRESSED_HEADER) === 0) {\n        return false;\n    }\n    return true;\n}\n/**\n *\n * @param {Buffer} data\n * @param {Boolean} isCompressed\n * @returns {string}\n */\nfunction getFormat(data, isCompressed) {\n    if (isCompressed) {\n        const ZLIB_HEADER = Buffer.from([0x78, 0x9c]);\n        if (Buffer.compare(data.slice(0, 2), ZLIB_HEADER) === 0) {\n            return 'franchise-common';\n        } else {\n            return 'franchise';\n        }\n    } else {\n        // very simple check based on file length.\n        // This assumes the common files are smaller than 9,000 KB.\n        if (data.length > 0x895440) {\n            return 'franchise';\n        } else {\n            return 'franchise-common';\n        }\n    }\n}\n/**\n *\n * @param {Buffer} data\n * @param {Boolean} isCompressed\n * @param {string} format\n * @returns {number}\n */\nfunction getGameYear(data, isCompressed, format) {\n    const schemaMax = [\n        {\n            year: 19,\n            max: 95\n        },\n        {\n            year: 26,\n            max: 999\n        }\n    ];\n    if (isCompressed) {\n        // look at the max schemas per year. M19 schemas will be less than or equal to 95,\n        // while M20 schemas can be anywhere from 96 to 999 because the last schema hasn't been made yet.\n        // Once M21 releases, the M20 schema max will be updated with the final number.\n        if (format === Constants.FORMAT.FRANCHISE_COMMON) {\n            return null;\n        }\n        // M19 = RL12\n        // M20 = M20\n        // M21 = M21\n        const yearIdentifier = data.slice(0x22, 0x25);\n        if (yearIdentifier[0] === 0x52) {\n            return 19;\n        } else if (yearIdentifier[2] === 0x30) {\n            return 20;\n        } else if (yearIdentifier[2] === 0x31) {\n            return 21;\n        } else if (yearIdentifier[2] === 0x32) {\n            return 22;\n        } else if (yearIdentifier[2] === 0x33) {\n            return 23;\n        } else if (\n            yearIdentifier[2] === 0x34 ||\n            yearIdentifier[2] === 'd' ||\n            data[0x2a] === 0x34\n        ) {\n            return 24;\n        } else if (data[0x2a] === 0x35) {\n            // M25 has year indicator in a different location\n            return 25;\n        } else if (data[0x2a] === 0x36) {\n            return 26;\n        } else {\n            const schemaMajor = getCompressedSchema(data).major;\n            const year = schemaMax.find((schema) => {\n                return schema.max >= schemaMajor;\n            }).year;\n            return year;\n        }\n    } else {\n        const schemaMajor = getDecompressedM20Schema(data).major;\n        if (schemaMajor === 0) {\n            // M19 did not include schema info in uncompressed files.\n            return 19;\n        } else {\n            // M21 and M20 have very similar formats. We can tell M21 because it has a table with 'M21' in the name.\n            if (data.indexOf('M21') > -1) {\n                return 21;\n            } else {\n                return null;\n            }\n        }\n    }\n}\n/**\n * @typedef {Object} SchemaMetadata\n * @property {string?} gameYear\n * @property {number?} major\n * @property {number?} minor\n * @property {string?} path\n */\n/**\n *\n * @param {Buffer} data\n * @param {FileType} type\n * @returns {SchemaMetadata}\n */\nfunction getSchemaMetadata(data, type) {\n    let schemaMeta = {\n        gameYear: type.year\n    };\n    if (type.compressed) {\n        if (type.format === Constants.FORMAT.FRANCHISE_COMMON) {\n            // Compressed FTC files do not contain the schema information.\n            // We need to get it later, after we inflate the file.\n            return;\n        }\n        const schemaData = getCompressedSchema(data);\n        schemaMeta.major = schemaData.major;\n        schemaMeta.minor = schemaData.minor;\n    } else {\n        if (type.year === 19) {\n            // M19 did not include schema info in uncompressed files.\n            schemaMeta.major = 0;\n            schemaMeta.minor = 0;\n        } else {\n            const schemaData = getDecompressedM20Schema(data);\n            schemaMeta.major = schemaData.major;\n            schemaMeta.minor = schemaData.minor;\n        }\n    }\n    return schemaMeta;\n}\n/**\n * @typedef PartialSchemaMetadata\n * @property {number} major\n * @property {number} minor\n */\n/**\n *\n * @param {Buffer} data\n * @returns {PartialSchemaMetadata}\n */\nfunction getCompressedSchema(data) {\n    return {\n        major: data.readUInt32LE(0x3e),\n        minor: data.readUInt32LE(0x42)\n    };\n}\nfunction getDecompressedM20Schema(data) {\n    return {\n        major: data.readUInt32BE(0x2c),\n        minor: data.readUInt32BE(0x28)\n    };\n}\nexport default FranchiseFile;\n","import FranchiseFile from './FranchiseFile';\nimport FranchiseFileTable from './FranchiseFileTable';\nimport FranchiseFileRecord from './FranchiseFileRecord';\nimport FranchiseFileField from './FranchiseFileField';\nimport FranchiseFileSettings from './FranchiseFileSettings';\nimport FranchiseFileTable2Field from './FranchiseFileTable2Field';\nimport FranchiseFileTable3Field from './FranchiseFileTable3Field';\nimport FranchiseSchema from './FranchiseSchema';\nimport FranchiseEnum from './FranchiseEnum';\nimport FranchiseEnumValue from './FranchiseEnumValue';\nimport utilService from './services/utilService';\nimport { IsonProcessor } from './services/isonProcessor';\nimport { generateSchemaV2 } from './services/schemaGeneratorV2';\nimport schemaGenerator from './services/schemaGenerator';\nimport schemaPicker from './services/schemaPicker';\nimport { readChviRecord } from './services/TDB2Converter';\n\nconst create = FranchiseFile.create;\n\nexport {\n    create,\n    FranchiseEnum,\n    FranchiseEnumValue,\n    FranchiseFile,\n    FranchiseFileField,\n    FranchiseFileRecord,\n    FranchiseFileSettings,\n    FranchiseFileTable,\n    FranchiseFileTable2Field,\n    FranchiseFileTable3Field,\n    FranchiseSchema,\n    generateSchemaV2,\n    IsonProcessor,\n    readChviRecord,\n    schemaGenerator,\n    schemaPicker,\n    utilService\n};\n\nexport default FranchiseFile;\n"],"names":["BitView","parser","require$$0","__filename","fileURLToPath","__dirname","dirname","EventEmitter","pipeline","defaultOptions","METADATA_SYMBOL","xmlNode","fs","getLengthOfUnformattedValue","COMPRESSED_DATA_OFFSET","readTableName","FranchiseTable3FieldStrategy","name","M19Table2FieldStrategy","M20Table2FieldStrategy","M24Table3FieldStrategy","isonProcessor","M25Table3FieldStrategy","M26Table3FieldStrategy","schemaPickerService"],"mappings":"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","x_google_ignoreList":[1,5,6,8,9,10,11,12,13,14,15,16,17]}