@glimmer/program
Advanced tools
Comparing version 0.28.3 to 0.29.0
@@ -25,10 +25,23 @@ define('@glimmer/program', ['exports', '@glimmer/encoder'], function (exports, _glimmer_encoder) { 'use strict'; | ||
this.floats = []; | ||
this.negatives = []; | ||
} | ||
WriteOnlyConstants.prototype.float = function float(_float) { | ||
return this.floats.push(_float); | ||
var index = this.floats.indexOf(_float); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.floats.push(_float) - 1; | ||
}; | ||
WriteOnlyConstants.prototype.negative = function negative(_negative) { | ||
return this.negatives.push(_negative); | ||
}; | ||
WriteOnlyConstants.prototype.string = function string(value) { | ||
return this.strings.push(value); | ||
var index = this.strings.indexOf(value); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.strings.push(value) - 1; | ||
}; | ||
@@ -45,7 +58,15 @@ | ||
WriteOnlyConstants.prototype.array = function array(values) { | ||
return this.arrays.push(values); | ||
var index = this.arrays.indexOf(values); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.arrays.push(values) - 1; | ||
}; | ||
WriteOnlyConstants.prototype.table = function table(t) { | ||
return this.tables.push(t); | ||
var index = this.tables.indexOf(t); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.tables.push(t) - 1; | ||
}; | ||
@@ -59,3 +80,7 @@ | ||
WriteOnlyConstants.prototype.serializable = function serializable(value) { | ||
return this.serializables.push(value); | ||
var index = this.serializables.indexOf(value); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.serializables.push(value) - 1; | ||
}; | ||
@@ -70,3 +95,4 @@ | ||
serializables: this.serializables, | ||
floats: this.floats | ||
floats: this.floats, | ||
negatives: this.negatives | ||
}; | ||
@@ -89,2 +115,3 @@ }; | ||
this.floats = pool.floats; | ||
this.negatives = pool.negatives; | ||
this.resolved = this.handles.map(function () { | ||
@@ -98,7 +125,11 @@ return UNRESOLVED; | ||
RuntimeConstants.prototype.getFloat = function getFloat(value) { | ||
return this.floats[value - 1]; | ||
return this.floats[value]; | ||
}; | ||
RuntimeConstants.prototype.getNegative = function getNegative(value) { | ||
return this.negatives[value - 1]; | ||
}; | ||
RuntimeConstants.prototype.getString = function getString(value) { | ||
return this.strings[value - 1]; | ||
return this.strings[value]; | ||
}; | ||
@@ -117,7 +148,7 @@ | ||
RuntimeConstants.prototype.getArray = function getArray(value) { | ||
return this.arrays[value - 1]; | ||
return this.arrays[value]; | ||
}; | ||
RuntimeConstants.prototype.getSymbolTable = function getSymbolTable(value) { | ||
return this.tables[value - 1]; | ||
return this.tables[value]; | ||
}; | ||
@@ -136,3 +167,3 @@ | ||
RuntimeConstants.prototype.getSerializable = function getSerializable(s) { | ||
return this.serializables[s - 1]; | ||
return this.serializables[s]; | ||
}; | ||
@@ -157,2 +188,4 @@ | ||
_this.serializables = pool.serializables; | ||
_this.floats = pool.floats; | ||
_this.negatives = pool.negatives; | ||
_this.resolved = _this.handles.map(function () { | ||
@@ -167,4 +200,12 @@ return UNRESOLVED; | ||
Constants.prototype.getFloat = function getFloat(value) { | ||
return this.floats[value - 1]; | ||
}; | ||
Constants.prototype.getNegative = function getNegative(value) { | ||
return this.negatives[value - 1]; | ||
}; | ||
Constants.prototype.getString = function getString(value) { | ||
return this.strings[value - 1]; | ||
return this.strings[value]; | ||
}; | ||
@@ -183,7 +224,7 @@ | ||
Constants.prototype.getArray = function getArray(value) { | ||
return this.arrays[value - 1]; | ||
return this.arrays[value]; | ||
}; | ||
Constants.prototype.getSymbolTable = function getSymbolTable(value) { | ||
return this.tables[value - 1]; | ||
return this.tables[value]; | ||
}; | ||
@@ -202,3 +243,3 @@ | ||
Constants.prototype.getSerializable = function getSerializable(s) { | ||
return this.serializables[s - 1]; | ||
return this.serializables[s]; | ||
}; | ||
@@ -294,18 +335,49 @@ | ||
var STATE_OFFSET = 3; | ||
/** | ||
* The Heap is responsible for dynamically allocating | ||
* memory in which we read/write the VM's instructions | ||
* from/to. When we malloc we pass out a VMHandle, which | ||
* is used as an indirect way of accessing the memory during | ||
* execution of the VM. Internally we track the different | ||
* regions of the memory in an int array known as the table. | ||
* | ||
* The table has the following layout: | ||
* | ||
* | ... | table entry | | ||
* | ... | hp | size | scope size | state | | ||
* | ... | 0 | 122 | 3 | 0 | | ||
* handle ^ | | ^ region state (allocated, freed, purged) | ||
* region size ^ | | ||
* number of symbols ^ | ||
* | ||
* With this information we effectively have the ability to | ||
* control when we want to free memory. That being said you | ||
* can not free during execution as raw address are only | ||
* valid during the execution. This means you cannot close | ||
* over them as you will have a bad memory access exception. | ||
*/ | ||
var Heap = function () { | ||
function Heap() { | ||
function Heap(serializedHeap) { | ||
_classCallCheck$1(this, Heap); | ||
this.heap = []; | ||
this.offset = 0; | ||
this.handle = 0; | ||
/** | ||
* layout: | ||
* | ||
* - pointer into heap | ||
* - size | ||
* - scope size | ||
* - freed (0 or 1) | ||
*/ | ||
this.table = []; | ||
if (serializedHeap) { | ||
var buffer = serializedHeap.buffer, | ||
table = serializedHeap.table, | ||
handle = serializedHeap.handle; | ||
this.heap = new Uint16Array(buffer); | ||
this.table = table; | ||
this.offset = this.heap.length; | ||
this.handle = handle; | ||
} else { | ||
if (typeof Uint16Array !== 'undefined') { | ||
this.heap = new Uint16Array(0x100000); | ||
} else { | ||
// FIXME remove once we drop IE9 | ||
this.heap = new Array(0x100000); | ||
} | ||
this.table = []; | ||
} | ||
} | ||
@@ -369,3 +441,11 @@ | ||
}; | ||
/** | ||
* The heap uses the [Mark-Compact Algorithm](https://en.wikipedia.org/wiki/Mark-compact_algorithm) to shift | ||
* reachable memory to the bottom of the heap and freeable | ||
* memory to the top of the heap. When we have shifted all | ||
* the reachable memory to the top of the heap, we move the | ||
* offset to the next free position. | ||
*/ | ||
Heap.prototype.compact = function compact() { | ||
@@ -401,4 +481,10 @@ var compactedSize = 0; | ||
Heap.prototype.toArray = function toArray() { | ||
return this.heap.slice(); | ||
Heap.prototype.capture = function capture() { | ||
// Only called in eager mode | ||
var buffer = slice(this.heap, 0, this.offset); | ||
return { | ||
handle: this.handle, | ||
table: this.table, | ||
buffer: buffer | ||
}; | ||
}; | ||
@@ -454,2 +540,15 @@ | ||
}(WriteOnlyProgram); | ||
function slice(arr, start, end) { | ||
if (arr instanceof Uint16Array) { | ||
if (arr.slice !== undefined) { | ||
return arr.slice(start, end).buffer; | ||
} | ||
var ret = new Uint16Array(end); | ||
for (; start < end; start++) { | ||
ret[start] = arr[start]; | ||
} | ||
return ret.buffer; | ||
} | ||
return null; | ||
} | ||
@@ -470,2 +569,2 @@ exports.WriteOnlyConstants = WriteOnlyConstants; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xpbW1lci1wcm9ncmFtLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9jb25zdGFudHMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9vcGNvZGUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9wcm9ncmFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFJ1bnRpbWVSZXNvbHZlciB9IGZyb20gXCJAZ2xpbW1lci9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBDb21waWxlVGltZUNvbnN0YW50cyB9IGZyb20gXCJAZ2xpbW1lci9vcGNvZGUtY29tcGlsZXJcIjtcblxuY29uc3QgVU5SRVNPTFZFRCA9IHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0YW50UG9vbCB7XG4gIHN0cmluZ3M6IHN0cmluZ1tdO1xuICBhcnJheXM6IG51bWJlcltdW107XG4gIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgaGFuZGxlczogbnVtYmVyW107XG4gIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdO1xuICBmbG9hdHM6IG51bWJlcltdO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBQcmltaXRpdmVUeXBlIHtcbiAgTlVNQkVSICAgICAgICAgID0gMGIwMCxcbiAgRkxPQVQgICAgICAgICAgID0gMGIwMSxcbiAgU1RSSU5HICAgICAgICAgID0gMGIxMCxcbiAgQk9PTEVBTl9PUl9WT0lEID0gMGIxMVxufVxuXG5leHBvcnQgY2xhc3MgV3JpdGVPbmx5Q29uc3RhbnRzIGltcGxlbWVudHMgQ29tcGlsZVRpbWVDb25zdGFudHMge1xuICAvLyBgMGAgbWVhbnMgTlVMTFxuXG4gIHByb3RlY3RlZCBzdHJpbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBwcm90ZWN0ZWQgYXJyYXlzOiBudW1iZXJbXVtdID0gW107XG4gIHByb3RlY3RlZCB0YWJsZXM6IFN5bWJvbFRhYmxlW10gPSBbXTtcbiAgcHJvdGVjdGVkIGhhbmRsZXM6IG51bWJlcltdID0gW107XG4gIHByb3RlY3RlZCBzZXJpYWxpemFibGVzOiBPcGFxdWVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgcmVzb2x2ZWQ6IE9wYXF1ZVtdID0gW107XG4gIHByb3RlY3RlZCBmbG9hdHM6IG51bWJlcltdID0gW107XG5cbiAgZmxvYXQoZmxvYXQ6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmZsb2F0cy5wdXNoKGZsb2F0KTtcbiAgfVxuXG4gIHN0cmluZyh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzLnB1c2godmFsdWUpO1xuICB9XG5cbiAgc3RyaW5nQXJyYXkoc3RyaW5nczogc3RyaW5nW10pOiBudW1iZXIge1xuICAgIGxldCBfc3RyaW5nczogbnVtYmVyW10gPSBuZXcgQXJyYXkoc3RyaW5ncy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBfc3RyaW5nc1tpXSA9IHRoaXMuc3RyaW5nKHN0cmluZ3NbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFycmF5KF9zdHJpbmdzKTtcbiAgfVxuXG4gIGFycmF5KHZhbHVlczogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFycmF5cy5wdXNoKHZhbHVlcyk7XG4gIH1cblxuICB0YWJsZSh0OiBTeW1ib2xUYWJsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzLnB1c2godCk7XG4gIH1cblxuICBoYW5kbGUoaGFuZGxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRoaXMucmVzb2x2ZWQucHVzaChVTlJFU09MVkVEKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVzLnB1c2goaGFuZGxlKTtcbiAgfVxuXG4gIHNlcmlhbGl6YWJsZSh2YWx1ZTogT3BhcXVlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemFibGVzLnB1c2godmFsdWUpO1xuICB9XG5cbiAgdG9Qb29sKCk6IENvbnN0YW50UG9vbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmluZ3M6IHRoaXMuc3RyaW5ncyxcbiAgICAgIGFycmF5czogdGhpcy5hcnJheXMsXG4gICAgICB0YWJsZXM6IHRoaXMudGFibGVzLFxuICAgICAgaGFuZGxlczogdGhpcy5oYW5kbGVzLFxuICAgICAgc2VyaWFsaXphYmxlczogdGhpcy5zZXJpYWxpemFibGVzLFxuICAgICAgZmxvYXRzOiB0aGlzLmZsb2F0c1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHM8U3BlY2lmaWVyPiB7XG4gIHByb3RlY3RlZCBzdHJpbmdzOiBzdHJpbmdbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXTtcbiAgcHJvdGVjdGVkIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgcHJvdGVjdGVkIGhhbmRsZXM6IG51bWJlcltdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW107XG4gIHByb3RlY3RlZCByZXNvbHZlZDogT3BhcXVlW107XG4gIHByb3RlY3RlZCBmbG9hdHM6IG51bWJlcltdO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZXNvbHZlcjogUnVudGltZVJlc29sdmVyPFNwZWNpZmllcj4sIHBvb2w6IENvbnN0YW50UG9vbCkge1xuICAgIHRoaXMuc3RyaW5ncyA9IHBvb2wuc3RyaW5ncztcbiAgICB0aGlzLmFycmF5cyA9IHBvb2wuYXJyYXlzO1xuICAgIHRoaXMudGFibGVzID0gcG9vbC50YWJsZXM7XG4gICAgdGhpcy5oYW5kbGVzID0gcG9vbC5oYW5kbGVzO1xuICAgIHRoaXMuc2VyaWFsaXphYmxlcyA9IHBvb2wuc2VyaWFsaXphYmxlcztcbiAgICB0aGlzLmZsb2F0cyA9IHBvb2wuZmxvYXRzO1xuICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICB9XG5cbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBnZXRGbG9hdCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdHNbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN0cmluZyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmdBcnJheSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0QXJyYXkodmFsdWUpO1xuICAgIGxldCBfbmFtZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IG5hbWVzW2ldO1xuICAgICAgX25hbWVzW2ldID0gdGhpcy5nZXRTdHJpbmcobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9uYW1lcztcbiAgfVxuXG4gIGdldEFycmF5KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXlzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTeW1ib2xUYWJsZTxUIGV4dGVuZHMgU3ltYm9sVGFibGU+KHZhbHVlOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZXNbdmFsdWUgLSAxXSBhcyBUO1xuICB9XG5cbiAgcmVzb2x2ZUhhbmRsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICBsZXQgaW5kZXggPSBzIC0gMTtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XTtcblxuICAgIGlmIChyZXNvbHZlZCA9PT0gVU5SRVNPTFZFRCkge1xuICAgICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlc1tpbmRleF07XG4gICAgICByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkIGFzIFQ7XG4gIH1cblxuICBnZXRTZXJpYWxpemFibGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlc1tzIC0gMV0gYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzPFNwZWNpZmllcj4gZXh0ZW5kcyBXcml0ZU9ubHlDb25zdGFudHMge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sPzogQ29uc3RhbnRQb29sKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmIChwb29sKSB7XG4gICAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgICB0aGlzLmFycmF5cyA9IHBvb2wuYXJyYXlzO1xuICAgICAgdGhpcy50YWJsZXMgPSBwb29sLnRhYmxlcztcbiAgICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICAgIHRoaXMuc2VyaWFsaXphYmxlcyA9IHBvb2wuc2VyaWFsaXphYmxlcztcbiAgICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGAwYCBtZWFucyBOVUxMXG5cbiAgZ2V0U3RyaW5nKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ3NbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN0cmluZ0FycmF5KHZhbHVlOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gICAgbGV0IG5hbWVzID0gdGhpcy5nZXRBcnJheSh2YWx1ZSk7XG4gICAgbGV0IF9uYW1lczogc3RyaW5nW10gPSBuZXcgQXJyYXkobmFtZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBuID0gbmFtZXNbaV07XG4gICAgICBfbmFtZXNbaV0gPSB0aGlzLmdldFN0cmluZyhuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX25hbWVzO1xuICB9XG5cbiAgZ2V0QXJyYXkodmFsdWU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5hcnJheXNbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN5bWJvbFRhYmxlPFQgZXh0ZW5kcyBTeW1ib2xUYWJsZT4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlc1t2YWx1ZSAtIDFdIGFzIFQ7XG4gIH1cblxuICByZXNvbHZlSGFuZGxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIGxldCBpbmRleCA9IHMgLSAxO1xuICAgIGxldCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdO1xuXG4gICAgaWYgKHJlc29sdmVkID09PSBVTlJFU09MVkVEKSB7XG4gICAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGVzW2luZGV4XTtcbiAgICAgIHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF0gPSB0aGlzLnJlc29sdmVyLnJlc29sdmUoaGFuZGxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQgYXMgVDtcbiAgfVxuXG4gIGdldFNlcmlhbGl6YWJsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemFibGVzW3MgLSAxXSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYXp5Q29uc3RhbnRzIGV4dGVuZHMgQ29uc3RhbnRzPE9wYXF1ZT4ge1xuICBwcml2YXRlIG90aGVyczogT3BhcXVlW10gPSBbXTtcblxuICBnZXRPdGhlcjxUPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJzW3ZhbHVlIC0gMV0gYXMgVDtcbiAgfVxuXG4gIG90aGVyKG90aGVyOiBPcGFxdWUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm90aGVycy5wdXNoKG90aGVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSGVhcCB9IGZyb20gJy4vcHJvZ3JhbSc7XG5pbXBvcnQgeyBUWVBFX01BU0ssIE9QRVJBTkRfTEVOX01BU0ssIEFSR19TSElGVCB9IGZyb20gXCJAZ2xpbW1lci9lbmNvZGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBPcGNvZGUge1xuICBwdWJsaWMgb2Zmc2V0ID0gMDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBoZWFwOiBIZWFwKSB7fVxuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCByYXdUeXBlID0gdGhpcy5oZWFwLmdldGJ5YWRkcih0aGlzLm9mZnNldCk7XG4gICAgcmV0dXJuICgocmF3VHlwZSAmIE9QRVJBTkRfTEVOX01BU0spID4+IEFSR19TSElGVCkgKyAxO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuICh0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0KSAmIFRZUEVfTUFTSyk7XG4gIH1cblxuICBnZXQgb3AxKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0ICsgMSk7XG4gIH1cblxuICBnZXQgb3AyKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0ICsgMik7XG4gIH1cblxuICBnZXQgb3AzKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0ICsgMyk7XG4gIH1cbn1cbiIsIlxuaW1wb3J0IHsgUmVjYXN0LCBWTUhhbmRsZSB9IGZyb20gXCJAZ2xpbW1lci9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBERUJVRyB9IGZyb20gXCJAZ2xpbW1lci9sb2NhbC1kZWJ1Zy1mbGFnc1wiO1xuaW1wb3J0IHsgQ29uc3RhbnRzLCBXcml0ZU9ubHlDb25zdGFudHMsIFJ1bnRpbWVDb25zdGFudHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPcGNvZGUgfSBmcm9tICcuL29wY29kZSc7XG5pbXBvcnQgeyBDb21waWxlVGltZVByb2dyYW0gfSBmcm9tIFwiQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyXCI7XG5cbmVudW0gVGFibGVTbG90U3RhdGUge1xuICBBbGxvY2F0ZWQsXG4gIEZyZWVkLFxuICBQdXJnZWQsXG4gIFBvaW50ZXJcbn1cblxuY29uc3QgRU5UUllfU0laRSA9IDQ7XG5jb25zdCBTSVpFX09GRlNFVCA9IDE7XG5jb25zdCBTQ09QRVNJWkVfT0ZGU0VUID0gMjtcbmNvbnN0IFNUQVRFX09GRlNFVCA9IDM7XG5cbmV4cG9ydCBjbGFzcyBIZWFwIHtcbiAgcHJpdmF0ZSBoZWFwOiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIG9mZnNldCA9IDA7XG4gIHByaXZhdGUgaGFuZGxlID0gMDtcblxuICAvKipcbiAgICogbGF5b3V0OlxuICAgKlxuICAgKiAtIHBvaW50ZXIgaW50byBoZWFwXG4gICAqIC0gc2l6ZVxuICAgKiAtIHNjb3BlIHNpemVcbiAgICogLSBmcmVlZCAoMCBvciAxKVxuICAgKi9cbiAgcHJpdmF0ZSB0YWJsZTogbnVtYmVyW10gPSBbXTtcblxuICBwdXNoKGl0ZW06IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaGVhcFt0aGlzLm9mZnNldCsrXSA9IGl0ZW07XG4gIH1cblxuICBnZXRieWFkZHIoYWRkcmVzczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5oZWFwW2FkZHJlc3NdO1xuICB9XG5cbiAgc2V0YnlhZGRyKGFkZHJlc3M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuaGVhcFthZGRyZXNzXSA9IHZhbHVlO1xuICB9XG5cbiAgbWFsbG9jKCk6IFZNSGFuZGxlIHtcbiAgICB0aGlzLnRhYmxlLnB1c2godGhpcy5vZmZzZXQsIDAsIDAsIDApO1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZTtcbiAgICB0aGlzLmhhbmRsZSArPSBFTlRSWV9TSVpFO1xuICAgIHJldHVybiBoYW5kbGUgYXMgUmVjYXN0PG51bWJlciwgVk1IYW5kbGU+O1xuICB9XG5cbiAgZmluaXNoTWFsbG9jKGhhbmRsZTogVk1IYW5kbGUsIHNjb3BlU2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IHN0YXJ0ID0gdGhpcy50YWJsZVtoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+XTtcbiAgICBsZXQgZmluaXNoID0gdGhpcy5vZmZzZXQ7XG4gICAgdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTSVpFX09GRlNFVF0gPSBmaW5pc2ggLSBzdGFydDtcbiAgICB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNDT1BFU0laRV9PRkZTRVRdID0gc2NvcGVTaXplO1xuICB9XG5cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIC8vIEl0IGlzIGlsbGVnYWwgdG8gY2xvc2Ugb3ZlciB0aGlzIGFkZHJlc3MsIGFzIGNvbXBhY3Rpb25cbiAgLy8gbWF5IG1vdmUgaXQuIEhvd2V2ZXIsIGl0IGlzIGxlZ2FsIHRvIHVzZSB0aGlzIGFkZHJlc3NcbiAgLy8gbXVsdGlwbGUgdGltZXMgYmV0d2VlbiBjb21wYWN0aW9ucy5cbiAgZ2V0YWRkcihoYW5kbGU6IFZNSGFuZGxlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVtoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+XTtcbiAgfVxuXG4gIGdldGhhbmRsZShhZGRyZXNzOiBudW1iZXIpOiBWTUhhbmRsZSB7XG4gICAgdGhpcy50YWJsZS5wdXNoKGFkZHJlc3MsIDAsIDAsIFRhYmxlU2xvdFN0YXRlLlBvaW50ZXIpO1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZTtcbiAgICB0aGlzLmhhbmRsZSArPSBFTlRSWV9TSVpFO1xuICAgIHJldHVybiBoYW5kbGUgYXMgUmVjYXN0PG51bWJlciwgVk1IYW5kbGU+O1xuICB9XG5cbiAgc2l6ZW9mKGhhbmRsZTogVk1IYW5kbGUpOiBudW1iZXIge1xuICAgIGlmIChERUJVRykge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0laRV9PRkZTRVRdO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBzY29wZXNpemVvZihoYW5kbGU6IFZNSGFuZGxlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTQ09QRVNJWkVfT0ZGU0VUXTtcbiAgfVxuXG4gIGZyZWUoaGFuZGxlOiBWTUhhbmRsZSk6IHZvaWQge1xuICAgIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU1RBVEVfT0ZGU0VUXSA9IDE7XG4gIH1cblxuICBjb21wYWN0KCk6IHZvaWQge1xuICAgIGxldCBjb21wYWN0ZWRTaXplID0gMDtcbiAgICBsZXQgeyB0YWJsZSwgdGFibGU6IHsgbGVuZ3RoIH0sIGhlYXAgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bGVuZ3RoOyBpKz1FTlRSWV9TSVpFKSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gdGFibGVbaV07XG4gICAgICBsZXQgc2l6ZSA9IHRhYmxlW2kgKyBTSVpFX09GRlNFVF07XG4gICAgICBsZXQgc3RhdGUgPSB0YWJsZVtpICsgU1RBVEVfT0ZGU0VUXTtcblxuICAgICAgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5QdXJnZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5GcmVlZCkge1xuICAgICAgICAvLyB0cmFuc2l0aW9uIHRvIFwiYWxyZWFkeSBmcmVlZFwiIGFrYSBcInB1cmdlZFwiXG4gICAgICAgIC8vIGEgZ29vZCBpbXByb3ZlbWVudCB3b3VsZCBiZSB0byByZXVzZVxuICAgICAgICAvLyB0aGVzZSBzbG90c1xuICAgICAgICB0YWJsZVtpICsgU1RBVEVfT0ZGU0VUXSA9IFRhYmxlU2xvdFN0YXRlLlB1cmdlZDtcbiAgICAgICAgY29tcGFjdGVkU2l6ZSArPSBzaXplO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuQWxsb2NhdGVkKSB7XG4gICAgICAgIGZvciAobGV0IGo9b2Zmc2V0OyBqPD1pK3NpemU7IGorKykge1xuICAgICAgICAgIGhlYXBbaiAtIGNvbXBhY3RlZFNpemVdID0gaGVhcFtqXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlW2ldID0gb2Zmc2V0IC0gY29tcGFjdGVkU2l6ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLlBvaW50ZXIpIHtcbiAgICAgICAgdGFibGVbaV0gPSBvZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5vZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICB9XG5cbiAgdG9BcnJheSgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhcC5zbGljZSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXcml0ZU9ubHlQcm9ncmFtIGltcGxlbWVudHMgQ29tcGlsZVRpbWVQcm9ncmFtIHtcbiAgW2tleTogbnVtYmVyXTogbmV2ZXI7XG5cbiAgcHJpdmF0ZSBfb3Bjb2RlOiBPcGNvZGU7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbnN0YW50czogV3JpdGVPbmx5Q29uc3RhbnRzID0gbmV3IFdyaXRlT25seUNvbnN0YW50cygpLCBwdWJsaWMgaGVhcCA9IG5ldyBIZWFwKCkpIHtcbiAgICB0aGlzLl9vcGNvZGUgPSBuZXcgT3Bjb2RlKHRoaXMuaGVhcCk7XG4gIH1cblxuICBvcGNvZGUob2Zmc2V0OiBudW1iZXIpOiBPcGNvZGUge1xuICAgIHRoaXMuX29wY29kZS5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuX29wY29kZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUnVudGltZVByb2dyYW08U3BlY2lmaWVyPiB7XG4gIFtrZXk6IG51bWJlcl06IG5ldmVyO1xuXG4gIHByaXZhdGUgX29wY29kZTogT3Bjb2RlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb25zdGFudHM6IFJ1bnRpbWVDb25zdGFudHM8U3BlY2lmaWVyPiwgcHVibGljIGhlYXA6IEhlYXApIHtcbiAgICB0aGlzLl9vcGNvZGUgPSBuZXcgT3Bjb2RlKHRoaXMuaGVhcCk7XG4gIH1cblxuICBvcGNvZGUob2Zmc2V0OiBudW1iZXIpOiBPcGNvZGUge1xuICAgIHRoaXMuX29wY29kZS5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuX29wY29kZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbTxTcGVjaWZpZXI+IGV4dGVuZHMgV3JpdGVPbmx5UHJvZ3JhbSB7XG4gIHB1YmxpYyBjb25zdGFudHM6IENvbnN0YW50czxTcGVjaWZpZXI+O1xufVxuIl0sIm5hbWVzIjpbIk9QRVJBTkRfTEVOX01BU0siLCJBUkdfU0hJRlQiLCJUWVBFX01BU0siXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFHQSxJQUFNLGFBQWE7O0lBa0JuQjs7Ozs7YUFHbUIsVUFBYTthQUNkLFNBQWU7YUFDZixTQUFrQjthQUNqQixVQUFhO2FBQ1AsZ0JBQWE7YUFDbEIsV0FBYTthQUNmLFNBQWE7Ozt3REFFdkIsUUFDSjtlQUFPLEtBQUssT0FBTyxLQUFLOzs7MERBR25CLE9BQ0w7ZUFBTyxLQUFLLFFBQVEsS0FBSzs7O29FQUdmLFNBQ1Y7WUFBSSxXQUFxQixJQUFJLE1BQU0sUUFBUTthQUV0QyxJQUFJLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO3FCQUM5QixLQUFLLEtBQUssT0FBTyxRQUFROztl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 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xpbW1lci1wcm9ncmFtLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9jb25zdGFudHMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9vcGNvZGUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9wcm9ncmFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFJ1bnRpbWVSZXNvbHZlciwgQ29tcGlsZVRpbWVDb25zdGFudHMgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuXG5jb25zdCBVTlJFU09MVkVEID0ge307XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RhbnRQb29sIHtcbiAgc3RyaW5nczogc3RyaW5nW107XG4gIGFycmF5czogbnVtYmVyW11bXTtcbiAgdGFibGVzOiBTeW1ib2xUYWJsZVtdO1xuICBoYW5kbGVzOiBudW1iZXJbXTtcbiAgc2VyaWFsaXphYmxlczogT3BhcXVlW107XG4gIGZsb2F0czogbnVtYmVyW107XG4gIG5lZ2F0aXZlczogbnVtYmVyW107XG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFByaW1pdGl2ZVR5cGUge1xuICBOVU1CRVIgICAgICAgICAgPSAwYjAwMCxcbiAgRkxPQVQgICAgICAgICAgID0gMGIwMDEsXG4gIFNUUklORyAgICAgICAgICA9IDBiMDEwLFxuICBCT09MRUFOX09SX1ZPSUQgPSAwYjAxMSxcbiAgTkVHQVRJVkUgICAgICAgID0gMGIxMDBcbn1cblxuZXhwb3J0IGNsYXNzIFdyaXRlT25seUNvbnN0YW50cyBpbXBsZW1lbnRzIENvbXBpbGVUaW1lQ29uc3RhbnRzIHtcbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBwcm90ZWN0ZWQgc3RyaW5nczogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXSA9IFtdO1xuICBwcm90ZWN0ZWQgdGFibGVzOiBTeW1ib2xUYWJsZVtdID0gW107XG4gIHByb3RlY3RlZCBoYW5kbGVzOiBudW1iZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW10gPSBbXTtcbiAgcHJvdGVjdGVkIHJlc29sdmVkOiBPcGFxdWVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgZmxvYXRzOiBudW1iZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgbmVnYXRpdmVzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZsb2F0KGZsb2F0OiBudW1iZXIpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmZsb2F0cy5pbmRleE9mKGZsb2F0KTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmxvYXRzLnB1c2goZmxvYXQpIC0gMTtcbiAgfVxuXG4gIG5lZ2F0aXZlKG5lZ2F0aXZlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZXMucHVzaChuZWdhdGl2ZSk7XG4gIH1cblxuICBzdHJpbmcodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5zdHJpbmdzLmluZGV4T2YodmFsdWUpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzLnB1c2godmFsdWUpIC0gMTtcbiAgfVxuXG4gIHN0cmluZ0FycmF5KHN0cmluZ3M6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBsZXQgX3N0cmluZ3M6IG51bWJlcltdID0gbmV3IEFycmF5KHN0cmluZ3MubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgX3N0cmluZ3NbaV0gPSB0aGlzLnN0cmluZyhzdHJpbmdzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJheShfc3RyaW5ncyk7XG4gIH1cblxuICBhcnJheSh2YWx1ZXM6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmFycmF5cy5pbmRleE9mKHZhbHVlcyk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFycmF5cy5wdXNoKHZhbHVlcykgLSAxO1xuICB9XG5cbiAgdGFibGUodDogU3ltYm9sVGFibGUpOiBudW1iZXIge1xuICAgIGxldCBpbmRleCA9IHRoaXMudGFibGVzLmluZGV4T2YodCk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRhYmxlcy5wdXNoKHQpIC0gMTtcbiAgfVxuXG4gIGhhbmRsZShoYW5kbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgdGhpcy5yZXNvbHZlZC5wdXNoKFVOUkVTT0xWRUQpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXMucHVzaChoYW5kbGUpO1xuICB9XG5cbiAgc2VyaWFsaXphYmxlKHZhbHVlOiBPcGFxdWUpOiBudW1iZXIge1xuICAgIGxldCBpbmRleCA9IHRoaXMuc2VyaWFsaXphYmxlcy5pbmRleE9mKHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlcy5wdXNoKHZhbHVlKSAtIDE7XG4gIH1cblxuICB0b1Bvb2woKTogQ29uc3RhbnRQb29sIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RyaW5nczogdGhpcy5zdHJpbmdzLFxuICAgICAgYXJyYXlzOiB0aGlzLmFycmF5cyxcbiAgICAgIHRhYmxlczogdGhpcy50YWJsZXMsXG4gICAgICBoYW5kbGVzOiB0aGlzLmhhbmRsZXMsXG4gICAgICBzZXJpYWxpemFibGVzOiB0aGlzLnNlcmlhbGl6YWJsZXMsXG4gICAgICBmbG9hdHM6IHRoaXMuZmxvYXRzLFxuICAgICAgbmVnYXRpdmVzOiB0aGlzLm5lZ2F0aXZlc1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHM8U3BlY2lmaWVyPiB7XG4gIHByb3RlY3RlZCBzdHJpbmdzOiBzdHJpbmdbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXTtcbiAgcHJvdGVjdGVkIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgcHJvdGVjdGVkIGhhbmRsZXM6IG51bWJlcltdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW107XG4gIHByb3RlY3RlZCByZXNvbHZlZDogT3BhcXVlW107XG4gIHByb3RlY3RlZCBmbG9hdHM6IG51bWJlcltdO1xuICBwcm90ZWN0ZWQgbmVnYXRpdmVzOiBudW1iZXJbXTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sOiBDb25zdGFudFBvb2wpIHtcbiAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgdGhpcy5hcnJheXMgPSBwb29sLmFycmF5cztcbiAgICB0aGlzLnRhYmxlcyA9IHBvb2wudGFibGVzO1xuICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICB0aGlzLnNlcmlhbGl6YWJsZXMgPSBwb29sLnNlcmlhbGl6YWJsZXM7XG4gICAgdGhpcy5mbG9hdHMgPSBwb29sLmZsb2F0cztcbiAgICB0aGlzLm5lZ2F0aXZlcyA9IHBvb2wubmVnYXRpdmVzO1xuICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICB9XG5cbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBnZXRGbG9hdCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdHNbdmFsdWVdO1xuICB9XG5cbiAgZ2V0TmVnYXRpdmUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmVzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmcodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nc1t2YWx1ZV07XG4gIH1cblxuICBnZXRTdHJpbmdBcnJheSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0QXJyYXkodmFsdWUpO1xuICAgIGxldCBfbmFtZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IG5hbWVzW2ldO1xuICAgICAgX25hbWVzW2ldID0gdGhpcy5nZXRTdHJpbmcobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9uYW1lcztcbiAgfVxuXG4gIGdldEFycmF5KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXlzW3ZhbHVlXTtcbiAgfVxuXG4gIGdldFN5bWJvbFRhYmxlPFQgZXh0ZW5kcyBTeW1ib2xUYWJsZT4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlc1t2YWx1ZV0gYXMgVDtcbiAgfVxuXG4gIHJlc29sdmVIYW5kbGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgbGV0IGluZGV4ID0gcyAtIDE7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF07XG5cbiAgICBpZiAocmVzb2x2ZWQgPT09IFVOUkVTT0xWRUQpIHtcbiAgICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZXNbaW5kZXhdO1xuICAgICAgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZShoYW5kbGUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlZCBhcyBUO1xuICB9XG5cbiAgZ2V0U2VyaWFsaXphYmxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YWJsZXNbc10gYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzPFNwZWNpZmllcj4gZXh0ZW5kcyBXcml0ZU9ubHlDb25zdGFudHMge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sPzogQ29uc3RhbnRQb29sKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmIChwb29sKSB7XG4gICAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgICB0aGlzLmFycmF5cyA9IHBvb2wuYXJyYXlzO1xuICAgICAgdGhpcy50YWJsZXMgPSBwb29sLnRhYmxlcztcbiAgICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICAgIHRoaXMuc2VyaWFsaXphYmxlcyA9IHBvb2wuc2VyaWFsaXphYmxlcztcbiAgICAgIHRoaXMuZmxvYXRzID0gcG9vbC5mbG9hdHM7XG4gICAgICB0aGlzLm5lZ2F0aXZlcyA9IHBvb2wubmVnYXRpdmVzO1xuICAgICAgdGhpcy5yZXNvbHZlZCA9IHRoaXMuaGFuZGxlcy5tYXAoKCkgPT4gVU5SRVNPTFZFRCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYDBgIG1lYW5zIE5VTExcbiAgZ2V0RmxvYXQodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXROZWdhdGl2ZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZXNbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN0cmluZyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzW3ZhbHVlXTtcbiAgfVxuXG4gIGdldFN0cmluZ0FycmF5KHZhbHVlOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gICAgbGV0IG5hbWVzID0gdGhpcy5nZXRBcnJheSh2YWx1ZSk7XG4gICAgbGV0IF9uYW1lczogc3RyaW5nW10gPSBuZXcgQXJyYXkobmFtZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBuID0gbmFtZXNbaV07XG4gICAgICBfbmFtZXNbaV0gPSB0aGlzLmdldFN0cmluZyhuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX25hbWVzO1xuICB9XG5cbiAgZ2V0QXJyYXkodmFsdWU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5hcnJheXNbdmFsdWVdO1xuICB9XG5cbiAgZ2V0U3ltYm9sVGFibGU8VCBleHRlbmRzIFN5bWJvbFRhYmxlPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzW3ZhbHVlXSBhcyBUO1xuICB9XG5cbiAgcmVzb2x2ZUhhbmRsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICBsZXQgaW5kZXggPSBzIC0gMTtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XTtcblxuICAgIGlmIChyZXNvbHZlZCA9PT0gVU5SRVNPTFZFRCkge1xuICAgICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlc1tpbmRleF07XG4gICAgICByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkIGFzIFQ7XG4gIH1cblxuICBnZXRTZXJpYWxpemFibGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlc1tzXSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYXp5Q29uc3RhbnRzIGV4dGVuZHMgQ29uc3RhbnRzPE9wYXF1ZT4ge1xuICBwcml2YXRlIG90aGVyczogT3BhcXVlW10gPSBbXTtcblxuICBnZXRPdGhlcjxUPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJzW3ZhbHVlIC0gMV0gYXMgVDtcbiAgfVxuXG4gIG90aGVyKG90aGVyOiBPcGFxdWUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm90aGVycy5wdXNoKG90aGVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSGVhcCB9IGZyb20gJy4vcHJvZ3JhbSc7XG5pbXBvcnQgeyBUWVBFX01BU0ssIE9QRVJBTkRfTEVOX01BU0ssIEFSR19TSElGVCB9IGZyb20gXCJAZ2xpbW1lci9lbmNvZGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBPcGNvZGUge1xuICBwdWJsaWMgb2Zmc2V0ID0gMDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBoZWFwOiBIZWFwKSB7fVxuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCByYXdUeXBlID0gdGhpcy5oZWFwLmdldGJ5YWRkcih0aGlzLm9mZnNldCk7XG4gICAgcmV0dXJuICgocmF3VHlwZSAmIE9QRVJBTkRfTEVOX01BU0spID4+IEFSR19TSElGVCkgKyAxO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuICh0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0KSAmIFRZUEVfTUFTSyk7XG4gIH1cblxuICBnZXQgb3AxKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0ICsgMSk7XG4gIH1cblxuICBnZXQgb3AyKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0ICsgMik7XG4gIH1cblxuICBnZXQgb3AzKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0ICsgMyk7XG4gIH1cbn1cbiIsIlxuaW1wb3J0IHsgQ29tcGlsZVRpbWVQcm9ncmFtLCBSZWNhc3QsIFZNSGFuZGxlIH0gZnJvbSBcIkBnbGltbWVyL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IERFQlVHIH0gZnJvbSBcIkBnbGltbWVyL2xvY2FsLWRlYnVnLWZsYWdzXCI7XG5pbXBvcnQgeyBDb25zdGFudHMsIFdyaXRlT25seUNvbnN0YW50cywgUnVudGltZUNvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9wY29kZSB9IGZyb20gJy4vb3Bjb2RlJztcblxuZW51bSBUYWJsZVNsb3RTdGF0ZSB7XG4gIEFsbG9jYXRlZCxcbiAgRnJlZWQsXG4gIFB1cmdlZCxcbiAgUG9pbnRlclxufVxuXG5jb25zdCBFTlRSWV9TSVpFID0gNDtcbmNvbnN0IFNJWkVfT0ZGU0VUID0gMTtcbmNvbnN0IFNDT1BFU0laRV9PRkZTRVQgPSAyO1xuY29uc3QgU1RBVEVfT0ZGU0VUID0gMztcblxuLyoqXG4gKiBUaGUgSGVhcCBpcyByZXNwb25zaWJsZSBmb3IgZHluYW1pY2FsbHkgYWxsb2NhdGluZ1xuICogbWVtb3J5IGluIHdoaWNoIHdlIHJlYWQvd3JpdGUgdGhlIFZNJ3MgaW5zdHJ1Y3Rpb25zXG4gKiBmcm9tL3RvLiBXaGVuIHdlIG1hbGxvYyB3ZSBwYXNzIG91dCBhIFZNSGFuZGxlLCB3aGljaFxuICogaXMgdXNlZCBhcyBhbiBpbmRpcmVjdCB3YXkgb2YgYWNjZXNzaW5nIHRoZSBtZW1vcnkgZHVyaW5nXG4gKiBleGVjdXRpb24gb2YgdGhlIFZNLiBJbnRlcm5hbGx5IHdlIHRyYWNrIHRoZSBkaWZmZXJlbnRcbiAqIHJlZ2lvbnMgb2YgdGhlIG1lbW9yeSBpbiBhbiBpbnQgYXJyYXkga25vd24gYXMgdGhlIHRhYmxlLlxuICpcbiAqIFRoZSB0YWJsZSBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6XG4gKlxuICogfCAuLi4gfCAgICAgICAgICAgdGFibGUgZW50cnkgICAgICAgICAgfFxuICogfCAuLi4gfCBocCB8IHNpemUgfCBzY29wZSBzaXplIHwgc3RhdGUgfFxuICogfCAuLi4gfCAwICB8IDEyMiAgfCAgICAgIDMgICAgIHwgICAwICAgfFxuICogIGhhbmRsZSBeICAgICB8ICAgICAgICAgIHwgICAgICAgICBeIHJlZ2lvbiBzdGF0ZSAoYWxsb2NhdGVkLCBmcmVlZCwgcHVyZ2VkKVxuICogICByZWdpb24gc2l6ZSBeICAgICAgICAgIHxcbiAqICAgICAgICBudW1iZXIgb2Ygc3ltYm9scyBeXG4gKlxuICogV2l0aCB0aGlzIGluZm9ybWF0aW9uIHdlIGVmZmVjdGl2ZWx5IGhhdmUgdGhlIGFiaWxpdHkgdG9cbiAqIGNvbnRyb2wgd2hlbiB3ZSB3YW50IHRvIGZyZWUgbWVtb3J5LiBUaGF0IGJlaW5nIHNhaWQgeW91XG4gKiBjYW4gbm90IGZyZWUgZHVyaW5nIGV4ZWN1dGlvbiBhcyByYXcgYWRkcmVzcyBhcmUgb25seVxuICogdmFsaWQgZHVyaW5nIHRoZSBleGVjdXRpb24uIFRoaXMgbWVhbnMgeW91IGNhbm5vdCBjbG9zZVxuICogb3ZlciB0aGVtIGFzIHlvdSB3aWxsIGhhdmUgYSBiYWQgbWVtb3J5IGFjY2VzcyBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBIZWFwIHtcbiAgcHJpdmF0ZSBoZWFwOiBVaW50MTZBcnJheSB8IEFycmF5PG51bWJlcj47XG4gIHByaXZhdGUgdGFibGU6IG51bWJlcltdO1xuICBwcml2YXRlIG9mZnNldCA9IDA7XG4gIHByaXZhdGUgaGFuZGxlID0gMDtcblxuICBjb25zdHJ1Y3RvcihzZXJpYWxpemVkSGVhcD86IHsgYnVmZmVyOiBBcnJheUJ1ZmZlciwgdGFibGU6IG51bWJlcltdLCBoYW5kbGU6IG51bWJlciB9KSB7XG4gICAgaWYgKHNlcmlhbGl6ZWRIZWFwKSB7XG4gICAgICBsZXQgeyBidWZmZXIsIHRhYmxlLCBoYW5kbGUgfSA9IHNlcmlhbGl6ZWRIZWFwO1xuICAgICAgdGhpcy5oZWFwID0gbmV3IFVpbnQxNkFycmF5KGJ1ZmZlcik7XG4gICAgICB0aGlzLnRhYmxlID0gdGFibGU7XG4gICAgICB0aGlzLm9mZnNldCA9IHRoaXMuaGVhcC5sZW5ndGg7XG4gICAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBVaW50MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5oZWFwID0gbmV3IFVpbnQxNkFycmF5KDB4MTAwMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZJWE1FIHJlbW92ZSBvbmNlIHdlIGRyb3AgSUU5XG4gICAgICAgIHRoaXMuaGVhcCA9IG5ldyBBcnJheSgweDEwMDAwMCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRhYmxlID0gW107XG4gICAgfVxuICB9XG5cbiAgcHVzaChpdGVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmhlYXBbdGhpcy5vZmZzZXQrK10gPSBpdGVtO1xuICB9XG5cbiAgZ2V0YnlhZGRyKGFkZHJlc3M6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaGVhcFthZGRyZXNzXTtcbiAgfVxuXG4gIHNldGJ5YWRkcihhZGRyZXNzOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmhlYXBbYWRkcmVzc10gPSB2YWx1ZTtcbiAgfVxuXG4gIG1hbGxvYygpOiBWTUhhbmRsZSB7XG4gICAgdGhpcy50YWJsZS5wdXNoKHRoaXMub2Zmc2V0LCAwLCAwLCAwKTtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGU7XG4gICAgdGhpcy5oYW5kbGUgKz0gRU5UUllfU0laRTtcbiAgICByZXR1cm4gaGFuZGxlIGFzIFJlY2FzdDxudW1iZXIsIFZNSGFuZGxlPjtcbiAgfVxuXG4gIGZpbmlzaE1hbGxvYyhoYW5kbGU6IFZNSGFuZGxlLCBzY29wZVNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBzdGFydCA9IHRoaXMudGFibGVbaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPl07XG4gICAgbGV0IGZpbmlzaCA9IHRoaXMub2Zmc2V0O1xuICAgIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0laRV9PRkZTRVRdID0gZmluaXNoIC0gc3RhcnQ7XG4gICAgdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTQ09QRVNJWkVfT0ZGU0VUXSA9IHNjb3BlU2l6ZTtcbiAgfVxuXG4gIHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQ7XG4gIH1cblxuICAvLyBJdCBpcyBpbGxlZ2FsIHRvIGNsb3NlIG92ZXIgdGhpcyBhZGRyZXNzLCBhcyBjb21wYWN0aW9uXG4gIC8vIG1heSBtb3ZlIGl0LiBIb3dldmVyLCBpdCBpcyBsZWdhbCB0byB1c2UgdGhpcyBhZGRyZXNzXG4gIC8vIG11bHRpcGxlIHRpbWVzIGJldHdlZW4gY29tcGFjdGlvbnMuXG4gIGdldGFkZHIoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVbaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPl07XG4gIH1cblxuICBnZXRoYW5kbGUoYWRkcmVzczogbnVtYmVyKTogVk1IYW5kbGUge1xuICAgIHRoaXMudGFibGUucHVzaChhZGRyZXNzLCAwLCAwLCBUYWJsZVNsb3RTdGF0ZS5Qb2ludGVyKTtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGU7XG4gICAgdGhpcy5oYW5kbGUgKz0gRU5UUllfU0laRTtcbiAgICByZXR1cm4gaGFuZGxlIGFzIFJlY2FzdDxudW1iZXIsIFZNSGFuZGxlPjtcbiAgfVxuXG4gIHNpemVvZihoYW5kbGU6IFZNSGFuZGxlKTogbnVtYmVyIHtcbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNJWkVfT0ZGU0VUXTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgc2NvcGVzaXplb2YoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0NPUEVTSVpFX09GRlNFVF07XG4gIH1cblxuICBmcmVlKGhhbmRsZTogVk1IYW5kbGUpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNUQVRFX09GRlNFVF0gPSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBoZWFwIHVzZXMgdGhlIFtNYXJrLUNvbXBhY3QgQWxnb3JpdGhtXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXJrLWNvbXBhY3RfYWxnb3JpdGhtKSB0byBzaGlmdFxuICAgKiByZWFjaGFibGUgbWVtb3J5IHRvIHRoZSBib3R0b20gb2YgdGhlIGhlYXAgYW5kIGZyZWVhYmxlXG4gICAqIG1lbW9yeSB0byB0aGUgdG9wIG9mIHRoZSBoZWFwLiBXaGVuIHdlIGhhdmUgc2hpZnRlZCBhbGxcbiAgICogdGhlIHJlYWNoYWJsZSBtZW1vcnkgdG8gdGhlIHRvcCBvZiB0aGUgaGVhcCwgd2UgbW92ZSB0aGVcbiAgICogb2Zmc2V0IHRvIHRoZSBuZXh0IGZyZWUgcG9zaXRpb24uXG4gICAqL1xuICBjb21wYWN0KCk6IHZvaWQge1xuICAgIGxldCBjb21wYWN0ZWRTaXplID0gMDtcbiAgICBsZXQgeyB0YWJsZSwgdGFibGU6IHsgbGVuZ3RoIH0sIGhlYXAgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bGVuZ3RoOyBpKz1FTlRSWV9TSVpFKSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gdGFibGVbaV07XG4gICAgICBsZXQgc2l6ZSA9IHRhYmxlW2kgKyBTSVpFX09GRlNFVF07XG4gICAgICBsZXQgc3RhdGUgPSB0YWJsZVtpICsgU1RBVEVfT0ZGU0VUXTtcblxuICAgICAgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5QdXJnZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5GcmVlZCkge1xuICAgICAgICAvLyB0cmFuc2l0aW9uIHRvIFwiYWxyZWFkeSBmcmVlZFwiIGFrYSBcInB1cmdlZFwiXG4gICAgICAgIC8vIGEgZ29vZCBpbXByb3ZlbWVudCB3b3VsZCBiZSB0byByZXVzZVxuICAgICAgICAvLyB0aGVzZSBzbG90c1xuICAgICAgICB0YWJsZVtpICsgU1RBVEVfT0ZGU0VUXSA9IFRhYmxlU2xvdFN0YXRlLlB1cmdlZDtcbiAgICAgICAgY29tcGFjdGVkU2l6ZSArPSBzaXplO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuQWxsb2NhdGVkKSB7XG4gICAgICAgIGZvciAobGV0IGo9b2Zmc2V0OyBqPD1pK3NpemU7IGorKykge1xuICAgICAgICAgIGhlYXBbaiAtIGNvbXBhY3RlZFNpemVdID0gaGVhcFtqXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlW2ldID0gb2Zmc2V0IC0gY29tcGFjdGVkU2l6ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLlBvaW50ZXIpIHtcbiAgICAgICAgdGFibGVbaV0gPSBvZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5vZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICB9XG5cbiAgY2FwdHVyZSgpIHtcbiAgICAvLyBPbmx5IGNhbGxlZCBpbiBlYWdlciBtb2RlXG4gICAgbGV0IGJ1ZmZlciA9IHNsaWNlKHRoaXMuaGVhcCwgMCwgdGhpcy5vZmZzZXQpO1xuICAgIHJldHVybiB7XG4gICAgICBoYW5kbGU6IHRoaXMuaGFuZGxlLFxuICAgICAgdGFibGU6IHRoaXMudGFibGUsXG4gICAgICBidWZmZXI6IGJ1ZmZlciBhcyBBcnJheUJ1ZmZlclxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFdyaXRlT25seVByb2dyYW0gaW1wbGVtZW50cyBDb21waWxlVGltZVByb2dyYW0ge1xuICBba2V5OiBudW1iZXJdOiBuZXZlcjtcblxuICBwcml2YXRlIF9vcGNvZGU6IE9wY29kZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uc3RhbnRzOiBXcml0ZU9ubHlDb25zdGFudHMgPSBuZXcgV3JpdGVPbmx5Q29uc3RhbnRzKCksIHB1YmxpYyBoZWFwID0gbmV3IEhlYXAoKSkge1xuICAgIHRoaXMuX29wY29kZSA9IG5ldyBPcGNvZGUodGhpcy5oZWFwKTtcbiAgfVxuXG4gIG9wY29kZShvZmZzZXQ6IG51bWJlcik6IE9wY29kZSB7XG4gICAgdGhpcy5fb3Bjb2RlLm9mZnNldCA9IG9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5fb3Bjb2RlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lUHJvZ3JhbTxTcGVjaWZpZXI+IHtcbiAgW2tleTogbnVtYmVyXTogbmV2ZXI7XG5cbiAgcHJpdmF0ZSBfb3Bjb2RlOiBPcGNvZGU7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbnN0YW50czogUnVudGltZUNvbnN0YW50czxTcGVjaWZpZXI+LCBwdWJsaWMgaGVhcDogSGVhcCkge1xuICAgIHRoaXMuX29wY29kZSA9IG5ldyBPcGNvZGUodGhpcy5oZWFwKTtcbiAgfVxuXG4gIG9wY29kZShvZmZzZXQ6IG51bWJlcik6IE9wY29kZSB7XG4gICAgdGhpcy5fb3Bjb2RlLm9mZnNldCA9IG9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5fb3Bjb2RlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtPFNwZWNpZmllcj4gZXh0ZW5kcyBXcml0ZU9ubHlQcm9ncmFtIHtcbiAgcHVibGljIGNvbnN0YW50czogQ29uc3RhbnRzPFNwZWNpZmllcj47XG59XG5cbmZ1bmN0aW9uIHNsaWNlKGFycjogVWludDE2QXJyYXkgfCBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgaWYgKGFyciBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSB7XG4gICAgaWYgKGFyci5zbGljZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYXJyLnNsaWNlKHN0YXJ0LCBlbmQpLmJ1ZmZlcjtcbiAgICB9XG5cbiAgICBsZXQgcmV0ID0gbmV3IFVpbnQxNkFycmF5KGVuZCk7XG5cbiAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHtcbiAgICAgIHJldFtzdGFydF0gID0gYXJyW3N0YXJ0XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0LmJ1ZmZlcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIl0sIm5hbWVzIjpbIk9QRVJBTkRfTEVOX01BU0siLCJBUkdfU0hJRlQiLCJUWVBFX01BU0siXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFQSxJQUFNLGFBQWE7O0lBb0JuQjs7Ozs7YUFHbUIsVUFBYTthQUNkLFNBQWU7YUFDZixTQUFrQjthQUNqQixVQUFhO2FBQ1AsZ0JBQWE7YUFDbEIsV0FBYTthQUNmLFNBQWE7YUFDVixZQUFhOzs7d0RBRTFCLFFBQ0o7WUFBSSxRQUFRLEtBQUssT0FBTyxRQUFRO1lBRTVCLFFBQVEsQ0FBQyxHQUFHO21CQUNQOztlQUdGLEtBQUssT0FBTyxLQUFLLFVBQVM7Ozs4REFHMUIsV0FDUDtlQUFPLEtBQUssVUFBVSxLQUFLOzs7MERBR3RCLE9BQ0w7WUFBSSxRQUFRLEtBQUssUUFBUSxRQUFRO1lBRTdCLFFBQVEsQ0FBQyxHQUFHO21CQUNQOztlQUdGLEtBQUssUUFBUSxLQUFLLFNBQVM7OztvRUFHeEIsU0FDVjtZQUFJLFdBQXFCLElBQUksTUFBTSxRQUFRO2FBRXRDLElBQUksSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7cUJBQzlCLEtBQUssS0FBSyxPQUFPLFFBQVE7O2VBRzdCLEtBQUssTUFBTTs7O3dEQUdkLFFBQ0o7WUFBSSxRQUFRLEtBQUssT0FBTyxRQUFRO1lBRTVCLFFBQVEsQ0FBQyxHQUFHO21CQUNQOztlQUdGLEtBQUssT0FBTyxL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 |
@@ -17,8 +17,20 @@ "use strict"; | ||
this.floats = []; | ||
this.negatives = []; | ||
} | ||
float(float) { | ||
return this.floats.push(float); | ||
let index = this.floats.indexOf(float); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.floats.push(float) - 1; | ||
} | ||
negative(negative) { | ||
return this.negatives.push(negative); | ||
} | ||
string(value) { | ||
return this.strings.push(value); | ||
let index = this.strings.indexOf(value); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.strings.push(value) - 1; | ||
} | ||
@@ -33,6 +45,14 @@ stringArray(strings) { | ||
array(values) { | ||
return this.arrays.push(values); | ||
let index = this.arrays.indexOf(values); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.arrays.push(values) - 1; | ||
} | ||
table(t) { | ||
return this.tables.push(t); | ||
let index = this.tables.indexOf(t); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.tables.push(t) - 1; | ||
} | ||
@@ -44,3 +64,7 @@ handle(handle) { | ||
serializable(value) { | ||
return this.serializables.push(value); | ||
let index = this.serializables.indexOf(value); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.serializables.push(value) - 1; | ||
} | ||
@@ -54,3 +78,4 @@ toPool() { | ||
serializables: this.serializables, | ||
floats: this.floats | ||
floats: this.floats, | ||
negatives: this.negatives | ||
}; | ||
@@ -69,2 +94,3 @@ } | ||
this.floats = pool.floats; | ||
this.negatives = pool.negatives; | ||
this.resolved = this.handles.map(() => UNRESOLVED); | ||
@@ -74,6 +100,9 @@ } | ||
getFloat(value) { | ||
return this.floats[value - 1]; | ||
return this.floats[value]; | ||
} | ||
getNegative(value) { | ||
return this.negatives[value - 1]; | ||
} | ||
getString(value) { | ||
return this.strings[value - 1]; | ||
return this.strings[value]; | ||
} | ||
@@ -90,6 +119,6 @@ getStringArray(value) { | ||
getArray(value) { | ||
return this.arrays[value - 1]; | ||
return this.arrays[value]; | ||
} | ||
getSymbolTable(value) { | ||
return this.tables[value - 1]; | ||
return this.tables[value]; | ||
} | ||
@@ -106,3 +135,3 @@ resolveHandle(s) { | ||
getSerializable(s) { | ||
return this.serializables[s - 1]; | ||
return this.serializables[s]; | ||
} | ||
@@ -121,2 +150,4 @@ } | ||
this.serializables = pool.serializables; | ||
this.floats = pool.floats; | ||
this.negatives = pool.negatives; | ||
this.resolved = this.handles.map(() => UNRESOLVED); | ||
@@ -126,4 +157,10 @@ } | ||
// `0` means NULL | ||
getFloat(value) { | ||
return this.floats[value - 1]; | ||
} | ||
getNegative(value) { | ||
return this.negatives[value - 1]; | ||
} | ||
getString(value) { | ||
return this.strings[value - 1]; | ||
return this.strings[value]; | ||
} | ||
@@ -140,6 +177,6 @@ getStringArray(value) { | ||
getArray(value) { | ||
return this.arrays[value - 1]; | ||
return this.arrays[value]; | ||
} | ||
getSymbolTable(value) { | ||
return this.tables[value - 1]; | ||
return this.tables[value]; | ||
} | ||
@@ -156,3 +193,3 @@ resolveHandle(s) { | ||
getSerializable(s) { | ||
return this.serializables[s - 1]; | ||
return this.serializables[s]; | ||
} | ||
@@ -174,2 +211,2 @@ } | ||
exports.LazyConstants = LazyConstants; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvcHJvZ3JhbS9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsTUFBTSxBQUFVLGFBQUcsQUFBRSxBQUFDLEFBa0J0QixBQUFNOztrQkFDSixBQUFpQjtBQUVQO2FBQU8sVUFBYSxBQUFFLEFBQUMsQUFDdkI7YUFBTSxTQUFlLEFBQUUsQUFBQyxBQUN4QjthQUFNLFNBQWtCLEFBQUUsQUFBQyxBQUMzQjthQUFPLFVBQWEsQUFBRSxBQUFDLEFBQ3ZCO2FBQWEsZ0JBQWEsQUFBRSxBQUFDLEFBQzdCO2FBQVEsV0FBYSxBQUFFLEFBQUMsQUFDeEI7YUFBTSxTQUFhLEFBQUUsQUFBQyxBQStDbEMsQUFBQztBQTdDQyxBQUFLO1VBQUMsQUFBYSxPQUNqQixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDakMsQUFBQztBQUVELEFBQU07V0FBQyxBQUFhLE9BQ2xCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTyxRQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQyxBQUNsQyxBQUFDO0FBRUQsQUFBVztnQkFBQyxBQUFpQixTQUMzQjtZQUFJLEFBQVEsV0FBYSxJQUFJLEFBQUssTUFBQyxBQUFPLFFBQUMsQUFBTSxBQUFDLEFBQUMsQUFFbkQsQUFBRyxBQUFDO2FBQUMsSUFBSSxBQUFDLElBQUcsQUFBQyxHQUFFLEFBQUMsSUFBRyxBQUFPLFFBQUMsQUFBTSxRQUFFLEFBQUMsQUFBRSxLQUFFLEFBQUMsQUFDeEMsQUFBUTtxQkFBQyxBQUFDLEFBQUMsS0FBRyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQU8sUUFBQyxBQUFDLEFBQUMsQUFBQyxBQUFDLEFBQ3hDLEFBQUM7QUFFRCxBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFRLEFBQUMs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QVEsV0FBRyxBQUFJLEtBQUMsQUFBUSxTQUFDLEFBQUssQUFBQyxBQUFDLEFBRXBDLEFBQUUsQUFBQztZQUFDLEFBQVEsYUFBSyxBQUFVLEFBQUMsWUFBQyxBQUFDLEFBQzVCO2dCQUFJLEFBQU0sU0FBRyxBQUFJLEtBQUMsQUFBTyxRQUFDLEFBQUssQUFBQyxBQUFDLEFBQ2pDLEFBQVE7dUJBQUcsQUFBSSxLQUFDLEFBQVEsU0FBQyxBQUFLLEFBQUMsU0FBRyxBQUFJLEtBQUMsQUFBUSxTQUFDLEFBQU8sUUFBQyxBQUFNLEFBQUMsQUFBQyxBQUNsRSxBQUFDO0FBRUQsQUFBTTtlQUFDLEFBQWEsQUFBQyxBQUN2QixBQUFDO0FBRUQsQUFBZTtvQkFBSSxBQUFTLEdBQzFCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBYSxjQUFDLEFBQUMsSUFBRyxBQUFDLEFBQU0sQUFBQyxBQUN4QyxBQUFDLEFBQ0Y7QUFFRCxBQUFNO0FBeERKOztNQXdEeUIsc0JBQVEsQUFBaUI7O2lCQUMxQzthQUFNLFNBQWEsQUFBRSxBQUFDLEFBU2hDLEFBQUM7QUFQQyxBQUFRO2FBQUksQUFBYSxPQUN2QixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFLLFFBQUcsQUFBQyxBQUFNLEFBQUMsQUFDckMsQUFBQztBQUVELEFBQUs7VUFBQyxBQUFhLE9BQ2pCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQyxBQUNqQyxBQUFDLEFBQ0Y7O0FBVkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIFN5bWJvbFRhYmxlLCBSdW50aW1lUmVzb2x2ZXIgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQ29tcGlsZVRpbWVDb25zdGFudHMgfSBmcm9tIFwiQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyXCI7XG5cbmNvbnN0IFVOUkVTT0xWRUQgPSB7fTtcblxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFBvb2wge1xuICBzdHJpbmdzOiBzdHJpbmdbXTtcbiAgYXJyYXlzOiBudW1iZXJbXVtdO1xuICB0YWJsZXM6IFN5bWJvbFRhYmxlW107XG4gIGhhbmRsZXM6IG51bWJlcltdO1xuICBzZXJpYWxpemFibGVzOiBPcGFxdWVbXTtcbiAgZmxvYXRzOiBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gUHJpbWl0aXZlVHlwZSB7XG4gIE5VTUJFUiAgICAgICAgICA9IDBiMDAsXG4gIEZMT0FUICAgICAgICAgICA9IDBiMDEsXG4gIFNUUklORyAgICAgICAgICA9IDBiMTAsXG4gIEJPT0xFQU5fT1JfVk9JRCA9IDBiMTFcbn1cblxuZXhwb3J0IGNsYXNzIFdyaXRlT25seUNvbnN0YW50cyBpbXBsZW1lbnRzIENvbXBpbGVUaW1lQ29uc3RhbnRzIHtcbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBwcm90ZWN0ZWQgc3RyaW5nczogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXSA9IFtdO1xuICBwcm90ZWN0ZWQgdGFibGVzOiBTeW1ib2xUYWJsZVtdID0gW107XG4gIHByb3RlY3RlZCBoYW5kbGVzOiBudW1iZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW10gPSBbXTtcbiAgcHJvdGVjdGVkIHJlc29sdmVkOiBPcGFxdWVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgZmxvYXRzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZsb2F0KGZsb2F0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdHMucHVzaChmbG9hdCk7XG4gIH1cblxuICBzdHJpbmcodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHN0cmluZ0FycmF5KHN0cmluZ3M6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBsZXQgX3N0cmluZ3M6IG51bWJlcltdID0gbmV3IEFycmF5KHN0cmluZ3MubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgX3N0cmluZ3NbaV0gPSB0aGlzLnN0cmluZyhzdHJpbmdzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJheShfc3RyaW5ncyk7XG4gIH1cblxuICBhcnJheSh2YWx1ZXM6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hcnJheXMucHVzaCh2YWx1ZXMpO1xuICB9XG5cbiAgdGFibGUodDogU3ltYm9sVGFibGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlcy5wdXNoKHQpO1xuICB9XG5cbiAgaGFuZGxlKGhhbmRsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aGlzLnJlc29sdmVkLnB1c2goVU5SRVNPTFZFRCk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gIH1cblxuICBzZXJpYWxpemFibGUodmFsdWU6IE9wYXF1ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlcy5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHRvUG9vbCgpOiBDb25zdGFudFBvb2wge1xuICAgIHJldHVybiB7XG4gICAgICBzdHJpbmdzOiB0aGlzLnN0cmluZ3MsXG4gICAgICBhcnJheXM6IHRoaXMuYXJyYXlzLFxuICAgICAgdGFibGVzOiB0aGlzLnRhYmxlcyxcbiAgICAgIGhhbmRsZXM6IHRoaXMuaGFuZGxlcyxcbiAgICAgIHNlcmlhbGl6YWJsZXM6IHRoaXMuc2VyaWFsaXphYmxlcyxcbiAgICAgIGZsb2F0czogdGhpcy5mbG9hdHNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uc3RhbnRzPFNwZWNpZmllcj4ge1xuICBwcm90ZWN0ZWQgc3RyaW5nczogc3RyaW5nW107XG4gIHByb3RlY3RlZCBhcnJheXM6IG51bWJlcltdW107XG4gIHByb3RlY3RlZCB0YWJsZXM6IFN5bWJvbFRhYmxlW107XG4gIHByb3RlY3RlZCBoYW5kbGVzOiBudW1iZXJbXTtcbiAgcHJvdGVjdGVkIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdO1xuICBwcm90ZWN0ZWQgcmVzb2x2ZWQ6IE9wYXF1ZVtdO1xuICBwcm90ZWN0ZWQgZmxvYXRzOiBudW1iZXJbXTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sOiBDb25zdGFudFBvb2wpIHtcbiAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgdGhpcy5hcnJheXMgPSBwb29sLmFycmF5cztcbiAgICB0aGlzLnRhYmxlcyA9IHBvb2wudGFibGVzO1xuICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICB0aGlzLnNlcmlhbGl6YWJsZXMgPSBwb29sLnNlcmlhbGl6YWJsZXM7XG4gICAgdGhpcy5mbG9hdHMgPSBwb29sLmZsb2F0cztcbiAgICB0aGlzLnJlc29sdmVkID0gdGhpcy5oYW5kbGVzLm1hcCgoKSA9PiBVTlJFU09MVkVEKTtcbiAgfVxuXG4gIC8vIGAwYCBtZWFucyBOVUxMXG5cbiAgZ2V0RmxvYXQodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmcodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nc1t2YWx1ZSAtIDFdO1xuICB9XG5cbiAgZ2V0U3RyaW5nQXJyYXkodmFsdWU6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgICBsZXQgbmFtZXMgPSB0aGlzLmdldEFycmF5KHZhbHVlKTtcbiAgICBsZXQgX25hbWVzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShuYW1lcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG4gPSBuYW1lc1tpXTtcbiAgICAgIF9uYW1lc1tpXSA9IHRoaXMuZ2V0U3RyaW5nKG4pO1xuICAgIH1cblxuICAgIHJldHVybiBfbmFtZXM7XG4gIH1cblxuICBnZXRBcnJheSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLmFycmF5c1t2YWx1ZSAtIDFdO1xuICB9XG5cbiAgZ2V0U3ltYm9sVGFibGU8VCBleHRlbmRzIFN5bWJvbFRhYmxlPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzW3ZhbHVlIC0gMV0gYXMgVDtcbiAgfVxuXG4gIHJlc29sdmVIYW5kbGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgbGV0IGluZGV4ID0gcyAtIDE7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF07XG5cbiAgICBpZiAocmVzb2x2ZWQgPT09IFVOUkVTT0xWRUQpIHtcbiAgICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZXNbaW5kZXhdO1xuICAgICAgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZShoYW5kbGUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlZCBhcyBUO1xuICB9XG5cbiAgZ2V0U2VyaWFsaXphYmxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YWJsZXNbcyAtIDFdIGFzIFQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnN0YW50czxTcGVjaWZpZXI+IGV4dGVuZHMgV3JpdGVPbmx5Q29uc3RhbnRzIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlc29sdmVyOiBSdW50aW1lUmVzb2x2ZXI8U3BlY2lmaWVyPiwgcG9vbD86IENvbnN0YW50UG9vbCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAocG9vbCkge1xuICAgICAgdGhpcy5zdHJpbmdzID0gcG9vbC5zdHJpbmdzO1xuICAgICAgdGhpcy5hcnJheXMgPSBwb29sLmFycmF5cztcbiAgICAgIHRoaXMudGFibGVzID0gcG9vbC50YWJsZXM7XG4gICAgICB0aGlzLmhhbmRsZXMgPSBwb29sLmhhbmRsZXM7XG4gICAgICB0aGlzLnNlcmlhbGl6YWJsZXMgPSBwb29sLnNlcmlhbGl6YWJsZXM7XG4gICAgICB0aGlzLnJlc29sdmVkID0gdGhpcy5oYW5kbGVzLm1hcCgoKSA9PiBVTlJFU09MVkVEKTtcbiAgICB9XG4gIH1cblxuICAvLyBgMGAgbWVhbnMgTlVMTFxuXG4gIGdldFN0cmluZyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmdBcnJheSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0QXJyYXkodmFsdWUpO1xuICAgIGxldCBfbmFtZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IG5hbWVzW2ldO1xuICAgICAgX25hbWVzW2ldID0gdGhpcy5nZXRTdHJpbmcobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9uYW1lcztcbiAgfVxuXG4gIGdldEFycmF5KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXlzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTeW1ib2xUYWJsZTxUIGV4dGVuZHMgU3ltYm9sVGFibGU+KHZhbHVlOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZXNbdmFsdWUgLSAxXSBhcyBUO1xuICB9XG5cbiAgcmVzb2x2ZUhhbmRsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICBsZXQgaW5kZXggPSBzIC0gMTtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XTtcblxuICAgIGlmIChyZXNvbHZlZCA9PT0gVU5SRVNPTFZFRCkge1xuICAgICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlc1tpbmRleF07XG4gICAgICByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkIGFzIFQ7XG4gIH1cblxuICBnZXRTZXJpYWxpemFibGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlc1tzIC0gMV0gYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGF6eUNvbnN0YW50cyBleHRlbmRzIENvbnN0YW50czxPcGFxdWU+IHtcbiAgcHJpdmF0ZSBvdGhlcnM6IE9wYXF1ZVtdID0gW107XG5cbiAgZ2V0T3RoZXI8VD4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLm90aGVyc1t2YWx1ZSAtIDFdIGFzIFQ7XG4gIH1cblxuICBvdGhlcihvdGhlcjogT3BhcXVlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vdGhlcnMucHVzaChvdGhlcik7XG4gIH1cbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvcHJvZ3JhbS9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsTUFBTSxBQUFVLGFBQUcsQUFBRSxBQUFDLEFBb0J0QixBQUFNOztrQkFDSixBQUFpQjtBQUVQO2FBQU8sVUFBYSxBQUFFLEFBQUMsQUFDdkI7YUFBTSxTQUFlLEFBQUUsQUFBQyxBQUN4QjthQUFNLFNBQWtCLEFBQUUsQUFBQyxBQUMzQjthQUFPLFVBQWEsQUFBRSxBQUFDLEFBQ3ZCO2FBQWEsZ0JBQWEsQUFBRSxBQUFDLEFBQzdCO2FBQVEsV0FBYSxBQUFFLEFBQUMsQUFDeEI7YUFBTSxTQUFhLEFBQUUsQUFBQyxBQUN0QjthQUFTLFlBQWEsQUFBRSxBQUFDLEFBa0ZyQyxBQUFDO0FBaEZDLEFBQUs7VUFBQyxBQUFhLE9BQ2pCO1lBQUksQUFBSyxRQUFHLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBTyxRQUFDLEFBQUssQUFBQyxBQUFDLEFBRXZDLEFBQUUsQUFBQztZQUFDLEFBQUssUUFBRyxDQUFDLEFBQUMsQUFBQyxHQUFDLEFBQUMsQUFDZixBQUFNO21CQUFDLEFBQUssQUFBQyxBQUNmLEFBQUM7QUFFRCxBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLFNBQUcsQUFBQyxBQUFDLEFBQ3JDLEFBQUM7QUFFRCxBQUFRO2FBQUMsQUFBZ0IsVUFDdkIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBSSxLQUFDLEFBQVEsQUFBQyxBQUFDLEFBQ3ZDLEFBQUM7QUFFRCxBQUFNO1dBQUMsQUFBYSxPQUNsQjtZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBTyxRQUFDLEFBQU8sUUFBQyxBQUFLLEFBQUMsQUFBQyxBQUV4QyxBQUFFLEFBQUM7WUFBQyxBQUFLLFFBQUcsQ0FBQyxB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YSxPQUN2QixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFLLFFBQUcsQUFBQyxBQUFNLEFBQUMsQUFDckMsQUFBQztBQUVELEFBQUs7VUFBQyxBQUFhLE9BQ2pCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQyxBQUNqQyxBQUFDLEFBQ0Y7O0FBVkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIFN5bWJvbFRhYmxlLCBSdW50aW1lUmVzb2x2ZXIsIENvbXBpbGVUaW1lQ29uc3RhbnRzIH0gZnJvbSBcIkBnbGltbWVyL2ludGVyZmFjZXNcIjtcblxuY29uc3QgVU5SRVNPTFZFRCA9IHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0YW50UG9vbCB7XG4gIHN0cmluZ3M6IHN0cmluZ1tdO1xuICBhcnJheXM6IG51bWJlcltdW107XG4gIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgaGFuZGxlczogbnVtYmVyW107XG4gIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdO1xuICBmbG9hdHM6IG51bWJlcltdO1xuICBuZWdhdGl2ZXM6IG51bWJlcltdO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBQcmltaXRpdmVUeXBlIHtcbiAgTlVNQkVSICAgICAgICAgID0gMGIwMDAsXG4gIEZMT0FUICAgICAgICAgICA9IDBiMDAxLFxuICBTVFJJTkcgICAgICAgICAgPSAwYjAxMCxcbiAgQk9PTEVBTl9PUl9WT0lEID0gMGIwMTEsXG4gIE5FR0FUSVZFICAgICAgICA9IDBiMTAwXG59XG5cbmV4cG9ydCBjbGFzcyBXcml0ZU9ubHlDb25zdGFudHMgaW1wbGVtZW50cyBDb21waWxlVGltZUNvbnN0YW50cyB7XG4gIC8vIGAwYCBtZWFucyBOVUxMXG5cbiAgcHJvdGVjdGVkIHN0cmluZ3M6IHN0cmluZ1tdID0gW107XG4gIHByb3RlY3RlZCBhcnJheXM6IG51bWJlcltdW10gPSBbXTtcbiAgcHJvdGVjdGVkIHRhYmxlczogU3ltYm9sVGFibGVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgaGFuZGxlczogbnVtYmVyW10gPSBbXTtcbiAgcHJvdGVjdGVkIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdID0gW107XG4gIHByb3RlY3RlZCByZXNvbHZlZDogT3BhcXVlW10gPSBbXTtcbiAgcHJvdGVjdGVkIGZsb2F0czogbnVtYmVyW10gPSBbXTtcbiAgcHJvdGVjdGVkIG5lZ2F0aXZlczogbnVtYmVyW10gPSBbXTtcblxuICBmbG9hdChmbG9hdDogbnVtYmVyKSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5mbG9hdHMuaW5kZXhPZihmbG9hdCk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZsb2F0cy5wdXNoKGZsb2F0KSAtIDE7XG4gIH1cblxuICBuZWdhdGl2ZShuZWdhdGl2ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmVzLnB1c2gobmVnYXRpdmUpO1xuICB9XG5cbiAgc3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBpbmRleCA9IHRoaXMuc3RyaW5ncy5pbmRleE9mKHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5wdXNoKHZhbHVlKSAtIDE7XG4gIH1cblxuICBzdHJpbmdBcnJheShzdHJpbmdzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gICAgbGV0IF9zdHJpbmdzOiBudW1iZXJbXSA9IG5ldyBBcnJheShzdHJpbmdzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9zdHJpbmdzW2ldID0gdGhpcy5zdHJpbmcoc3RyaW5nc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXJyYXkoX3N0cmluZ3MpO1xuICB9XG5cbiAgYXJyYXkodmFsdWVzOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5hcnJheXMuaW5kZXhPZih2YWx1ZXMpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJheXMucHVzaCh2YWx1ZXMpIC0gMTtcbiAgfVxuXG4gIHRhYmxlKHQ6IFN5bWJvbFRhYmxlKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLnRhYmxlcy5pbmRleE9mKHQpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50YWJsZXMucHVzaCh0KSAtIDE7XG4gIH1cblxuICBoYW5kbGUoaGFuZGxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRoaXMucmVzb2x2ZWQucHVzaChVTlJFU09MVkVEKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVzLnB1c2goaGFuZGxlKTtcbiAgfVxuXG4gIHNlcmlhbGl6YWJsZSh2YWx1ZTogT3BhcXVlKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLnNlcmlhbGl6YWJsZXMuaW5kZXhPZih2YWx1ZSk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YWJsZXMucHVzaCh2YWx1ZSkgLSAxO1xuICB9XG5cbiAgdG9Qb29sKCk6IENvbnN0YW50UG9vbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmluZ3M6IHRoaXMuc3RyaW5ncyxcbiAgICAgIGFycmF5czogdGhpcy5hcnJheXMsXG4gICAgICB0YWJsZXM6IHRoaXMudGFibGVzLFxuICAgICAgaGFuZGxlczogdGhpcy5oYW5kbGVzLFxuICAgICAgc2VyaWFsaXphYmxlczogdGhpcy5zZXJpYWxpemFibGVzLFxuICAgICAgZmxvYXRzOiB0aGlzLmZsb2F0cyxcbiAgICAgIG5lZ2F0aXZlczogdGhpcy5uZWdhdGl2ZXNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uc3RhbnRzPFNwZWNpZmllcj4ge1xuICBwcm90ZWN0ZWQgc3RyaW5nczogc3RyaW5nW107XG4gIHByb3RlY3RlZCBhcnJheXM6IG51bWJlcltdW107XG4gIHByb3RlY3RlZCB0YWJsZXM6IFN5bWJvbFRhYmxlW107XG4gIHByb3RlY3RlZCBoYW5kbGVzOiBudW1iZXJbXTtcbiAgcHJvdGVjdGVkIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdO1xuICBwcm90ZWN0ZWQgcmVzb2x2ZWQ6IE9wYXF1ZVtdO1xuICBwcm90ZWN0ZWQgZmxvYXRzOiBudW1iZXJbXTtcbiAgcHJvdGVjdGVkIG5lZ2F0aXZlczogbnVtYmVyW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlc29sdmVyOiBSdW50aW1lUmVzb2x2ZXI8U3BlY2lmaWVyPiwgcG9vbDogQ29uc3RhbnRQb29sKSB7XG4gICAgdGhpcy5zdHJpbmdzID0gcG9vbC5zdHJpbmdzO1xuICAgIHRoaXMuYXJyYXlzID0gcG9vbC5hcnJheXM7XG4gICAgdGhpcy50YWJsZXMgPSBwb29sLnRhYmxlcztcbiAgICB0aGlzLmhhbmRsZXMgPSBwb29sLmhhbmRsZXM7XG4gICAgdGhpcy5zZXJpYWxpemFibGVzID0gcG9vbC5zZXJpYWxpemFibGVzO1xuICAgIHRoaXMuZmxvYXRzID0gcG9vbC5mbG9hdHM7XG4gICAgdGhpcy5uZWdhdGl2ZXMgPSBwb29sLm5lZ2F0aXZlcztcbiAgICB0aGlzLnJlc29sdmVkID0gdGhpcy5oYW5kbGVzLm1hcCgoKSA9PiBVTlJFU09MVkVEKTtcbiAgfVxuXG4gIC8vIGAwYCBtZWFucyBOVUxMXG5cbiAgZ2V0RmxvYXQodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRzW3ZhbHVlXTtcbiAgfVxuXG4gIGdldE5lZ2F0aXZlKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0aXZlc1t2YWx1ZSAtIDFdO1xuICB9XG5cbiAgZ2V0U3RyaW5nKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ3NbdmFsdWVdO1xuICB9XG5cbiAgZ2V0U3RyaW5nQXJyYXkodmFsdWU6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgICBsZXQgbmFtZXMgPSB0aGlzLmdldEFycmF5KHZhbHVlKTtcbiAgICBsZXQgX25hbWVzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShuYW1lcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG4gPSBuYW1lc1tpXTtcbiAgICAgIF9uYW1lc1tpXSA9IHRoaXMuZ2V0U3RyaW5nKG4pO1xuICAgIH1cblxuICAgIHJldHVybiBfbmFtZXM7XG4gIH1cblxuICBnZXRBcnJheSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLmFycmF5c1t2YWx1ZV07XG4gIH1cblxuICBnZXRTeW1ib2xUYWJsZTxUIGV4dGVuZHMgU3ltYm9sVGFibGU+KHZhbHVlOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZXNbdmFsdWVdIGFzIFQ7XG4gIH1cblxuICByZXNvbHZlSGFuZGxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIGxldCBpbmRleCA9IHMgLSAxO1xuICAgIGxldCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdO1xuXG4gICAgaWYgKHJlc29sdmVkID09PSBVTlJFU09MVkVEKSB7XG4gICAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGVzW2luZGV4XTtcbiAgICAgIHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF0gPSB0aGlzLnJlc29sdmVyLnJlc29sdmUoaGFuZGxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQgYXMgVDtcbiAgfVxuXG4gIGdldFNlcmlhbGl6YWJsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemFibGVzW3NdIGFzIFQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnN0YW50czxTcGVjaWZpZXI+IGV4dGVuZHMgV3JpdGVPbmx5Q29uc3RhbnRzIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlc29sdmVyOiBSdW50aW1lUmVzb2x2ZXI8U3BlY2lmaWVyPiwgcG9vbD86IENvbnN0YW50UG9vbCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAocG9vbCkge1xuICAgICAgdGhpcy5zdHJpbmdzID0gcG9vbC5zdHJpbmdzO1xuICAgICAgdGhpcy5hcnJheXMgPSBwb29sLmFycmF5cztcbiAgICAgIHRoaXMudGFibGVzID0gcG9vbC50YWJsZXM7XG4gICAgICB0aGlzLmhhbmRsZXMgPSBwb29sLmhhbmRsZXM7XG4gICAgICB0aGlzLnNlcmlhbGl6YWJsZXMgPSBwb29sLnNlcmlhbGl6YWJsZXM7XG4gICAgICB0aGlzLmZsb2F0cyA9IHBvb2wuZmxvYXRzO1xuICAgICAgdGhpcy5uZWdhdGl2ZXMgPSBwb29sLm5lZ2F0aXZlcztcbiAgICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGAwYCBtZWFucyBOVUxMXG4gIGdldEZsb2F0KHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZsb2F0c1t2YWx1ZSAtIDFdO1xuICB9XG5cbiAgZ2V0TmVnYXRpdmUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmVzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmcodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nc1t2YWx1ZV07XG4gIH1cblxuICBnZXRTdHJpbmdBcnJheSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0QXJyYXkodmFsdWUpO1xuICAgIGxldCBfbmFtZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IG5hbWVzW2ldO1xuICAgICAgX25hbWVzW2ldID0gdGhpcy5nZXRTdHJpbmcobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9uYW1lcztcbiAgfVxuXG4gIGdldEFycmF5KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXlzW3ZhbHVlXTtcbiAgfVxuXG4gIGdldFN5bWJvbFRhYmxlPFQgZXh0ZW5kcyBTeW1ib2xUYWJsZT4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlc1t2YWx1ZV0gYXMgVDtcbiAgfVxuXG4gIHJlc29sdmVIYW5kbGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgbGV0IGluZGV4ID0gcyAtIDE7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF07XG5cbiAgICBpZiAocmVzb2x2ZWQgPT09IFVOUkVTT0xWRUQpIHtcbiAgICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZXNbaW5kZXhdO1xuICAgICAgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZShoYW5kbGUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlZCBhcyBUO1xuICB9XG5cbiAgZ2V0U2VyaWFsaXphYmxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YWJsZXNbc10gYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGF6eUNvbnN0YW50cyBleHRlbmRzIENvbnN0YW50czxPcGFxdWU+IHtcbiAgcHJpdmF0ZSBvdGhlcnM6IE9wYXF1ZVtdID0gW107XG5cbiAgZ2V0T3RoZXI8VD4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLm90aGVyc1t2YWx1ZSAtIDFdIGFzIFQ7XG4gIH1cblxuICBvdGhlcihvdGhlcjogT3BhcXVlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vdGhlcnMucHVzaChvdGhlcik7XG4gIH1cbn1cbiJdfQ== |
@@ -23,16 +23,44 @@ 'use strict'; | ||
const STATE_OFFSET = 3; | ||
/** | ||
* The Heap is responsible for dynamically allocating | ||
* memory in which we read/write the VM's instructions | ||
* from/to. When we malloc we pass out a VMHandle, which | ||
* is used as an indirect way of accessing the memory during | ||
* execution of the VM. Internally we track the different | ||
* regions of the memory in an int array known as the table. | ||
* | ||
* The table has the following layout: | ||
* | ||
* | ... | table entry | | ||
* | ... | hp | size | scope size | state | | ||
* | ... | 0 | 122 | 3 | 0 | | ||
* handle ^ | | ^ region state (allocated, freed, purged) | ||
* region size ^ | | ||
* number of symbols ^ | ||
* | ||
* With this information we effectively have the ability to | ||
* control when we want to free memory. That being said you | ||
* can not free during execution as raw address are only | ||
* valid during the execution. This means you cannot close | ||
* over them as you will have a bad memory access exception. | ||
*/ | ||
class Heap { | ||
constructor() { | ||
this.heap = []; | ||
constructor(serializedHeap) { | ||
this.offset = 0; | ||
this.handle = 0; | ||
/** | ||
* layout: | ||
* | ||
* - pointer into heap | ||
* - size | ||
* - scope size | ||
* - freed (0 or 1) | ||
*/ | ||
this.table = []; | ||
if (serializedHeap) { | ||
let { buffer, table, handle } = serializedHeap; | ||
this.heap = new Uint16Array(buffer); | ||
this.table = table; | ||
this.offset = this.heap.length; | ||
this.handle = handle; | ||
} else { | ||
if (typeof Uint16Array !== 'undefined') { | ||
this.heap = new Uint16Array(0x100000); | ||
} else { | ||
// FIXME remove once we drop IE9 | ||
this.heap = new Array(0x100000); | ||
} | ||
this.table = []; | ||
} | ||
} | ||
@@ -87,2 +115,9 @@ push(item) { | ||
} | ||
/** | ||
* The heap uses the [Mark-Compact Algorithm](https://en.wikipedia.org/wiki/Mark-compact_algorithm) to shift | ||
* reachable memory to the bottom of the heap and freeable | ||
* memory to the top of the heap. When we have shifted all | ||
* the reachable memory to the top of the heap, we move the | ||
* offset to the next free position. | ||
*/ | ||
compact() { | ||
@@ -114,4 +149,10 @@ let compactedSize = 0; | ||
} | ||
toArray() { | ||
return this.heap.slice(); | ||
capture() { | ||
// Only called in eager mode | ||
let buffer = slice(this.heap, 0, this.offset); | ||
return { | ||
handle: this.handle, | ||
table: this.table, | ||
buffer: buffer | ||
}; | ||
} | ||
@@ -146,2 +187,15 @@ } | ||
exports.Program = Program; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLEFBQU8sQUFBYSxBQUFrQixBQUFvQixBQUFNLEFBQWEsQUFBQzs7QUFDOUUsQUFBTyxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQVUsQUFBQzs7QUFHbEMsSUFBSyxBQUtKO0FBTEQsV0FBSyxBQUFjLGdCQUNqQjtzREFBUyxBQUNUO2tEQUFLLEFBQ0w7bURBQU0sQUFDTjtvREFBTyxBQUNULEFBQUM7R0FMSSxBQUFjLG1CQUFkLEFBQWMsaUJBS2xCO0FBRUQsTUFBTSxBQUFVLGFBQUcsQUFBQyxBQUFDO0FBQ3JCLE1BQU0sQUFBVyxjQUFHLEFBQUMsQUFBQztBQUN0QixNQUFNLEFBQWdCLG1CQUFHLEFBQUMsQUFBQztBQUMzQixNQUFNLEFBQVksZUFBRyxBQUFDLEFBQUMsQUFFdkIsQUFBTTs7a0JBQ0k7YUFBSSxPQUFhLEFBQUUsQUFBQyxBQUNwQjthQUFNLFNBQUcsQUFBQyxBQUFDLEFBQ1g7YUFBTSxTQUFHLEFBQUMsQUFBQyxBQUVuQixBQU9HO0FBQ0s7Ozs7Ozs7O2FBQUssUUFBYSxBQUFFLEFBQUMsQUErRi9CLEFBQUM7QUE3RkMsQUFBSTtTQUFDLEFBQVksTUFDZixBQUFJO2FBQUMsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFNLEFBQUUsQUFBQyxZQUFHLEFBQUksQUFBQyxBQUNsQyxBQUFDO0FBRUQsQUFBUztjQUFDLEFBQWUsU0FDdkIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLEFBQUMsQUFDNUIsQUFBQztBQUVELEFBQVM7Y0FBQyxBQUFlLFNBQUUsQUFBYSxPQUN0QyxBQUFJO2FBQUMsQUFBSSxLQUFDLEFBQU8sQUFBQyxXQUFHLEFBQUssQUFBQyxBQUM3QixBQUFDO0FBRUQsQUFBTTthQUNKLEFBQUk7YUFBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFNLFFBQUUsQUFBQyxHQUFFLEFBQUMsR0FBRSxBQUFDLEFBQUMsQUFBQyxBQUN0QztZQUFJLEFBQU0sU0FBRyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQ3pCLEFBQUk7YUFBQyxBQUFNLFVBQUksQUFBVSxBQUFDLEFBQzFCLEFBQU07ZUFBQyxBQUFrQyxBQUFDLEFBQzVDLEFBQUM7QUFFRCxBQUFZO2lCQUFDLEFBQWdCLFFBQUUsQUFBaUIsV0FDOUM7WUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFrQyxBQUFDLEFBQUMsQUFDM0Q7WUFBSSxBQUFNLFNBQUcsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUN6QixBQUFJO2FBQUMsQUFBSyxNQUFFLEFBQW1DLFNBQUcsQUFBVyxBQUFDLGVBQUcsQUFBTSxTQUFHLEFBQUssQUFBQyxBQUNoRixBQUFJO2FBQUMsQUFBSyxNQUFFLEFBQW1DLFNBQUcsQUFBZ0IsQUFBQyxvQkFBRyxBQUFTLEFBQUMsQUFDbEYsQUFBQztBQUVELEFBQUk7V0FDRixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUNyQixBQUFDO0FBRUQsQUFBMEQ7QUFDMUQsQUFBd0Q7QUFDeEQsQUFBc0M7QUFDdEMsQUFBTztZQUFDLEFBQWdCLFFBQ3RCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQWtDLEFBQUMsQUFBQyxBQUN4RCxBQUFDO0FBRUQsQUFBUztjQUFDLEFBQWUsU0FDdkIsQUFBSTthQUFDLEFBQUssTUFBQyxBQUFJLEtBQUMsQUFBTyxTQUFFLEFBQUMsR0FBRSxBQUFDLEdBQUUsQUFBYyxlQUFDLEFBQU8sQUFBQyxBQUFDLEFBQ3ZEO1lBQUksQUFBTSxTQUFHLEFBQUksS0FBQyxBQUFNLEFBQUMsQUFDekIsQUFBSTthQUFDLEFBQU0sVUFBSSxBQUFVLEFBQUMsQUFDMUIsQUFBTTtlQUFDLEFBQWtDLEFBQUMsQUFDNUMsQUFBQztBQUVELEFBQU07V0FBQyxBQUFnQixRQUNyQixBQUFFLEFBQUMsQUFBQyxBQUFLLEFBQUM7bUJBQUMsQUFBQyxBQUNWLEFBQU07bUJBQUMsQUFBSSxLQUFDLEFBQUssTUFBRSxBQUFtQyxTQUFHLEFBQVcsQUFBQyxBQUFDLEFBQ3hFLEFBQUM7QUFDRCxBQUFNO2VBQUMsQ0FBQyxBQUFDLEFBQUMsQUFDWixBQUFDO0FBRUQsQUFBVztnQkFBQyxBQUFnQixRQUMxQixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQUssTUFBRSxBQUFtQyxTQUFHLEFBQWdCLEFBQUMsQUFBQyxBQUM3RSxBQUFDO0FBRUQsQUFBSTtTQUFDLEFBQWdCLFFBQ25CLEFBQUk7YUFBQyxBQUFLLE1BQUUsQUFBbUMsU0FBRyxBQUFZLEFBQUMsZ0JBQUcsQUFBQyxBQUFDLEFBQ3RFLEFBQUM7QUFFRCxBQUFPO2NBQ0w7WUFBSSxBQUFhLGdCQUFHLEFBQUMsQUFBQyxBQUN0QjtZQUFJLEVBQUUsQUFBSyxPQUFFLEFBQUssT0FBRSxFQUFFLEFBQU0sQUFBRSxVQUFFLEFBQUksQUFBRSxTQUFHLEFBQUksQUFBQyxBQUU5QyxBQUFHLEFBQUM7YUFBQyxJQUFJLEFBQUMsSUFBQyxBQUFDLEdBQUUsQUFBQyxJQUFDLEFBQU0sUUFBRSxBQUFDLEtBQUUsQUFBVSxZQUFFLEFBQUMsQUFDdEM7Z0JBQUksQUFBTSxTQUFHLEFBQUssTUFBQyxBQUFDLEFBQUMsQUFBQyxBQUN0QjtnQkFBSSxBQUFJLE9BQUcsQUFBSyxNQUFDLEFBQUMsSUFBRyxBQUFXLEFBQUMsQUFBQyxBQUNsQztnQkFBSSxBQUFLLFFBQUcsQUFBSyxNQUFDLEFBQUMsSUFBRyxBQUFZLEFBQUMsQUFBQyxBQUVwQyxBQUFFLEFBQUM7Z0JBQUMsQUFBSyxVQUFLLEFBQWMsZUFBQyxBQUFNLEFBQUMsUUFBQyxBQUFDLEFBQ3BDLEFBQVEsQUFBQyxBQUNYO0FBQUMsQUFBQyxBQUFJO3VCQUFLLEFBQUssVUFBSyxBQUFjLGVBQUMsQUFBSyxBQUFDLE9BQUMsQUFBQyxBQUMxQyxBQUE2QztBQUM3QyxBQUF1QztBQUN2QyxBQUFjO0FBQ2QsQUFBSztzQkFBQyxBQUFDLElBQUcsQUFBWSxBQUFDLGdCQUFHLEFBQWMsZUFBQyxBQUFNLEFBQUMsQUFDaEQsQUFBYTtpQ0FBSSxBQUFJLEFBQUMsQUFDeEIsQUFBQyxBQUFDLEFBQUk7QUFOQyxBQUFFLEFBQUMsdUJBTUMsQUFBSyxVQUFLLEFBQWMsZUFBQyxBQUFTLEFBQUMsV0FBQyxBQUFDLEFBQzlDLEFBQUcsQUFBQztxQkFBQyxJQUFJLEFBQUMsSUFBQyxBQUFNLFFBQUUsQUFBQyxLQUFFLEFBQUMsSUFBQyxBQUFJLE1BQUUsQUFBQyxBQUFFLEtBQUUsQUFBQyxBQUNsQyxBQUFJO3lCQUFDLEFBQUMsSUFBRyxBQUFhLEFBQUMsaUJBQUcsQUFBSSxLQUFDLEFBQUMsQUFBQyxBQUFDLEFBQ3BDLEFBQUM7QUFFRCxBQUFLO3NCQUFDLEFBQUMsQUFBQyxLQUFHLEFBQU0sU0FBRyxBQUFhLEFBQUMsQUFDcEMsQUFBQyxBQUFDLEFBQUk7QUFOQyxBQUFFLEFBQUMsbUJBTUgsQUFBRSxBQUFDLElBQUMsQUFBSyxVQUFLLEFBQWMsZUFBQyxBQUFPLEFBQUMsU0FBQyxBQUFDLEFBQzVDLEFBQUs7c0JBQUMsQUFBQyxBQUFDLEtBQUcsQUFBTSxTQUFHLEFBQWEsQUFBQyxBQUNwQyxBQUFDLEFBQ0g7QUFBQztBQUVELEFBQUk7YUFBQyxBQUFNLFNBQUcsQUFBSSxLQUFDLEFBQU0sU0FBRyxBQUFhLEFBQUMsQUFDNUMsQUFBQztBQUVELEFBQU87Y0FDTCxBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFLLEFBQUUsQUFBQyxBQUMzQixBQUFDLEFBQ0Y7QUFFRCxBQUFNO0FBOUdOOzs7Z0JBbUhxQixZQUFnQyxBQUFJLEFBQWtCLEFBQUUscUNBQVMsT0FBTyxJQUFJLEFBQUksQUFBRSxRQUFsRjthQUFTLFlBQVQsQUFBUyxBQUErQyxBQUFTO2FBQUksT0FBSixBQUFJLEFBQWEsQUFDbkcsQUFBSTthQUFDLEFBQU8sVUFBRyxBQUFJLEFBQU0sbUJBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3ZDLEFBQUM7QUFFRCxBQUFNO1dBQUMsQUFBYyxRQUNuQixBQUFJO2FBQUMsQUFBTyxRQUFDLEFBQU0sU0FBRyxBQUFNLEFBQUMsQUFDN0IsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFPLEFBQUMsQUFDdEIsQUFBQyxBQUNGO0FBRUQsQUFBTTtBQVZKOzs7Z0JBZW1CLEFBQXNDLFdBQVMsQUFBVSxNQUF6RDthQUFTLFlBQVQsQUFBUyxBQUE2QixBQUFTO2FBQUksT0FBSixBQUFJLEFBQU0sQUFDMUUsQUFBSTthQUFDLEFBQU8sVUFBRyxBQUFJLEFBQU0sbUJBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3ZDLEFBQUM7QUFFRCxBQUFNO1dBQUMsQUFBYyxRQUNuQixBQUFJO2FBQUMsQUFBTyxRQUFDLEFBQU0sU0FBRyxBQUFNLEFBQUMsQUFDN0IsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFPLEFBQUMsQUFDdEIsQUFBQyxBQUNGO0FBRUQsQUFBTTtBQVZKOztNQVU4QixnQkFBUSxBQUFnQixpQkFFdkQiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IFJlY2FzdCwgVk1IYW5kbGUgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgREVCVUcgfSBmcm9tIFwiQGdsaW1tZXIvbG9jYWwtZGVidWctZmxhZ3NcIjtcbmltcG9ydCB7IENvbnN0YW50cywgV3JpdGVPbmx5Q29uc3RhbnRzLCBSdW50aW1lQ29uc3RhbnRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT3Bjb2RlIH0gZnJvbSAnLi9vcGNvZGUnO1xuaW1wb3J0IHsgQ29tcGlsZVRpbWVQcm9ncmFtIH0gZnJvbSBcIkBnbGltbWVyL29wY29kZS1jb21waWxlclwiO1xuXG5lbnVtIFRhYmxlU2xvdFN0YXRlIHtcbiAgQWxsb2NhdGVkLFxuICBGcmVlZCxcbiAgUHVyZ2VkLFxuICBQb2ludGVyXG59XG5cbmNvbnN0IEVOVFJZX1NJWkUgPSA0O1xuY29uc3QgU0laRV9PRkZTRVQgPSAxO1xuY29uc3QgU0NPUEVTSVpFX09GRlNFVCA9IDI7XG5jb25zdCBTVEFURV9PRkZTRVQgPSAzO1xuXG5leHBvcnQgY2xhc3MgSGVhcCB7XG4gIHByaXZhdGUgaGVhcDogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBvZmZzZXQgPSAwO1xuICBwcml2YXRlIGhhbmRsZSA9IDA7XG5cbiAgLyoqXG4gICAqIGxheW91dDpcbiAgICpcbiAgICogLSBwb2ludGVyIGludG8gaGVhcFxuICAgKiAtIHNpemVcbiAgICogLSBzY29wZSBzaXplXG4gICAqIC0gZnJlZWQgKDAgb3IgMSlcbiAgICovXG4gIHByaXZhdGUgdGFibGU6IG51bWJlcltdID0gW107XG5cbiAgcHVzaChpdGVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmhlYXBbdGhpcy5vZmZzZXQrK10gPSBpdGVtO1xuICB9XG5cbiAgZ2V0YnlhZGRyKGFkZHJlc3M6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaGVhcFthZGRyZXNzXTtcbiAgfVxuXG4gIHNldGJ5YWRkcihhZGRyZXNzOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmhlYXBbYWRkcmVzc10gPSB2YWx1ZTtcbiAgfVxuXG4gIG1hbGxvYygpOiBWTUhhbmRsZSB7XG4gICAgdGhpcy50YWJsZS5wdXNoKHRoaXMub2Zmc2V0LCAwLCAwLCAwKTtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGU7XG4gICAgdGhpcy5oYW5kbGUgKz0gRU5UUllfU0laRTtcbiAgICByZXR1cm4gaGFuZGxlIGFzIFJlY2FzdDxudW1iZXIsIFZNSGFuZGxlPjtcbiAgfVxuXG4gIGZpbmlzaE1hbGxvYyhoYW5kbGU6IFZNSGFuZGxlLCBzY29wZVNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBzdGFydCA9IHRoaXMudGFibGVbaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPl07XG4gICAgbGV0IGZpbmlzaCA9IHRoaXMub2Zmc2V0O1xuICAgIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0laRV9PRkZTRVRdID0gZmluaXNoIC0gc3RhcnQ7XG4gICAgdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTQ09QRVNJWkVfT0ZGU0VUXSA9IHNjb3BlU2l6ZTtcbiAgfVxuXG4gIHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQ7XG4gIH1cblxuICAvLyBJdCBpcyBpbGxlZ2FsIHRvIGNsb3NlIG92ZXIgdGhpcyBhZGRyZXNzLCBhcyBjb21wYWN0aW9uXG4gIC8vIG1heSBtb3ZlIGl0LiBIb3dldmVyLCBpdCBpcyBsZWdhbCB0byB1c2UgdGhpcyBhZGRyZXNzXG4gIC8vIG11bHRpcGxlIHRpbWVzIGJldHdlZW4gY29tcGFjdGlvbnMuXG4gIGdldGFkZHIoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVbaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPl07XG4gIH1cblxuICBnZXRoYW5kbGUoYWRkcmVzczogbnVtYmVyKTogVk1IYW5kbGUge1xuICAgIHRoaXMudGFibGUucHVzaChhZGRyZXNzLCAwLCAwLCBUYWJsZVNsb3RTdGF0ZS5Qb2ludGVyKTtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGU7XG4gICAgdGhpcy5oYW5kbGUgKz0gRU5UUllfU0laRTtcbiAgICByZXR1cm4gaGFuZGxlIGFzIFJlY2FzdDxudW1iZXIsIFZNSGFuZGxlPjtcbiAgfVxuXG4gIHNpemVvZihoYW5kbGU6IFZNSGFuZGxlKTogbnVtYmVyIHtcbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNJWkVfT0ZGU0VUXTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgc2NvcGVzaXplb2YoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0NPUEVTSVpFX09GRlNFVF07XG4gIH1cblxuICBmcmVlKGhhbmRsZTogVk1IYW5kbGUpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNUQVRFX09GRlNFVF0gPSAxO1xuICB9XG5cbiAgY29tcGFjdCgpOiB2b2lkIHtcbiAgICBsZXQgY29tcGFjdGVkU2l6ZSA9IDA7XG4gICAgbGV0IHsgdGFibGUsIHRhYmxlOiB7IGxlbmd0aCB9LCBoZWFwIH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaT0wOyBpPGxlbmd0aDsgaSs9RU5UUllfU0laRSkge1xuICAgICAgbGV0IG9mZnNldCA9IHRhYmxlW2ldO1xuICAgICAgbGV0IHNpemUgPSB0YWJsZVtpICsgU0laRV9PRkZTRVRdO1xuICAgICAgbGV0IHN0YXRlID0gdGFibGVbaSArIFNUQVRFX09GRlNFVF07XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuUHVyZ2VkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuRnJlZWQpIHtcbiAgICAgICAgLy8gdHJhbnNpdGlvbiB0byBcImFscmVhZHkgZnJlZWRcIiBha2EgXCJwdXJnZWRcIlxuICAgICAgICAvLyBhIGdvb2QgaW1wcm92ZW1lbnQgd291bGQgYmUgdG8gcmV1c2VcbiAgICAgICAgLy8gdGhlc2Ugc2xvdHNcbiAgICAgICAgdGFibGVbaSArIFNUQVRFX09GRlNFVF0gPSBUYWJsZVNsb3RTdGF0ZS5QdXJnZWQ7XG4gICAgICAgIGNvbXBhY3RlZFNpemUgKz0gc2l6ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLkFsbG9jYXRlZCkge1xuICAgICAgICBmb3IgKGxldCBqPW9mZnNldDsgajw9aStzaXplOyBqKyspIHtcbiAgICAgICAgICBoZWFwW2ogLSBjb21wYWN0ZWRTaXplXSA9IGhlYXBbal07XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZVtpXSA9IG9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5Qb2ludGVyKSB7XG4gICAgICAgIHRhYmxlW2ldID0gb2Zmc2V0IC0gY29tcGFjdGVkU2l6ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9mZnNldCA9IHRoaXMub2Zmc2V0IC0gY29tcGFjdGVkU2l6ZTtcbiAgfVxuXG4gIHRvQXJyYXkoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLmhlYXAuc2xpY2UoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV3JpdGVPbmx5UHJvZ3JhbSBpbXBsZW1lbnRzIENvbXBpbGVUaW1lUHJvZ3JhbSB7XG4gIFtrZXk6IG51bWJlcl06IG5ldmVyO1xuXG4gIHByaXZhdGUgX29wY29kZTogT3Bjb2RlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb25zdGFudHM6IFdyaXRlT25seUNvbnN0YW50cyA9IG5ldyBXcml0ZU9ubHlDb25zdGFudHMoKSwgcHVibGljIGhlYXAgPSBuZXcgSGVhcCgpKSB7XG4gICAgdGhpcy5fb3Bjb2RlID0gbmV3IE9wY29kZSh0aGlzLmhlYXApO1xuICB9XG5cbiAgb3Bjb2RlKG9mZnNldDogbnVtYmVyKTogT3Bjb2RlIHtcbiAgICB0aGlzLl9vcGNvZGUub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLl9vcGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVQcm9ncmFtPFNwZWNpZmllcj4ge1xuICBba2V5OiBudW1iZXJdOiBuZXZlcjtcblxuICBwcml2YXRlIF9vcGNvZGU6IE9wY29kZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uc3RhbnRzOiBSdW50aW1lQ29uc3RhbnRzPFNwZWNpZmllcj4sIHB1YmxpYyBoZWFwOiBIZWFwKSB7XG4gICAgdGhpcy5fb3Bjb2RlID0gbmV3IE9wY29kZSh0aGlzLmhlYXApO1xuICB9XG5cbiAgb3Bjb2RlKG9mZnNldDogbnVtYmVyKTogT3Bjb2RlIHtcbiAgICB0aGlzLl9vcGNvZGUub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLl9vcGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW08U3BlY2lmaWVyPiBleHRlbmRzIFdyaXRlT25seVByb2dyYW0ge1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM8U3BlY2lmaWVyPjtcbn1cbiJdfQ== | ||
function slice(arr, start, end) { | ||
if (arr instanceof Uint16Array) { | ||
if (arr.slice !== undefined) { | ||
return arr.slice(start, end).buffer; | ||
} | ||
let ret = new Uint16Array(end); | ||
for (; start < end; start++) { | ||
ret[start] = arr[start]; | ||
} | ||
return ret.buffer; | ||
} | ||
return null; | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLEFBQU8sQUFBYSxBQUFrQixBQUFvQixBQUFNLEFBQWEsQUFBQzs7QUFDOUUsQUFBTyxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQVUsQUFBQzs7QUFFbEMsSUFBSyxBQUtKO0FBTEQsV0FBSyxBQUFjLGdCQUNqQjtzREFBUyxBQUNUO2tEQUFLLEFBQ0w7bURBQU0sQUFDTjtvREFBTyxBQUNULEFBQUM7R0FMSSxBQUFjLG1CQUFkLEFBQWMsaUJBS2xCO0FBRUQsTUFBTSxBQUFVLGFBQUcsQUFBQyxBQUFDO0FBQ3JCLE1BQU0sQUFBVyxjQUFHLEFBQUMsQUFBQztBQUN0QixNQUFNLEFBQWdCLG1CQUFHLEFBQUMsQUFBQztBQUMzQixNQUFNLEFBQVksZUFBRyxBQUFDLEFBQUM7QUFFdkIsQUFzQkcsQUFDSCxBQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JBTVEsQUFBeUUsZ0JBSDdFO2FBQU0sU0FBRyxBQUFDLEFBQUMsQUFDWDthQUFNLFNBQUcsQUFBQyxBQUFDLEFBR2pCLEFBQUUsQUFBQztZQUFDLEFBQWMsQUFBQyxnQkFBQyxBQUFDLEFBQ25CO2dCQUFJLEVBQUUsQUFBTSxRQUFFLEFBQUssT0FBRSxBQUFNLEFBQUUsV0FBRyxBQUFjLEFBQUMsQUFDL0MsQUFBSTtpQkFBQyxBQUFJLE9BQUcsSUFBSSxBQUFXLFlBQUMsQUFBTSxBQUFDLEFBQUMsQUFDcEMsQUFBSTtpQkFBQyxBQUFLLFFBQUcsQUFBSyxBQUFDLEFBQ25CLEFBQUk7aUJBQUMsQUFBTSxTQUFHLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQy9CLEFBQUk7aUJBQUMsQUFBTSxTQUFHLEFBQU0sQUFBQyxBQUN2QixBQUFDLEFBQUMsQUFBSTtlQUFDLEFB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QixBQUFzQyxXQUFTLEFBQVUsTUFBekQ7YUFBUyxZQUFULEFBQVMsQUFBNkIsQUFBUzthQUFJLE9BQUosQUFBSSxBQUFNLEFBQzFFLEFBQUk7YUFBQyxBQUFPLFVBQUcsQUFBSSxBQUFNLG1CQUFDLEFBQUksS0FBQyxBQUFJLEFBQUMsQUFBQyxBQUN2QyxBQUFDO0FBRUQsQUFBTTtXQUFDLEFBQWMsUUFDbkIsQUFBSTthQUFDLEFBQU8sUUFBQyxBQUFNLFNBQUcsQUFBTSxBQUFDLEFBQzdCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLEFBQ3RCLEFBQUMsQUFDRjtBQUVELEFBQU07QUFWSjs7TUFVOEIsZ0JBQVEsQUFBZ0IsaUJBRXZEOztBQUVELGVBQWUsQUFBMkIsS0FBRSxBQUFhLE9BQUUsQUFBVyxLQUNwRSxBQUFFLEFBQUM7UUFBQyxBQUFHLGVBQVksQUFBVyxBQUFDLGFBQUMsQUFBQyxBQUMvQixBQUFFLEFBQUM7WUFBQyxBQUFHLElBQUMsQUFBSyxVQUFLLEFBQVMsQUFBQyxXQUFDLEFBQUMsQUFDNUIsQUFBTTttQkFBQyxBQUFHLElBQUMsQUFBSyxNQUFDLEFBQUssT0FBRSxBQUFHLEFBQUMsS0FBQyxBQUFNLEFBQUMsQUFDdEMsQUFBQztBQUVEO1lBQUksQUFBRyxNQUFHLElBQUksQUFBVyxZQUFDLEFBQUcsQUFBQyxBQUFDLEFBRS9CLEFBQUcsQUFBQyxBQUFDO2VBQUUsQUFBSyxRQUFHLEFBQUcsS0FBRSxBQUFLLEFBQUUsU0FBRSxBQUFDLEFBQzVCLEFBQUc7Z0JBQUMsQUFBSyxBQUFDLFNBQUksQUFBRyxJQUFDLEFBQUssQUFBQyxBQUFDLEFBQzNCLEFBQUM7QUFFRCxBQUFNO2VBQUMsQUFBRyxJQUFDLEFBQU0sQUFBQyxBQUNwQixBQUFDO0FBRUQsQUFBTTtXQUFDLEFBQUksQUFBQyxBQUNkLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IENvbXBpbGVUaW1lUHJvZ3JhbSwgUmVjYXN0LCBWTUhhbmRsZSB9IGZyb20gXCJAZ2xpbW1lci9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBERUJVRyB9IGZyb20gXCJAZ2xpbW1lci9sb2NhbC1kZWJ1Zy1mbGFnc1wiO1xuaW1wb3J0IHsgQ29uc3RhbnRzLCBXcml0ZU9ubHlDb25zdGFudHMsIFJ1bnRpbWVDb25zdGFudHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPcGNvZGUgfSBmcm9tICcuL29wY29kZSc7XG5cbmVudW0gVGFibGVTbG90U3RhdGUge1xuICBBbGxvY2F0ZWQsXG4gIEZyZWVkLFxuICBQdXJnZWQsXG4gIFBvaW50ZXJcbn1cblxuY29uc3QgRU5UUllfU0laRSA9IDQ7XG5jb25zdCBTSVpFX09GRlNFVCA9IDE7XG5jb25zdCBTQ09QRVNJWkVfT0ZGU0VUID0gMjtcbmNvbnN0IFNUQVRFX09GRlNFVCA9IDM7XG5cbi8qKlxuICogVGhlIEhlYXAgaXMgcmVzcG9uc2libGUgZm9yIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmdcbiAqIG1lbW9yeSBpbiB3aGljaCB3ZSByZWFkL3dyaXRlIHRoZSBWTSdzIGluc3RydWN0aW9uc1xuICogZnJvbS90by4gV2hlbiB3ZSBtYWxsb2Mgd2UgcGFzcyBvdXQgYSBWTUhhbmRsZSwgd2hpY2hcbiAqIGlzIHVzZWQgYXMgYW4gaW5kaXJlY3Qgd2F5IG9mIGFjY2Vzc2luZyB0aGUgbWVtb3J5IGR1cmluZ1xuICogZXhlY3V0aW9uIG9mIHRoZSBWTS4gSW50ZXJuYWxseSB3ZSB0cmFjayB0aGUgZGlmZmVyZW50XG4gKiByZWdpb25zIG9mIHRoZSBtZW1vcnkgaW4gYW4gaW50IGFycmF5IGtub3duIGFzIHRoZSB0YWJsZS5cbiAqXG4gKiBUaGUgdGFibGUgaGFzIHRoZSBmb2xsb3dpbmcgbGF5b3V0OlxuICpcbiAqIHwgLi4uIHwgICAgICAgICAgIHRhYmxlIGVudHJ5ICAgICAgICAgIHxcbiAqIHwgLi4uIHwgaHAgfCBzaXplIHwgc2NvcGUgc2l6ZSB8IHN0YXRlIHxcbiAqIHwgLi4uIHwgMCAgfCAxMjIgIHwgICAgICAzICAgICB8ICAgMCAgIHxcbiAqICBoYW5kbGUgXiAgICAgfCAgICAgICAgICB8ICAgICAgICAgXiByZWdpb24gc3RhdGUgKGFsbG9jYXRlZCwgZnJlZWQsIHB1cmdlZClcbiAqICAgcmVnaW9uIHNpemUgXiAgICAgICAgICB8XG4gKiAgICAgICAgbnVtYmVyIG9mIHN5bWJvbHMgXlxuICpcbiAqIFdpdGggdGhpcyBpbmZvcm1hdGlvbiB3ZSBlZmZlY3RpdmVseSBoYXZlIHRoZSBhYmlsaXR5IHRvXG4gKiBjb250cm9sIHdoZW4gd2Ugd2FudCB0byBmcmVlIG1lbW9yeS4gVGhhdCBiZWluZyBzYWlkIHlvdVxuICogY2FuIG5vdCBmcmVlIGR1cmluZyBleGVjdXRpb24gYXMgcmF3IGFkZHJlc3MgYXJlIG9ubHlcbiAqIHZhbGlkIGR1cmluZyB0aGUgZXhlY3V0aW9uLiBUaGlzIG1lYW5zIHlvdSBjYW5ub3QgY2xvc2VcbiAqIG92ZXIgdGhlbSBhcyB5b3Ugd2lsbCBoYXZlIGEgYmFkIG1lbW9yeSBhY2Nlc3MgZXhjZXB0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSGVhcCB7XG4gIHByaXZhdGUgaGVhcDogVWludDE2QXJyYXkgfCBBcnJheTxudW1iZXI+O1xuICBwcml2YXRlIHRhYmxlOiBudW1iZXJbXTtcbiAgcHJpdmF0ZSBvZmZzZXQgPSAwO1xuICBwcml2YXRlIGhhbmRsZSA9IDA7XG5cbiAgY29uc3RydWN0b3Ioc2VyaWFsaXplZEhlYXA/OiB7IGJ1ZmZlcjogQXJyYXlCdWZmZXIsIHRhYmxlOiBudW1iZXJbXSwgaGFuZGxlOiBudW1iZXIgfSkge1xuICAgIGlmIChzZXJpYWxpemVkSGVhcCkge1xuICAgICAgbGV0IHsgYnVmZmVyLCB0YWJsZSwgaGFuZGxlIH0gPSBzZXJpYWxpemVkSGVhcDtcbiAgICAgIHRoaXMuaGVhcCA9IG5ldyBVaW50MTZBcnJheShidWZmZXIpO1xuICAgICAgdGhpcy50YWJsZSA9IHRhYmxlO1xuICAgICAgdGhpcy5vZmZzZXQgPSB0aGlzLmhlYXAubGVuZ3RoO1xuICAgICAgdGhpcy5oYW5kbGUgPSBoYW5kbGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgVWludDE2QXJyYXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuaGVhcCA9IG5ldyBVaW50MTZBcnJheSgweDEwMDAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGSVhNRSByZW1vdmUgb25jZSB3ZSBkcm9wIElFOVxuICAgICAgICB0aGlzLmhlYXAgPSBuZXcgQXJyYXkoMHgxMDAwMDApO1xuICAgICAgfVxuICAgICAgdGhpcy50YWJsZSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHB1c2goaXRlbTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5oZWFwW3RoaXMub2Zmc2V0KytdID0gaXRlbTtcbiAgfVxuXG4gIGdldGJ5YWRkcihhZGRyZXNzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmhlYXBbYWRkcmVzc107XG4gIH1cblxuICBzZXRieWFkZHIoYWRkcmVzczogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5oZWFwW2FkZHJlc3NdID0gdmFsdWU7XG4gIH1cblxuICBtYWxsb2MoKTogVk1IYW5kbGUge1xuICAgIHRoaXMudGFibGUucHVzaCh0aGlzLm9mZnNldCwgMCwgMCwgMCk7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlO1xuICAgIHRoaXMuaGFuZGxlICs9IEVOVFJZX1NJWkU7XG4gICAgcmV0dXJuIGhhbmRsZSBhcyBSZWNhc3Q8bnVtYmVyLCBWTUhhbmRsZT47XG4gIH1cblxuICBmaW5pc2hNYWxsb2MoaGFuZGxlOiBWTUhhbmRsZSwgc2NvcGVTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgc3RhcnQgPSB0aGlzLnRhYmxlW2hhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj5dO1xuICAgIGxldCBmaW5pc2ggPSB0aGlzLm9mZnNldDtcbiAgICB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNJWkVfT0ZGU0VUXSA9IGZpbmlzaCAtIHN0YXJ0O1xuICAgIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0NPUEVTSVpFX09GRlNFVF0gPSBzY29wZVNpemU7XG4gIH1cblxuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0O1xuICB9XG5cbiAgLy8gSXQgaXMgaWxsZWdhbCB0byBjbG9zZSBvdmVyIHRoaXMgYWRkcmVzcywgYXMgY29tcGFjdGlvblxuICAvLyBtYXkgbW92ZSBpdC4gSG93ZXZlciwgaXQgaXMgbGVnYWwgdG8gdXNlIHRoaXMgYWRkcmVzc1xuICAvLyBtdWx0aXBsZSB0aW1lcyBiZXR3ZWVuIGNvbXBhY3Rpb25zLlxuICBnZXRhZGRyKGhhbmRsZTogVk1IYW5kbGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlW2hhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj5dO1xuICB9XG5cbiAgZ2V0aGFuZGxlKGFkZHJlc3M6IG51bWJlcik6IFZNSGFuZGxlIHtcbiAgICB0aGlzLnRhYmxlLnB1c2goYWRkcmVzcywgMCwgMCwgVGFibGVTbG90U3RhdGUuUG9pbnRlcik7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlO1xuICAgIHRoaXMuaGFuZGxlICs9IEVOVFJZX1NJWkU7XG4gICAgcmV0dXJuIGhhbmRsZSBhcyBSZWNhc3Q8bnVtYmVyLCBWTUhhbmRsZT47XG4gIH1cblxuICBzaXplb2YoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgaWYgKERFQlVHKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTSVpFX09GRlNFVF07XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHNjb3Blc2l6ZW9mKGhhbmRsZTogVk1IYW5kbGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNDT1BFU0laRV9PRkZTRVRdO1xuICB9XG5cbiAgZnJlZShoYW5kbGU6IFZNSGFuZGxlKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTVEFURV9PRkZTRVRdID0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaGVhcCB1c2VzIHRoZSBbTWFyay1Db21wYWN0IEFsZ29yaXRobV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWFyay1jb21wYWN0X2FsZ29yaXRobSkgdG8gc2hpZnRcbiAgICogcmVhY2hhYmxlIG1lbW9yeSB0byB0aGUgYm90dG9tIG9mIHRoZSBoZWFwIGFuZCBmcmVlYWJsZVxuICAgKiBtZW1vcnkgdG8gdGhlIHRvcCBvZiB0aGUgaGVhcC4gV2hlbiB3ZSBoYXZlIHNoaWZ0ZWQgYWxsXG4gICAqIHRoZSByZWFjaGFibGUgbWVtb3J5IHRvIHRoZSB0b3Agb2YgdGhlIGhlYXAsIHdlIG1vdmUgdGhlXG4gICAqIG9mZnNldCB0byB0aGUgbmV4dCBmcmVlIHBvc2l0aW9uLlxuICAgKi9cbiAgY29tcGFjdCgpOiB2b2lkIHtcbiAgICBsZXQgY29tcGFjdGVkU2l6ZSA9IDA7XG4gICAgbGV0IHsgdGFibGUsIHRhYmxlOiB7IGxlbmd0aCB9LCBoZWFwIH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaT0wOyBpPGxlbmd0aDsgaSs9RU5UUllfU0laRSkge1xuICAgICAgbGV0IG9mZnNldCA9IHRhYmxlW2ldO1xuICAgICAgbGV0IHNpemUgPSB0YWJsZVtpICsgU0laRV9PRkZTRVRdO1xuICAgICAgbGV0IHN0YXRlID0gdGFibGVbaSArIFNUQVRFX09GRlNFVF07XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuUHVyZ2VkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuRnJlZWQpIHtcbiAgICAgICAgLy8gdHJhbnNpdGlvbiB0byBcImFscmVhZHkgZnJlZWRcIiBha2EgXCJwdXJnZWRcIlxuICAgICAgICAvLyBhIGdvb2QgaW1wcm92ZW1lbnQgd291bGQgYmUgdG8gcmV1c2VcbiAgICAgICAgLy8gdGhlc2Ugc2xvdHNcbiAgICAgICAgdGFibGVbaSArIFNUQVRFX09GRlNFVF0gPSBUYWJsZVNsb3RTdGF0ZS5QdXJnZWQ7XG4gICAgICAgIGNvbXBhY3RlZFNpemUgKz0gc2l6ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLkFsbG9jYXRlZCkge1xuICAgICAgICBmb3IgKGxldCBqPW9mZnNldDsgajw9aStzaXplOyBqKyspIHtcbiAgICAgICAgICBoZWFwW2ogLSBjb21wYWN0ZWRTaXplXSA9IGhlYXBbal07XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZVtpXSA9IG9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5Qb2ludGVyKSB7XG4gICAgICAgIHRhYmxlW2ldID0gb2Zmc2V0IC0gY29tcGFjdGVkU2l6ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9mZnNldCA9IHRoaXMub2Zmc2V0IC0gY29tcGFjdGVkU2l6ZTtcbiAgfVxuXG4gIGNhcHR1cmUoKSB7XG4gICAgLy8gT25seSBjYWxsZWQgaW4gZWFnZXIgbW9kZVxuICAgIGxldCBidWZmZXIgPSBzbGljZSh0aGlzLmhlYXAsIDAsIHRoaXMub2Zmc2V0KTtcbiAgICByZXR1cm4ge1xuICAgICAgaGFuZGxlOiB0aGlzLmhhbmRsZSxcbiAgICAgIHRhYmxlOiB0aGlzLnRhYmxlLFxuICAgICAgYnVmZmVyOiBidWZmZXIgYXMgQXJyYXlCdWZmZXJcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXcml0ZU9ubHlQcm9ncmFtIGltcGxlbWVudHMgQ29tcGlsZVRpbWVQcm9ncmFtIHtcbiAgW2tleTogbnVtYmVyXTogbmV2ZXI7XG5cbiAgcHJpdmF0ZSBfb3Bjb2RlOiBPcGNvZGU7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbnN0YW50czogV3JpdGVPbmx5Q29uc3RhbnRzID0gbmV3IFdyaXRlT25seUNvbnN0YW50cygpLCBwdWJsaWMgaGVhcCA9IG5ldyBIZWFwKCkpIHtcbiAgICB0aGlzLl9vcGNvZGUgPSBuZXcgT3Bjb2RlKHRoaXMuaGVhcCk7XG4gIH1cblxuICBvcGNvZGUob2Zmc2V0OiBudW1iZXIpOiBPcGNvZGUge1xuICAgIHRoaXMuX29wY29kZS5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuX29wY29kZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUnVudGltZVByb2dyYW08U3BlY2lmaWVyPiB7XG4gIFtrZXk6IG51bWJlcl06IG5ldmVyO1xuXG4gIHByaXZhdGUgX29wY29kZTogT3Bjb2RlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb25zdGFudHM6IFJ1bnRpbWVDb25zdGFudHM8U3BlY2lmaWVyPiwgcHVibGljIGhlYXA6IEhlYXApIHtcbiAgICB0aGlzLl9vcGNvZGUgPSBuZXcgT3Bjb2RlKHRoaXMuaGVhcCk7XG4gIH1cblxuICBvcGNvZGUob2Zmc2V0OiBudW1iZXIpOiBPcGNvZGUge1xuICAgIHRoaXMuX29wY29kZS5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuX29wY29kZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbTxTcGVjaWZpZXI+IGV4dGVuZHMgV3JpdGVPbmx5UHJvZ3JhbSB7XG4gIHB1YmxpYyBjb25zdGFudHM6IENvbnN0YW50czxTcGVjaWZpZXI+O1xufVxuXG5mdW5jdGlvbiBzbGljZShhcnI6IFVpbnQxNkFycmF5IHwgbnVtYmVyW10sIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gIGlmIChhcnIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkge1xuICAgIGlmIChhcnIuc2xpY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kKS5idWZmZXI7XG4gICAgfVxuXG4gICAgbGV0IHJldCA9IG5ldyBVaW50MTZBcnJheShlbmQpO1xuXG4gICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7XG4gICAgICByZXRbc3RhcnRdICA9IGFycltzdGFydF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5idWZmZXI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ== |
@@ -46,10 +46,23 @@ "use strict"; | ||
this.floats = []; | ||
this.negatives = []; | ||
} | ||
WriteOnlyConstants.prototype.float = function float(_float) { | ||
return this.floats.push(_float); | ||
var index = this.floats.indexOf(_float); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.floats.push(_float) - 1; | ||
}; | ||
WriteOnlyConstants.prototype.negative = function negative(_negative) { | ||
return this.negatives.push(_negative); | ||
}; | ||
WriteOnlyConstants.prototype.string = function string(value) { | ||
return this.strings.push(value); | ||
var index = this.strings.indexOf(value); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.strings.push(value) - 1; | ||
}; | ||
@@ -66,7 +79,15 @@ | ||
WriteOnlyConstants.prototype.array = function array(values) { | ||
return this.arrays.push(values); | ||
var index = this.arrays.indexOf(values); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.arrays.push(values) - 1; | ||
}; | ||
WriteOnlyConstants.prototype.table = function table(t) { | ||
return this.tables.push(t); | ||
var index = this.tables.indexOf(t); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.tables.push(t) - 1; | ||
}; | ||
@@ -80,3 +101,7 @@ | ||
WriteOnlyConstants.prototype.serializable = function serializable(value) { | ||
return this.serializables.push(value); | ||
var index = this.serializables.indexOf(value); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.serializables.push(value) - 1; | ||
}; | ||
@@ -91,3 +116,4 @@ | ||
serializables: this.serializables, | ||
floats: this.floats | ||
floats: this.floats, | ||
negatives: this.negatives | ||
}; | ||
@@ -111,2 +137,3 @@ }; | ||
this.floats = pool.floats; | ||
this.negatives = pool.negatives; | ||
this.resolved = this.handles.map(function () { | ||
@@ -120,7 +147,11 @@ return UNRESOLVED; | ||
RuntimeConstants.prototype.getFloat = function getFloat(value) { | ||
return this.floats[value - 1]; | ||
return this.floats[value]; | ||
}; | ||
RuntimeConstants.prototype.getNegative = function getNegative(value) { | ||
return this.negatives[value - 1]; | ||
}; | ||
RuntimeConstants.prototype.getString = function getString(value) { | ||
return this.strings[value - 1]; | ||
return this.strings[value]; | ||
}; | ||
@@ -139,7 +170,7 @@ | ||
RuntimeConstants.prototype.getArray = function getArray(value) { | ||
return this.arrays[value - 1]; | ||
return this.arrays[value]; | ||
}; | ||
RuntimeConstants.prototype.getSymbolTable = function getSymbolTable(value) { | ||
return this.tables[value - 1]; | ||
return this.tables[value]; | ||
}; | ||
@@ -158,3 +189,3 @@ | ||
RuntimeConstants.prototype.getSerializable = function getSerializable(s) { | ||
return this.serializables[s - 1]; | ||
return this.serializables[s]; | ||
}; | ||
@@ -179,2 +210,4 @@ | ||
_this.serializables = pool.serializables; | ||
_this.floats = pool.floats; | ||
_this.negatives = pool.negatives; | ||
_this.resolved = _this.handles.map(function () { | ||
@@ -189,4 +222,12 @@ return UNRESOLVED; | ||
Constants.prototype.getFloat = function getFloat(value) { | ||
return this.floats[value - 1]; | ||
}; | ||
Constants.prototype.getNegative = function getNegative(value) { | ||
return this.negatives[value - 1]; | ||
}; | ||
Constants.prototype.getString = function getString(value) { | ||
return this.strings[value - 1]; | ||
return this.strings[value]; | ||
}; | ||
@@ -205,7 +246,7 @@ | ||
Constants.prototype.getArray = function getArray(value) { | ||
return this.arrays[value - 1]; | ||
return this.arrays[value]; | ||
}; | ||
Constants.prototype.getSymbolTable = function getSymbolTable(value) { | ||
return this.tables[value - 1]; | ||
return this.tables[value]; | ||
}; | ||
@@ -224,3 +265,3 @@ | ||
Constants.prototype.getSerializable = function getSerializable(s) { | ||
return this.serializables[s - 1]; | ||
return this.serializables[s]; | ||
}; | ||
@@ -255,2 +296,2 @@ | ||
exports.LazyConstants = LazyConstants; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvcHJvZ3JhbS9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFNLEFBQVUsYUFBRyxBQUFFLEFBQUMsQUFrQnRCLEFBQU07O0lBQU47a0NBQ0UsQUFBaUI7OEJBRVA7OzthQUFPLFVBQWEsQUFBRSxBQUFDLEFBQ3ZCO2FBQU0sU0FBZSxBQUFFLEFBQUMsQUFDeEI7YUFBTSxTQUFrQixBQUFFLEFBQUMsQUFDM0I7YUFBTyxVQUFhLEFBQUUsQUFBQyxBQUN2QjthQUFhLGdCQUFhLEFBQUUsQUFBQyxBQUM3QjthQUFRLFdBQWEsQUFBRSxBQUFDLEFBQ3hCO2FBQU0sU0FBYSxBQUFFLEFBQUMsQUErQ2xDLEFBQUMsQUE3Q0MsQUFBSzs7O3dEQUFDLEFBQWEsUUFDakIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxBQUFDLEFBQ2pDLEFBQUMsQUFFRCxBQUFNOzs7MERBQUMsQUFBYSxPQUNsQixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDbEMsQUFBQyxBQUVELEFBQVc7OztvRUFBQyxBQUFpQixTQUMzQjtZQUFJLEFBQVEsV0FBYSxJQUFJLEFBQUssTUFBQyxBQUFPLFFBQUMsQUFBTSxBQUFDLEFBQUMsQUFFbkQsQUFBRyxBQUFDO2FBQUMsSUFBSSxBQUFDLElBQUcsQUFBQyxHQUFFLEFBQUMsSUFBRyxBQUFPLFFBQUMsQUFBTSxRQUFFLEFBQUMsQUFBRSxLQUFFLEFBQUMsQUFDeEMsQUFBUTtxQkFBQyxBQUFDLEFBQUMsS0FBRyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQU8sUUFBQyxBQUFDLEFBQUMsQUFBQyxBQUFDLEFBQ3hDLEFBQUMsQUFF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LEFBQUMsQUFDckMsQUFBQyxBQUVELEFBQWE7OzsrREFBSSxBQUFTLEdBQ3hCO1lBQUksQUFBSyxRQUFHLEFBQUMsSUFBRyxBQUFDLEFBQUMsQUFDbEI7WUFBSSxBQUFRLFdBQUcsQUFBSSxLQUFDLEFBQVEsU0FBQyxBQUFLLEFBQUMsQUFBQyxBQUVwQyxBQUFFLEFBQUM7WUFBQyxBQUFRLGFBQUssQUFBVSxBQUFDLFlBQUMsQUFBQyxBQUM1QjtnQkFBSSxBQUFNLFNBQUcsQUFBSSxLQUFDLEFBQU8sUUFBQyxBQUFLLEFBQUMsQUFBQyxBQUNqQyxBQUFRO3VCQUFHLEFBQUksS0FBQyxBQUFRLFNBQUMsQUFBSyxBQUFDLFNBQUcsQUFBSSxLQUFDLEFBQVEsU0FBQyxBQUFPLFFBQUMsQUFBTSxBQUFDLEFBQUMsQUFDbEUsQUFBQyxBQUVELEFBQU07O2VBQUMsQUFBYSxBQUFDLEFBQ3ZCLEFBQUMsQUFFRCxBQUFlOzs7bUVBQUksQUFBUyxHQUMxQixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQWEsY0FBQyxBQUFDLElBQUcsQUFBQyxBQUFNLEFBQUMsQUFDeEMsQUFBQyxBQUNGLEFBRUQsQUFBTTs7OztFQXpEb0MsQUFBa0IsQUFDMUQ7O0lBd0R5Qjs7Ozs7OzZFQUNqQjs7ZUFBTSxTQUFhLEFBQUUsQUFBQyxBQVNoQyxBQUFDO2VBUEMsQUFBUTs7O3lEQUFJLEFBQWEsT0FDdkIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBSyxRQUFHLEFBQUMsQUFBTSxBQUFDLEFBQ3JDLEFBQUMsQUFFRCxBQUFLOzs7bURBQUMsQUFBYSxRQUNqQixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDakMsQUFBQyxBQUNGOzs7O0VBVkQsQUFBbUMsQUFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIFN5bWJvbFRhYmxlLCBSdW50aW1lUmVzb2x2ZXIgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQ29tcGlsZVRpbWVDb25zdGFudHMgfSBmcm9tIFwiQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyXCI7XG5cbmNvbnN0IFVOUkVTT0xWRUQgPSB7fTtcblxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFBvb2wge1xuICBzdHJpbmdzOiBzdHJpbmdbXTtcbiAgYXJyYXlzOiBudW1iZXJbXVtdO1xuICB0YWJsZXM6IFN5bWJvbFRhYmxlW107XG4gIGhhbmRsZXM6IG51bWJlcltdO1xuICBzZXJpYWxpemFibGVzOiBPcGFxdWVbXTtcbiAgZmxvYXRzOiBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gUHJpbWl0aXZlVHlwZSB7XG4gIE5VTUJFUiAgICAgICAgICA9IDBiMDAsXG4gIEZMT0FUICAgICAgICAgICA9IDBiMDEsXG4gIFNUUklORyAgICAgICAgICA9IDBiMTAsXG4gIEJPT0xFQU5fT1JfVk9JRCA9IDBiMTFcbn1cblxuZXhwb3J0IGNsYXNzIFdyaXRlT25seUNvbnN0YW50cyBpbXBsZW1lbnRzIENvbXBpbGVUaW1lQ29uc3RhbnRzIHtcbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBwcm90ZWN0ZWQgc3RyaW5nczogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXSA9IFtdO1xuICBwcm90ZWN0ZWQgdGFibGVzOiBTeW1ib2xUYWJsZVtdID0gW107XG4gIHByb3RlY3RlZCBoYW5kbGVzOiBudW1iZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW10gPSBbXTtcbiAgcHJvdGVjdGVkIHJlc29sdmVkOiBPcGFxdWVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgZmxvYXRzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZsb2F0KGZsb2F0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdHMucHVzaChmbG9hdCk7XG4gIH1cblxuICBzdHJpbmcodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHN0cmluZ0FycmF5KHN0cmluZ3M6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBsZXQgX3N0cmluZ3M6IG51bWJlcltdID0gbmV3IEFycmF5KHN0cmluZ3MubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgX3N0cmluZ3NbaV0gPSB0aGlzLnN0cmluZyhzdHJpbmdzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJheShfc3RyaW5ncyk7XG4gIH1cblxuICBhcnJheSh2YWx1ZXM6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hcnJheXMucHVzaCh2YWx1ZXMpO1xuICB9XG5cbiAgdGFibGUodDogU3ltYm9sVGFibGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlcy5wdXNoKHQpO1xuICB9XG5cbiAgaGFuZGxlKGhhbmRsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aGlzLnJlc29sdmVkLnB1c2goVU5SRVNPTFZFRCk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gIH1cblxuICBzZXJpYWxpemFibGUodmFsdWU6IE9wYXF1ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlcy5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHRvUG9vbCgpOiBDb25zdGFudFBvb2wge1xuICAgIHJldHVybiB7XG4gICAgICBzdHJpbmdzOiB0aGlzLnN0cmluZ3MsXG4gICAgICBhcnJheXM6IHRoaXMuYXJyYXlzLFxuICAgICAgdGFibGVzOiB0aGlzLnRhYmxlcyxcbiAgICAgIGhhbmRsZXM6IHRoaXMuaGFuZGxlcyxcbiAgICAgIHNlcmlhbGl6YWJsZXM6IHRoaXMuc2VyaWFsaXphYmxlcyxcbiAgICAgIGZsb2F0czogdGhpcy5mbG9hdHNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uc3RhbnRzPFNwZWNpZmllcj4ge1xuICBwcm90ZWN0ZWQgc3RyaW5nczogc3RyaW5nW107XG4gIHByb3RlY3RlZCBhcnJheXM6IG51bWJlcltdW107XG4gIHByb3RlY3RlZCB0YWJsZXM6IFN5bWJvbFRhYmxlW107XG4gIHByb3RlY3RlZCBoYW5kbGVzOiBudW1iZXJbXTtcbiAgcHJvdGVjdGVkIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdO1xuICBwcm90ZWN0ZWQgcmVzb2x2ZWQ6IE9wYXF1ZVtdO1xuICBwcm90ZWN0ZWQgZmxvYXRzOiBudW1iZXJbXTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sOiBDb25zdGFudFBvb2wpIHtcbiAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgdGhpcy5hcnJheXMgPSBwb29sLmFycmF5cztcbiAgICB0aGlzLnRhYmxlcyA9IHBvb2wudGFibGVzO1xuICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICB0aGlzLnNlcmlhbGl6YWJsZXMgPSBwb29sLnNlcmlhbGl6YWJsZXM7XG4gICAgdGhpcy5mbG9hdHMgPSBwb29sLmZsb2F0cztcbiAgICB0aGlzLnJlc29sdmVkID0gdGhpcy5oYW5kbGVzLm1hcCgoKSA9PiBVTlJFU09MVkVEKTtcbiAgfVxuXG4gIC8vIGAwYCBtZWFucyBOVUxMXG5cbiAgZ2V0RmxvYXQodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmcodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nc1t2YWx1ZSAtIDFdO1xuICB9XG5cbiAgZ2V0U3RyaW5nQXJyYXkodmFsdWU6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgICBsZXQgbmFtZXMgPSB0aGlzLmdldEFycmF5KHZhbHVlKTtcbiAgICBsZXQgX25hbWVzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShuYW1lcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG4gPSBuYW1lc1tpXTtcbiAgICAgIF9uYW1lc1tpXSA9IHRoaXMuZ2V0U3RyaW5nKG4pO1xuICAgIH1cblxuICAgIHJldHVybiBfbmFtZXM7XG4gIH1cblxuICBnZXRBcnJheSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLmFycmF5c1t2YWx1ZSAtIDFdO1xuICB9XG5cbiAgZ2V0U3ltYm9sVGFibGU8VCBleHRlbmRzIFN5bWJvbFRhYmxlPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzW3ZhbHVlIC0gMV0gYXMgVDtcbiAgfVxuXG4gIHJlc29sdmVIYW5kbGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgbGV0IGluZGV4ID0gcyAtIDE7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF07XG5cbiAgICBpZiAocmVzb2x2ZWQgPT09IFVOUkVTT0xWRUQpIHtcbiAgICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZXNbaW5kZXhdO1xuICAgICAgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZShoYW5kbGUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlZCBhcyBUO1xuICB9XG5cbiAgZ2V0U2VyaWFsaXphYmxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YWJsZXNbcyAtIDFdIGFzIFQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnN0YW50czxTcGVjaWZpZXI+IGV4dGVuZHMgV3JpdGVPbmx5Q29uc3RhbnRzIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlc29sdmVyOiBSdW50aW1lUmVzb2x2ZXI8U3BlY2lmaWVyPiwgcG9vbD86IENvbnN0YW50UG9vbCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAocG9vbCkge1xuICAgICAgdGhpcy5zdHJpbmdzID0gcG9vbC5zdHJpbmdzO1xuICAgICAgdGhpcy5hcnJheXMgPSBwb29sLmFycmF5cztcbiAgICAgIHRoaXMudGFibGVzID0gcG9vbC50YWJsZXM7XG4gICAgICB0aGlzLmhhbmRsZXMgPSBwb29sLmhhbmRsZXM7XG4gICAgICB0aGlzLnNlcmlhbGl6YWJsZXMgPSBwb29sLnNlcmlhbGl6YWJsZXM7XG4gICAgICB0aGlzLnJlc29sdmVkID0gdGhpcy5oYW5kbGVzLm1hcCgoKSA9PiBVTlJFU09MVkVEKTtcbiAgICB9XG4gIH1cblxuICAvLyBgMGAgbWVhbnMgTlVMTFxuXG4gIGdldFN0cmluZyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmdBcnJheSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0QXJyYXkodmFsdWUpO1xuICAgIGxldCBfbmFtZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IG5hbWVzW2ldO1xuICAgICAgX25hbWVzW2ldID0gdGhpcy5nZXRTdHJpbmcobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9uYW1lcztcbiAgfVxuXG4gIGdldEFycmF5KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXlzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTeW1ib2xUYWJsZTxUIGV4dGVuZHMgU3ltYm9sVGFibGU+KHZhbHVlOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZXNbdmFsdWUgLSAxXSBhcyBUO1xuICB9XG5cbiAgcmVzb2x2ZUhhbmRsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICBsZXQgaW5kZXggPSBzIC0gMTtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XTtcblxuICAgIGlmIChyZXNvbHZlZCA9PT0gVU5SRVNPTFZFRCkge1xuICAgICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlc1tpbmRleF07XG4gICAgICByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkIGFzIFQ7XG4gIH1cblxuICBnZXRTZXJpYWxpemFibGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlc1tzIC0gMV0gYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGF6eUNvbnN0YW50cyBleHRlbmRzIENvbnN0YW50czxPcGFxdWU+IHtcbiAgcHJpdmF0ZSBvdGhlcnM6IE9wYXF1ZVtdID0gW107XG5cbiAgZ2V0T3RoZXI8VD4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLm90aGVyc1t2YWx1ZSAtIDFdIGFzIFQ7XG4gIH1cblxuICBvdGhlcihvdGhlcjogT3BhcXVlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vdGhlcnMucHVzaChvdGhlcik7XG4gIH1cbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvcHJvZ3JhbS9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNLEFBQVUsYUFBRyxBQUFFLEFBQUMsQUFvQnRCLEFBQU07O0lBQU47a0NBQ0UsQUFBaUI7OEJBRVA7OzthQUFPLFVBQWEsQUFBRSxBQUFDLEFBQ3ZCO2FBQU0sU0FBZSxBQUFFLEFBQUMsQUFDeEI7YUFBTSxTQUFrQixBQUFFLEFBQUMsQUFDM0I7YUFBTyxVQUFhLEFBQUUsQUFBQyxBQUN2QjthQUFhLGdCQUFhLEFBQUUsQUFBQyxBQUM3QjthQUFRLFdBQWEsQUFBRSxBQUFDLEFBQ3hCO2FBQU0sU0FBYSxBQUFFLEFBQUMsQUFDdEI7YUFBUyxZQUFhLEFBQUUsQUFBQyxBQWtGckMsQUFBQyxBQWhGQyxBQUFLOzs7d0RBQUMsQUFBYSxRQUNqQjtZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQU8sUUFBQyxBQUFLLEFBQUMsQUFBQyxBQUV2QyxBQUFFLEFBQUM7WUFBQyxBQUFLLFFBQUcsQ0FBQyxBQUFDLEFBQUMsR0FBQyxBQUFDLEFBQ2YsQUFBTTttQkFBQyxBQUFLLEFBQUMsQUFDZixBQUFDLEFBRUQsQUFBTTs7ZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsVUFBRyxBQUFDLEFBQUMsQUFDckMsQUFBQyxBQUVELEFBQVE7Ozs4REFBQyxBQUFnQixXQUN2QixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBUSxBQUFDLEFBQUMsQUFDdkMsQUFBQyxBQUVELEFBQU07OzswREFBQyxBQUFhLE9BQ2xCO1lBQUksQUFBSyxRQUFHLEFBQUksS0FBQyxBQUFPLFFBQUMsQUFBTyxRQUFDLEFBQUssQUFB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QUMsQUFDcEMsQUFBQyxBQUNGLEFBRUQsQUFBTTs7OztFQWxFb0MsQUFBa0IsQUFDMUQ7O0lBaUV5Qjs7Ozs7OzZFQUNqQjs7ZUFBTSxTQUFhLEFBQUUsQUFBQyxBQVNoQyxBQUFDO2VBUEMsQUFBUTs7O3lEQUFJLEFBQWEsT0FDdkIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBSyxRQUFHLEFBQUMsQUFBTSxBQUFDLEFBQ3JDLEFBQUMsQUFFRCxBQUFLOzs7bURBQUMsQUFBYSxRQUNqQixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDakMsQUFBQyxBQUNGOzs7O0VBVkQsQUFBbUMsQUFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIFN5bWJvbFRhYmxlLCBSdW50aW1lUmVzb2x2ZXIsIENvbXBpbGVUaW1lQ29uc3RhbnRzIH0gZnJvbSBcIkBnbGltbWVyL2ludGVyZmFjZXNcIjtcblxuY29uc3QgVU5SRVNPTFZFRCA9IHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0YW50UG9vbCB7XG4gIHN0cmluZ3M6IHN0cmluZ1tdO1xuICBhcnJheXM6IG51bWJlcltdW107XG4gIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgaGFuZGxlczogbnVtYmVyW107XG4gIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdO1xuICBmbG9hdHM6IG51bWJlcltdO1xuICBuZWdhdGl2ZXM6IG51bWJlcltdO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBQcmltaXRpdmVUeXBlIHtcbiAgTlVNQkVSICAgICAgICAgID0gMGIwMDAsXG4gIEZMT0FUICAgICAgICAgICA9IDBiMDAxLFxuICBTVFJJTkcgICAgICAgICAgPSAwYjAxMCxcbiAgQk9PTEVBTl9PUl9WT0lEID0gMGIwMTEsXG4gIE5FR0FUSVZFICAgICAgICA9IDBiMTAwXG59XG5cbmV4cG9ydCBjbGFzcyBXcml0ZU9ubHlDb25zdGFudHMgaW1wbGVtZW50cyBDb21waWxlVGltZUNvbnN0YW50cyB7XG4gIC8vIGAwYCBtZWFucyBOVUxMXG5cbiAgcHJvdGVjdGVkIHN0cmluZ3M6IHN0cmluZ1tdID0gW107XG4gIHByb3RlY3RlZCBhcnJheXM6IG51bWJlcltdW10gPSBbXTtcbiAgcHJvdGVjdGVkIHRhYmxlczogU3ltYm9sVGFibGVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgaGFuZGxlczogbnVtYmVyW10gPSBbXTtcbiAgcHJvdGVjdGVkIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdID0gW107XG4gIHByb3RlY3RlZCByZXNvbHZlZDogT3BhcXVlW10gPSBbXTtcbiAgcHJvdGVjdGVkIGZsb2F0czogbnVtYmVyW10gPSBbXTtcbiAgcHJvdGVjdGVkIG5lZ2F0aXZlczogbnVtYmVyW10gPSBbXTtcblxuICBmbG9hdChmbG9hdDogbnVtYmVyKSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5mbG9hdHMuaW5kZXhPZihmbG9hdCk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZsb2F0cy5wdXNoKGZsb2F0KSAtIDE7XG4gIH1cblxuICBuZWdhdGl2ZShuZWdhdGl2ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmVzLnB1c2gobmVnYXRpdmUpO1xuICB9XG5cbiAgc3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBpbmRleCA9IHRoaXMuc3RyaW5ncy5pbmRleE9mKHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5wdXNoKHZhbHVlKSAtIDE7XG4gIH1cblxuICBzdHJpbmdBcnJheShzdHJpbmdzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gICAgbGV0IF9zdHJpbmdzOiBudW1iZXJbXSA9IG5ldyBBcnJheShzdHJpbmdzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9zdHJpbmdzW2ldID0gdGhpcy5zdHJpbmcoc3RyaW5nc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXJyYXkoX3N0cmluZ3MpO1xuICB9XG5cbiAgYXJyYXkodmFsdWVzOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5hcnJheXMuaW5kZXhPZih2YWx1ZXMpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJheXMucHVzaCh2YWx1ZXMpIC0gMTtcbiAgfVxuXG4gIHRhYmxlKHQ6IFN5bWJvbFRhYmxlKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLnRhYmxlcy5pbmRleE9mKHQpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50YWJsZXMucHVzaCh0KSAtIDE7XG4gIH1cblxuICBoYW5kbGUoaGFuZGxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRoaXMucmVzb2x2ZWQucHVzaChVTlJFU09MVkVEKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVzLnB1c2goaGFuZGxlKTtcbiAgfVxuXG4gIHNlcmlhbGl6YWJsZSh2YWx1ZTogT3BhcXVlKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLnNlcmlhbGl6YWJsZXMuaW5kZXhPZih2YWx1ZSk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YWJsZXMucHVzaCh2YWx1ZSkgLSAxO1xuICB9XG5cbiAgdG9Qb29sKCk6IENvbnN0YW50UG9vbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmluZ3M6IHRoaXMuc3RyaW5ncyxcbiAgICAgIGFycmF5czogdGhpcy5hcnJheXMsXG4gICAgICB0YWJsZXM6IHRoaXMudGFibGVzLFxuICAgICAgaGFuZGxlczogdGhpcy5oYW5kbGVzLFxuICAgICAgc2VyaWFsaXphYmxlczogdGhpcy5zZXJpYWxpemFibGVzLFxuICAgICAgZmxvYXRzOiB0aGlzLmZsb2F0cyxcbiAgICAgIG5lZ2F0aXZlczogdGhpcy5uZWdhdGl2ZXNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uc3RhbnRzPFNwZWNpZmllcj4ge1xuICBwcm90ZWN0ZWQgc3RyaW5nczogc3RyaW5nW107XG4gIHByb3RlY3RlZCBhcnJheXM6IG51bWJlcltdW107XG4gIHByb3RlY3RlZCB0YWJsZXM6IFN5bWJvbFRhYmxlW107XG4gIHByb3RlY3RlZCBoYW5kbGVzOiBudW1iZXJbXTtcbiAgcHJvdGVjdGVkIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdO1xuICBwcm90ZWN0ZWQgcmVzb2x2ZWQ6IE9wYXF1ZVtdO1xuICBwcm90ZWN0ZWQgZmxvYXRzOiBudW1iZXJbXTtcbiAgcHJvdGVjdGVkIG5lZ2F0aXZlczogbnVtYmVyW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlc29sdmVyOiBSdW50aW1lUmVzb2x2ZXI8U3BlY2lmaWVyPiwgcG9vbDogQ29uc3RhbnRQb29sKSB7XG4gICAgdGhpcy5zdHJpbmdzID0gcG9vbC5zdHJpbmdzO1xuICAgIHRoaXMuYXJyYXlzID0gcG9vbC5hcnJheXM7XG4gICAgdGhpcy50YWJsZXMgPSBwb29sLnRhYmxlcztcbiAgICB0aGlzLmhhbmRsZXMgPSBwb29sLmhhbmRsZXM7XG4gICAgdGhpcy5zZXJpYWxpemFibGVzID0gcG9vbC5zZXJpYWxpemFibGVzO1xuICAgIHRoaXMuZmxvYXRzID0gcG9vbC5mbG9hdHM7XG4gICAgdGhpcy5uZWdhdGl2ZXMgPSBwb29sLm5lZ2F0aXZlcztcbiAgICB0aGlzLnJlc29sdmVkID0gdGhpcy5oYW5kbGVzLm1hcCgoKSA9PiBVTlJFU09MVkVEKTtcbiAgfVxuXG4gIC8vIGAwYCBtZWFucyBOVUxMXG5cbiAgZ2V0RmxvYXQodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRzW3ZhbHVlXTtcbiAgfVxuXG4gIGdldE5lZ2F0aXZlKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0aXZlc1t2YWx1ZSAtIDFdO1xuICB9XG5cbiAgZ2V0U3RyaW5nKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ3NbdmFsdWVdO1xuICB9XG5cbiAgZ2V0U3RyaW5nQXJyYXkodmFsdWU6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgICBsZXQgbmFtZXMgPSB0aGlzLmdldEFycmF5KHZhbHVlKTtcbiAgICBsZXQgX25hbWVzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShuYW1lcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG4gPSBuYW1lc1tpXTtcbiAgICAgIF9uYW1lc1tpXSA9IHRoaXMuZ2V0U3RyaW5nKG4pO1xuICAgIH1cblxuICAgIHJldHVybiBfbmFtZXM7XG4gIH1cblxuICBnZXRBcnJheSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLmFycmF5c1t2YWx1ZV07XG4gIH1cblxuICBnZXRTeW1ib2xUYWJsZTxUIGV4dGVuZHMgU3ltYm9sVGFibGU+KHZhbHVlOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZXNbdmFsdWVdIGFzIFQ7XG4gIH1cblxuICByZXNvbHZlSGFuZGxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIGxldCBpbmRleCA9IHMgLSAxO1xuICAgIGxldCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdO1xuXG4gICAgaWYgKHJlc29sdmVkID09PSBVTlJFU09MVkVEKSB7XG4gICAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGVzW2luZGV4XTtcbiAgICAgIHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF0gPSB0aGlzLnJlc29sdmVyLnJlc29sdmUoaGFuZGxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQgYXMgVDtcbiAgfVxuXG4gIGdldFNlcmlhbGl6YWJsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemFibGVzW3NdIGFzIFQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnN0YW50czxTcGVjaWZpZXI+IGV4dGVuZHMgV3JpdGVPbmx5Q29uc3RhbnRzIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlc29sdmVyOiBSdW50aW1lUmVzb2x2ZXI8U3BlY2lmaWVyPiwgcG9vbD86IENvbnN0YW50UG9vbCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAocG9vbCkge1xuICAgICAgdGhpcy5zdHJpbmdzID0gcG9vbC5zdHJpbmdzO1xuICAgICAgdGhpcy5hcnJheXMgPSBwb29sLmFycmF5cztcbiAgICAgIHRoaXMudGFibGVzID0gcG9vbC50YWJsZXM7XG4gICAgICB0aGlzLmhhbmRsZXMgPSBwb29sLmhhbmRsZXM7XG4gICAgICB0aGlzLnNlcmlhbGl6YWJsZXMgPSBwb29sLnNlcmlhbGl6YWJsZXM7XG4gICAgICB0aGlzLmZsb2F0cyA9IHBvb2wuZmxvYXRzO1xuICAgICAgdGhpcy5uZWdhdGl2ZXMgPSBwb29sLm5lZ2F0aXZlcztcbiAgICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGAwYCBtZWFucyBOVUxMXG4gIGdldEZsb2F0KHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZsb2F0c1t2YWx1ZSAtIDFdO1xuICB9XG5cbiAgZ2V0TmVnYXRpdmUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmVzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmcodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nc1t2YWx1ZV07XG4gIH1cblxuICBnZXRTdHJpbmdBcnJheSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0QXJyYXkodmFsdWUpO1xuICAgIGxldCBfbmFtZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IG5hbWVzW2ldO1xuICAgICAgX25hbWVzW2ldID0gdGhpcy5nZXRTdHJpbmcobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9uYW1lcztcbiAgfVxuXG4gIGdldEFycmF5KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXlzW3ZhbHVlXTtcbiAgfVxuXG4gIGdldFN5bWJvbFRhYmxlPFQgZXh0ZW5kcyBTeW1ib2xUYWJsZT4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlc1t2YWx1ZV0gYXMgVDtcbiAgfVxuXG4gIHJlc29sdmVIYW5kbGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgbGV0IGluZGV4ID0gcyAtIDE7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF07XG5cbiAgICBpZiAocmVzb2x2ZWQgPT09IFVOUkVTT0xWRUQpIHtcbiAgICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZXNbaW5kZXhdO1xuICAgICAgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZShoYW5kbGUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlZCBhcyBUO1xuICB9XG5cbiAgZ2V0U2VyaWFsaXphYmxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YWJsZXNbc10gYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGF6eUNvbnN0YW50cyBleHRlbmRzIENvbnN0YW50czxPcGFxdWU+IHtcbiAgcHJpdmF0ZSBvdGhlcnM6IE9wYXF1ZVtdID0gW107XG5cbiAgZ2V0T3RoZXI8VD4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLm90aGVyc1t2YWx1ZSAtIDFdIGFzIFQ7XG4gIH1cblxuICBvdGhlcihvdGhlcjogT3BhcXVlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vdGhlcnMucHVzaChvdGhlcik7XG4gIH1cbn1cbiJdfQ== |
@@ -49,18 +49,49 @@ "use strict"; | ||
var STATE_OFFSET = 3; | ||
/** | ||
* The Heap is responsible for dynamically allocating | ||
* memory in which we read/write the VM's instructions | ||
* from/to. When we malloc we pass out a VMHandle, which | ||
* is used as an indirect way of accessing the memory during | ||
* execution of the VM. Internally we track the different | ||
* regions of the memory in an int array known as the table. | ||
* | ||
* The table has the following layout: | ||
* | ||
* | ... | table entry | | ||
* | ... | hp | size | scope size | state | | ||
* | ... | 0 | 122 | 3 | 0 | | ||
* handle ^ | | ^ region state (allocated, freed, purged) | ||
* region size ^ | | ||
* number of symbols ^ | ||
* | ||
* With this information we effectively have the ability to | ||
* control when we want to free memory. That being said you | ||
* can not free during execution as raw address are only | ||
* valid during the execution. This means you cannot close | ||
* over them as you will have a bad memory access exception. | ||
*/ | ||
var Heap = exports.Heap = function () { | ||
function Heap() { | ||
function Heap(serializedHeap) { | ||
_classCallCheck(this, Heap); | ||
this.heap = []; | ||
this.offset = 0; | ||
this.handle = 0; | ||
/** | ||
* layout: | ||
* | ||
* - pointer into heap | ||
* - size | ||
* - scope size | ||
* - freed (0 or 1) | ||
*/ | ||
this.table = []; | ||
if (serializedHeap) { | ||
var buffer = serializedHeap.buffer, | ||
table = serializedHeap.table, | ||
handle = serializedHeap.handle; | ||
this.heap = new Uint16Array(buffer); | ||
this.table = table; | ||
this.offset = this.heap.length; | ||
this.handle = handle; | ||
} else { | ||
if (typeof Uint16Array !== 'undefined') { | ||
this.heap = new Uint16Array(0x100000); | ||
} else { | ||
// FIXME remove once we drop IE9 | ||
this.heap = new Array(0x100000); | ||
} | ||
this.table = []; | ||
} | ||
} | ||
@@ -127,2 +158,9 @@ | ||
}; | ||
/** | ||
* The heap uses the [Mark-Compact Algorithm](https://en.wikipedia.org/wiki/Mark-compact_algorithm) to shift | ||
* reachable memory to the bottom of the heap and freeable | ||
* memory to the top of the heap. When we have shifted all | ||
* the reachable memory to the top of the heap, we move the | ||
* offset to the next free position. | ||
*/ | ||
@@ -159,4 +197,10 @@ Heap.prototype.compact = function compact() { | ||
Heap.prototype.toArray = function toArray() { | ||
return this.heap.slice(); | ||
Heap.prototype.capture = function capture() { | ||
// Only called in eager mode | ||
var buffer = slice(this.heap, 0, this.offset); | ||
return { | ||
handle: this.handle, | ||
table: this.table, | ||
buffer: buffer | ||
}; | ||
}; | ||
@@ -212,2 +256,15 @@ | ||
}(WriteOnlyProgram); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLEFBQU8sQUFBYSxBQUFrQixBQUFvQixBQUFNLEFBQWEsQUFBQzs7QUFDOUUsQUFBTyxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQVUsQUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdsQyxJQUFLLEFBS0o7QUFMRCxXQUFLLEFBQWMsZ0JBQ2pCO3NEQUFTLEFBQ1Q7a0RBQUssQUFDTDttREFBTSxBQUNOO29EQUFPLEFBQ1QsQUFBQztHQUxJLEFBQWMsbUJBQWQsQUFBYyxpQkFLbEI7QUFFRCxJQUFNLEFBQVUsYUFBRyxBQUFDLEFBQUM7QUFDckIsSUFBTSxBQUFXLGNBQUcsQUFBQyxBQUFDO0FBQ3RCLElBQU0sQUFBZ0IsbUJBQUcsQUFBQyxBQUFDO0FBQzNCLElBQU0sQUFBWSxlQUFHLEFBQUMsQUFBQyxBQUV2QixBQUFNO0lBQU47b0JBQ1U7OzthQUFJLE9BQWEsQUFBRSxBQUFDLEFBQ3BCO2FBQU0sU0FBRyxBQUFDLEFBQUMsQUFDWDthQUFNLFNBQUcsQUFBQyxBQUFDLEFBRW5CLEFBT0csQUFDSzs7Ozs7Ozs7O2FBQUssUUFBYSxBQUFFLEFBQUMsQUErRi9CLEFBQUMsQUE3RkMsQUFBSTs7O3dDQUFDLEFBQVksTUFDZixBQUFJO2FBQUMsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFNLEFBQUUsQUFBQyxZQUFHLEFBQUksQUFBQyxBQUNsQyxBQUFDLEFBRUQsQUFBUzs7O2tEQUFDLEFBQWUsU0FDdkIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLEFBQUMsQUFDNUIsQUFBQyxBQUVELEFBQVM7OztrREFBQyxBQUFlLFNBQUUsQUFBYSxPQUN0QyxBQUFJO2FBQUMsQUFBSSxLQUFDLEFBQU8sQUFB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QUksT0FBSixBQUFJLEFBQWEsQUFDbkcsQUFBSTthQUFDLEFBQU8sVUFBRyxBQUFJLEFBQU0sbUJBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3ZDLEFBQUMsQUFFRCxBQUFNOzs7d0RBQUMsQUFBYyxRQUNuQixBQUFJO2FBQUMsQUFBTyxRQUFDLEFBQU0sU0FBRyxBQUFNLEFBQUMsQUFDN0IsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFPLEFBQUMsQUFDdEIsQUFBQyxBQUNGOzs7O0FBRUQsQUFBTTtJQUtKOzRCQUFtQixBQUFzQyxXQUFTLEFBQVUsTUFBekQ7OzthQUFTLFlBQVQsQUFBUyxBQUE2QixBQUFTO2FBQUksT0FBSixBQUFJLEFBQU0sQUFDMUUsQUFBSTthQUFDLEFBQU8sVUFBRyxBQUFJLEFBQU0sbUJBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3ZDLEFBQUMsQUFFRCxBQUFNOzs7c0RBQUMsQUFBYyxRQUNuQixBQUFJO2FBQUMsQUFBTyxRQUFDLEFBQU0sU0FBRyxBQUFNLEFBQUMsQUFDN0IsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFPLEFBQUMsQUFDdEIsQUFBQyxBQUNGOzs7O0FBRUQsQUFBTTtJQUEwQjs7Ozs7Ozs7OztFQUFRLEFBQWdCLEFBRXZEIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBSZWNhc3QsIFZNSGFuZGxlIH0gZnJvbSBcIkBnbGltbWVyL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IERFQlVHIH0gZnJvbSBcIkBnbGltbWVyL2xvY2FsLWRlYnVnLWZsYWdzXCI7XG5pbXBvcnQgeyBDb25zdGFudHMsIFdyaXRlT25seUNvbnN0YW50cywgUnVudGltZUNvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9wY29kZSB9IGZyb20gJy4vb3Bjb2RlJztcbmltcG9ydCB7IENvbXBpbGVUaW1lUHJvZ3JhbSB9IGZyb20gXCJAZ2xpbW1lci9vcGNvZGUtY29tcGlsZXJcIjtcblxuZW51bSBUYWJsZVNsb3RTdGF0ZSB7XG4gIEFsbG9jYXRlZCxcbiAgRnJlZWQsXG4gIFB1cmdlZCxcbiAgUG9pbnRlclxufVxuXG5jb25zdCBFTlRSWV9TSVpFID0gNDtcbmNvbnN0IFNJWkVfT0ZGU0VUID0gMTtcbmNvbnN0IFNDT1BFU0laRV9PRkZTRVQgPSAyO1xuY29uc3QgU1RBVEVfT0ZGU0VUID0gMztcblxuZXhwb3J0IGNsYXNzIEhlYXAge1xuICBwcml2YXRlIGhlYXA6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgb2Zmc2V0ID0gMDtcbiAgcHJpdmF0ZSBoYW5kbGUgPSAwO1xuXG4gIC8qKlxuICAgKiBsYXlvdXQ6XG4gICAqXG4gICAqIC0gcG9pbnRlciBpbnRvIGhlYXBcbiAgICogLSBzaXplXG4gICAqIC0gc2NvcGUgc2l6ZVxuICAgKiAtIGZyZWVkICgwIG9yIDEpXG4gICAqL1xuICBwcml2YXRlIHRhYmxlOiBudW1iZXJbXSA9IFtdO1xuXG4gIHB1c2goaXRlbTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5oZWFwW3RoaXMub2Zmc2V0KytdID0gaXRlbTtcbiAgfVxuXG4gIGdldGJ5YWRkcihhZGRyZXNzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmhlYXBbYWRkcmVzc107XG4gIH1cblxuICBzZXRieWFkZHIoYWRkcmVzczogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5oZWFwW2FkZHJlc3NdID0gdmFsdWU7XG4gIH1cblxuICBtYWxsb2MoKTogVk1IYW5kbGUge1xuICAgIHRoaXMudGFibGUucHVzaCh0aGlzLm9mZnNldCwgMCwgMCwgMCk7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlO1xuICAgIHRoaXMuaGFuZGxlICs9IEVOVFJZX1NJWkU7XG4gICAgcmV0dXJuIGhhbmRsZSBhcyBSZWNhc3Q8bnVtYmVyLCBWTUhhbmRsZT47XG4gIH1cblxuICBmaW5pc2hNYWxsb2MoaGFuZGxlOiBWTUhhbmRsZSwgc2NvcGVTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgc3RhcnQgPSB0aGlzLnRhYmxlW2hhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj5dO1xuICAgIGxldCBmaW5pc2ggPSB0aGlzLm9mZnNldDtcbiAgICB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNJWkVfT0ZGU0VUXSA9IGZpbmlzaCAtIHN0YXJ0O1xuICAgIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0NPUEVTSVpFX09GRlNFVF0gPSBzY29wZVNpemU7XG4gIH1cblxuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0O1xuICB9XG5cbiAgLy8gSXQgaXMgaWxsZWdhbCB0byBjbG9zZSBvdmVyIHRoaXMgYWRkcmVzcywgYXMgY29tcGFjdGlvblxuICAvLyBtYXkgbW92ZSBpdC4gSG93ZXZlciwgaXQgaXMgbGVnYWwgdG8gdXNlIHRoaXMgYWRkcmVzc1xuICAvLyBtdWx0aXBsZSB0aW1lcyBiZXR3ZWVuIGNvbXBhY3Rpb25zLlxuICBnZXRhZGRyKGhhbmRsZTogVk1IYW5kbGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlW2hhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj5dO1xuICB9XG5cbiAgZ2V0aGFuZGxlKGFkZHJlc3M6IG51bWJlcik6IFZNSGFuZGxlIHtcbiAgICB0aGlzLnRhYmxlLnB1c2goYWRkcmVzcywgMCwgMCwgVGFibGVTbG90U3RhdGUuUG9pbnRlcik7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlO1xuICAgIHRoaXMuaGFuZGxlICs9IEVOVFJZX1NJWkU7XG4gICAgcmV0dXJuIGhhbmRsZSBhcyBSZWNhc3Q8bnVtYmVyLCBWTUhhbmRsZT47XG4gIH1cblxuICBzaXplb2YoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgaWYgKERFQlVHKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTSVpFX09GRlNFVF07XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHNjb3Blc2l6ZW9mKGhhbmRsZTogVk1IYW5kbGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNDT1BFU0laRV9PRkZTRVRdO1xuICB9XG5cbiAgZnJlZShoYW5kbGU6IFZNSGFuZGxlKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTVEFURV9PRkZTRVRdID0gMTtcbiAgfVxuXG4gIGNvbXBhY3QoKTogdm9pZCB7XG4gICAgbGV0IGNvbXBhY3RlZFNpemUgPSAwO1xuICAgIGxldCB7IHRhYmxlLCB0YWJsZTogeyBsZW5ndGggfSwgaGVhcCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGk9MDsgaTxsZW5ndGg7IGkrPUVOVFJZX1NJWkUpIHtcbiAgICAgIGxldCBvZmZzZXQgPSB0YWJsZVtpXTtcbiAgICAgIGxldCBzaXplID0gdGFibGVbaSArIFNJWkVfT0ZGU0VUXTtcbiAgICAgIGxldCBzdGF0ZSA9IHRhYmxlW2kgKyBTVEFURV9PRkZTRVRdO1xuXG4gICAgICBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLlB1cmdlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLkZyZWVkKSB7XG4gICAgICAgIC8vIHRyYW5zaXRpb24gdG8gXCJhbHJlYWR5IGZyZWVkXCIgYWthIFwicHVyZ2VkXCJcbiAgICAgICAgLy8gYSBnb29kIGltcHJvdmVtZW50IHdvdWxkIGJlIHRvIHJldXNlXG4gICAgICAgIC8vIHRoZXNlIHNsb3RzXG4gICAgICAgIHRhYmxlW2kgKyBTVEFURV9PRkZTRVRdID0gVGFibGVTbG90U3RhdGUuUHVyZ2VkO1xuICAgICAgICBjb21wYWN0ZWRTaXplICs9IHNpemU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5BbGxvY2F0ZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaj1vZmZzZXQ7IGo8PWkrc2l6ZTsgaisrKSB7XG4gICAgICAgICAgaGVhcFtqIC0gY29tcGFjdGVkU2l6ZV0gPSBoZWFwW2pdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVbaV0gPSBvZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuUG9pbnRlcikge1xuICAgICAgICB0YWJsZVtpXSA9IG9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vZmZzZXQgPSB0aGlzLm9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gIH1cblxuICB0b0FycmF5KCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5oZWFwLnNsaWNlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFdyaXRlT25seVByb2dyYW0gaW1wbGVtZW50cyBDb21waWxlVGltZVByb2dyYW0ge1xuICBba2V5OiBudW1iZXJdOiBuZXZlcjtcblxuICBwcml2YXRlIF9vcGNvZGU6IE9wY29kZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uc3RhbnRzOiBXcml0ZU9ubHlDb25zdGFudHMgPSBuZXcgV3JpdGVPbmx5Q29uc3RhbnRzKCksIHB1YmxpYyBoZWFwID0gbmV3IEhlYXAoKSkge1xuICAgIHRoaXMuX29wY29kZSA9IG5ldyBPcGNvZGUodGhpcy5oZWFwKTtcbiAgfVxuXG4gIG9wY29kZShvZmZzZXQ6IG51bWJlcik6IE9wY29kZSB7XG4gICAgdGhpcy5fb3Bjb2RlLm9mZnNldCA9IG9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5fb3Bjb2RlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lUHJvZ3JhbTxTcGVjaWZpZXI+IHtcbiAgW2tleTogbnVtYmVyXTogbmV2ZXI7XG5cbiAgcHJpdmF0ZSBfb3Bjb2RlOiBPcGNvZGU7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbnN0YW50czogUnVudGltZUNvbnN0YW50czxTcGVjaWZpZXI+LCBwdWJsaWMgaGVhcDogSGVhcCkge1xuICAgIHRoaXMuX29wY29kZSA9IG5ldyBPcGNvZGUodGhpcy5oZWFwKTtcbiAgfVxuXG4gIG9wY29kZShvZmZzZXQ6IG51bWJlcik6IE9wY29kZSB7XG4gICAgdGhpcy5fb3Bjb2RlLm9mZnNldCA9IG9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5fb3Bjb2RlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtPFNwZWNpZmllcj4gZXh0ZW5kcyBXcml0ZU9ubHlQcm9ncmFtIHtcbiAgcHVibGljIGNvbnN0YW50czogQ29uc3RhbnRzPFNwZWNpZmllcj47XG59XG4iXX0= | ||
function slice(arr, start, end) { | ||
if (arr instanceof Uint16Array) { | ||
if (arr.slice !== undefined) { | ||
return arr.slice(start, end).buffer; | ||
} | ||
var ret = new Uint16Array(end); | ||
for (; start < end; start++) { | ||
ret[start] = arr[start]; | ||
} | ||
return ret.buffer; | ||
} | ||
return null; | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLEFBQU8sQUFBYSxBQUFrQixBQUFvQixBQUFNLEFBQWEsQUFBQzs7QUFDOUUsQUFBTyxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQVUsQUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsQyxJQUFLLEFBS0o7QUFMRCxXQUFLLEFBQWMsZ0JBQ2pCO3NEQUFTLEFBQ1Q7a0RBQUssQUFDTDttREFBTSxBQUNOO29EQUFPLEFBQ1QsQUFBQztHQUxJLEFBQWMsbUJBQWQsQUFBYyxpQkFLbEI7QUFFRCxJQUFNLEFBQVUsYUFBRyxBQUFDLEFBQUM7QUFDckIsSUFBTSxBQUFXLGNBQUcsQUFBQyxBQUFDO0FBQ3RCLElBQU0sQUFBZ0IsbUJBQUcsQUFBQyxBQUFDO0FBQzNCLElBQU0sQUFBWSxlQUFHLEFBQUMsQUFBQztBQUV2QixBQXNCRyxBQUNILEFBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBTUo7a0JBQVksQUFBeUUsZ0JBSDdFOzs7YUFBTSxTQUFHLEFBQUMsQUFBQyxBQUNYO2FBQU0sU0FBRyxBQUFDLEFBQUMsQUFHakIsQUFBRSxBQUFDO1lBQUMsQUFBYyxBQUFDLGdCQUFDLEFBQUMsQUFDbkIsQUFBSTtnQkFBRSxBQUFNO2dCQUFFLEFBQUssUUFBYSxBQUFjLEFBQUMsQUFDL0MsQUFBSTtnQkFEaUIsQUFBTSxBQUFFOztpQkFDeEIsQUFBSSxPQUFHLElBQUksQUFBVyxZQUFDLEFBQU0sQUFBQyxBQUFDLEFBQ3BDLEFBQUk7aUJBQUMsQUFBSyxRQUFHLEFBQUssQUFBQyxBQUNuQixBQUFJO2lCQUFDLEFBQU0sU0FBRyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUMvQixBQUFJO2lCQUFDLEFBQU0sU0FBRyxB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Q2QsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgQ29tcGlsZVRpbWVQcm9ncmFtLCBSZWNhc3QsIFZNSGFuZGxlIH0gZnJvbSBcIkBnbGltbWVyL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IERFQlVHIH0gZnJvbSBcIkBnbGltbWVyL2xvY2FsLWRlYnVnLWZsYWdzXCI7XG5pbXBvcnQgeyBDb25zdGFudHMsIFdyaXRlT25seUNvbnN0YW50cywgUnVudGltZUNvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9wY29kZSB9IGZyb20gJy4vb3Bjb2RlJztcblxuZW51bSBUYWJsZVNsb3RTdGF0ZSB7XG4gIEFsbG9jYXRlZCxcbiAgRnJlZWQsXG4gIFB1cmdlZCxcbiAgUG9pbnRlclxufVxuXG5jb25zdCBFTlRSWV9TSVpFID0gNDtcbmNvbnN0IFNJWkVfT0ZGU0VUID0gMTtcbmNvbnN0IFNDT1BFU0laRV9PRkZTRVQgPSAyO1xuY29uc3QgU1RBVEVfT0ZGU0VUID0gMztcblxuLyoqXG4gKiBUaGUgSGVhcCBpcyByZXNwb25zaWJsZSBmb3IgZHluYW1pY2FsbHkgYWxsb2NhdGluZ1xuICogbWVtb3J5IGluIHdoaWNoIHdlIHJlYWQvd3JpdGUgdGhlIFZNJ3MgaW5zdHJ1Y3Rpb25zXG4gKiBmcm9tL3RvLiBXaGVuIHdlIG1hbGxvYyB3ZSBwYXNzIG91dCBhIFZNSGFuZGxlLCB3aGljaFxuICogaXMgdXNlZCBhcyBhbiBpbmRpcmVjdCB3YXkgb2YgYWNjZXNzaW5nIHRoZSBtZW1vcnkgZHVyaW5nXG4gKiBleGVjdXRpb24gb2YgdGhlIFZNLiBJbnRlcm5hbGx5IHdlIHRyYWNrIHRoZSBkaWZmZXJlbnRcbiAqIHJlZ2lvbnMgb2YgdGhlIG1lbW9yeSBpbiBhbiBpbnQgYXJyYXkga25vd24gYXMgdGhlIHRhYmxlLlxuICpcbiAqIFRoZSB0YWJsZSBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6XG4gKlxuICogfCAuLi4gfCAgICAgICAgICAgdGFibGUgZW50cnkgICAgICAgICAgfFxuICogfCAuLi4gfCBocCB8IHNpemUgfCBzY29wZSBzaXplIHwgc3RhdGUgfFxuICogfCAuLi4gfCAwICB8IDEyMiAgfCAgICAgIDMgICAgIHwgICAwICAgfFxuICogIGhhbmRsZSBeICAgICB8ICAgICAgICAgIHwgICAgICAgICBeIHJlZ2lvbiBzdGF0ZSAoYWxsb2NhdGVkLCBmcmVlZCwgcHVyZ2VkKVxuICogICByZWdpb24gc2l6ZSBeICAgICAgICAgIHxcbiAqICAgICAgICBudW1iZXIgb2Ygc3ltYm9scyBeXG4gKlxuICogV2l0aCB0aGlzIGluZm9ybWF0aW9uIHdlIGVmZmVjdGl2ZWx5IGhhdmUgdGhlIGFiaWxpdHkgdG9cbiAqIGNvbnRyb2wgd2hlbiB3ZSB3YW50IHRvIGZyZWUgbWVtb3J5LiBUaGF0IGJlaW5nIHNhaWQgeW91XG4gKiBjYW4gbm90IGZyZWUgZHVyaW5nIGV4ZWN1dGlvbiBhcyByYXcgYWRkcmVzcyBhcmUgb25seVxuICogdmFsaWQgZHVyaW5nIHRoZSBleGVjdXRpb24uIFRoaXMgbWVhbnMgeW91IGNhbm5vdCBjbG9zZVxuICogb3ZlciB0aGVtIGFzIHlvdSB3aWxsIGhhdmUgYSBiYWQgbWVtb3J5IGFjY2VzcyBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBIZWFwIHtcbiAgcHJpdmF0ZSBoZWFwOiBVaW50MTZBcnJheSB8IEFycmF5PG51bWJlcj47XG4gIHByaXZhdGUgdGFibGU6IG51bWJlcltdO1xuICBwcml2YXRlIG9mZnNldCA9IDA7XG4gIHByaXZhdGUgaGFuZGxlID0gMDtcblxuICBjb25zdHJ1Y3RvcihzZXJpYWxpemVkSGVhcD86IHsgYnVmZmVyOiBBcnJheUJ1ZmZlciwgdGFibGU6IG51bWJlcltdLCBoYW5kbGU6IG51bWJlciB9KSB7XG4gICAgaWYgKHNlcmlhbGl6ZWRIZWFwKSB7XG4gICAgICBsZXQgeyBidWZmZXIsIHRhYmxlLCBoYW5kbGUgfSA9IHNlcmlhbGl6ZWRIZWFwO1xuICAgICAgdGhpcy5oZWFwID0gbmV3IFVpbnQxNkFycmF5KGJ1ZmZlcik7XG4gICAgICB0aGlzLnRhYmxlID0gdGFibGU7XG4gICAgICB0aGlzLm9mZnNldCA9IHRoaXMuaGVhcC5sZW5ndGg7XG4gICAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBVaW50MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5oZWFwID0gbmV3IFVpbnQxNkFycmF5KDB4MTAwMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZJWE1FIHJlbW92ZSBvbmNlIHdlIGRyb3AgSUU5XG4gICAgICAgIHRoaXMuaGVhcCA9IG5ldyBBcnJheSgweDEwMDAwMCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRhYmxlID0gW107XG4gICAgfVxuICB9XG5cbiAgcHVzaChpdGVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmhlYXBbdGhpcy5vZmZzZXQrK10gPSBpdGVtO1xuICB9XG5cbiAgZ2V0YnlhZGRyKGFkZHJlc3M6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaGVhcFthZGRyZXNzXTtcbiAgfVxuXG4gIHNldGJ5YWRkcihhZGRyZXNzOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmhlYXBbYWRkcmVzc10gPSB2YWx1ZTtcbiAgfVxuXG4gIG1hbGxvYygpOiBWTUhhbmRsZSB7XG4gICAgdGhpcy50YWJsZS5wdXNoKHRoaXMub2Zmc2V0LCAwLCAwLCAwKTtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGU7XG4gICAgdGhpcy5oYW5kbGUgKz0gRU5UUllfU0laRTtcbiAgICByZXR1cm4gaGFuZGxlIGFzIFJlY2FzdDxudW1iZXIsIFZNSGFuZGxlPjtcbiAgfVxuXG4gIGZpbmlzaE1hbGxvYyhoYW5kbGU6IFZNSGFuZGxlLCBzY29wZVNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBzdGFydCA9IHRoaXMudGFibGVbaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPl07XG4gICAgbGV0IGZpbmlzaCA9IHRoaXMub2Zmc2V0O1xuICAgIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0laRV9PRkZTRVRdID0gZmluaXNoIC0gc3RhcnQ7XG4gICAgdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTQ09QRVNJWkVfT0ZGU0VUXSA9IHNjb3BlU2l6ZTtcbiAgfVxuXG4gIHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQ7XG4gIH1cblxuICAvLyBJdCBpcyBpbGxlZ2FsIHRvIGNsb3NlIG92ZXIgdGhpcyBhZGRyZXNzLCBhcyBjb21wYWN0aW9uXG4gIC8vIG1heSBtb3ZlIGl0LiBIb3dldmVyLCBpdCBpcyBsZWdhbCB0byB1c2UgdGhpcyBhZGRyZXNzXG4gIC8vIG11bHRpcGxlIHRpbWVzIGJldHdlZW4gY29tcGFjdGlvbnMuXG4gIGdldGFkZHIoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVbaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPl07XG4gIH1cblxuICBnZXRoYW5kbGUoYWRkcmVzczogbnVtYmVyKTogVk1IYW5kbGUge1xuICAgIHRoaXMudGFibGUucHVzaChhZGRyZXNzLCAwLCAwLCBUYWJsZVNsb3RTdGF0ZS5Qb2ludGVyKTtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGU7XG4gICAgdGhpcy5oYW5kbGUgKz0gRU5UUllfU0laRTtcbiAgICByZXR1cm4gaGFuZGxlIGFzIFJlY2FzdDxudW1iZXIsIFZNSGFuZGxlPjtcbiAgfVxuXG4gIHNpemVvZihoYW5kbGU6IFZNSGFuZGxlKTogbnVtYmVyIHtcbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNJWkVfT0ZGU0VUXTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgc2NvcGVzaXplb2YoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0NPUEVTSVpFX09GRlNFVF07XG4gIH1cblxuICBmcmVlKGhhbmRsZTogVk1IYW5kbGUpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNUQVRFX09GRlNFVF0gPSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBoZWFwIHVzZXMgdGhlIFtNYXJrLUNvbXBhY3QgQWxnb3JpdGhtXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXJrLWNvbXBhY3RfYWxnb3JpdGhtKSB0byBzaGlmdFxuICAgKiByZWFjaGFibGUgbWVtb3J5IHRvIHRoZSBib3R0b20gb2YgdGhlIGhlYXAgYW5kIGZyZWVhYmxlXG4gICAqIG1lbW9yeSB0byB0aGUgdG9wIG9mIHRoZSBoZWFwLiBXaGVuIHdlIGhhdmUgc2hpZnRlZCBhbGxcbiAgICogdGhlIHJlYWNoYWJsZSBtZW1vcnkgdG8gdGhlIHRvcCBvZiB0aGUgaGVhcCwgd2UgbW92ZSB0aGVcbiAgICogb2Zmc2V0IHRvIHRoZSBuZXh0IGZyZWUgcG9zaXRpb24uXG4gICAqL1xuICBjb21wYWN0KCk6IHZvaWQge1xuICAgIGxldCBjb21wYWN0ZWRTaXplID0gMDtcbiAgICBsZXQgeyB0YWJsZSwgdGFibGU6IHsgbGVuZ3RoIH0sIGhlYXAgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bGVuZ3RoOyBpKz1FTlRSWV9TSVpFKSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gdGFibGVbaV07XG4gICAgICBsZXQgc2l6ZSA9IHRhYmxlW2kgKyBTSVpFX09GRlNFVF07XG4gICAgICBsZXQgc3RhdGUgPSB0YWJsZVtpICsgU1RBVEVfT0ZGU0VUXTtcblxuICAgICAgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5QdXJnZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5GcmVlZCkge1xuICAgICAgICAvLyB0cmFuc2l0aW9uIHRvIFwiYWxyZWFkeSBmcmVlZFwiIGFrYSBcInB1cmdlZFwiXG4gICAgICAgIC8vIGEgZ29vZCBpbXByb3ZlbWVudCB3b3VsZCBiZSB0byByZXVzZVxuICAgICAgICAvLyB0aGVzZSBzbG90c1xuICAgICAgICB0YWJsZVtpICsgU1RBVEVfT0ZGU0VUXSA9IFRhYmxlU2xvdFN0YXRlLlB1cmdlZDtcbiAgICAgICAgY29tcGFjdGVkU2l6ZSArPSBzaXplO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuQWxsb2NhdGVkKSB7XG4gICAgICAgIGZvciAobGV0IGo9b2Zmc2V0OyBqPD1pK3NpemU7IGorKykge1xuICAgICAgICAgIGhlYXBbaiAtIGNvbXBhY3RlZFNpemVdID0gaGVhcFtqXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlW2ldID0gb2Zmc2V0IC0gY29tcGFjdGVkU2l6ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLlBvaW50ZXIpIHtcbiAgICAgICAgdGFibGVbaV0gPSBvZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5vZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICB9XG5cbiAgY2FwdHVyZSgpIHtcbiAgICAvLyBPbmx5IGNhbGxlZCBpbiBlYWdlciBtb2RlXG4gICAgbGV0IGJ1ZmZlciA9IHNsaWNlKHRoaXMuaGVhcCwgMCwgdGhpcy5vZmZzZXQpO1xuICAgIHJldHVybiB7XG4gICAgICBoYW5kbGU6IHRoaXMuaGFuZGxlLFxuICAgICAgdGFibGU6IHRoaXMudGFibGUsXG4gICAgICBidWZmZXI6IGJ1ZmZlciBhcyBBcnJheUJ1ZmZlclxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFdyaXRlT25seVByb2dyYW0gaW1wbGVtZW50cyBDb21waWxlVGltZVByb2dyYW0ge1xuICBba2V5OiBudW1iZXJdOiBuZXZlcjtcblxuICBwcml2YXRlIF9vcGNvZGU6IE9wY29kZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uc3RhbnRzOiBXcml0ZU9ubHlDb25zdGFudHMgPSBuZXcgV3JpdGVPbmx5Q29uc3RhbnRzKCksIHB1YmxpYyBoZWFwID0gbmV3IEhlYXAoKSkge1xuICAgIHRoaXMuX29wY29kZSA9IG5ldyBPcGNvZGUodGhpcy5oZWFwKTtcbiAgfVxuXG4gIG9wY29kZShvZmZzZXQ6IG51bWJlcik6IE9wY29kZSB7XG4gICAgdGhpcy5fb3Bjb2RlLm9mZnNldCA9IG9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5fb3Bjb2RlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lUHJvZ3JhbTxTcGVjaWZpZXI+IHtcbiAgW2tleTogbnVtYmVyXTogbmV2ZXI7XG5cbiAgcHJpdmF0ZSBfb3Bjb2RlOiBPcGNvZGU7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbnN0YW50czogUnVudGltZUNvbnN0YW50czxTcGVjaWZpZXI+LCBwdWJsaWMgaGVhcDogSGVhcCkge1xuICAgIHRoaXMuX29wY29kZSA9IG5ldyBPcGNvZGUodGhpcy5oZWFwKTtcbiAgfVxuXG4gIG9wY29kZShvZmZzZXQ6IG51bWJlcik6IE9wY29kZSB7XG4gICAgdGhpcy5fb3Bjb2RlLm9mZnNldCA9IG9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5fb3Bjb2RlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtPFNwZWNpZmllcj4gZXh0ZW5kcyBXcml0ZU9ubHlQcm9ncmFtIHtcbiAgcHVibGljIGNvbnN0YW50czogQ29uc3RhbnRzPFNwZWNpZmllcj47XG59XG5cbmZ1bmN0aW9uIHNsaWNlKGFycjogVWludDE2QXJyYXkgfCBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgaWYgKGFyciBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSB7XG4gICAgaWYgKGFyci5zbGljZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYXJyLnNsaWNlKHN0YXJ0LCBlbmQpLmJ1ZmZlcjtcbiAgICB9XG5cbiAgICBsZXQgcmV0ID0gbmV3IFVpbnQxNkFycmF5KGVuZCk7XG5cbiAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHtcbiAgICAgIHJldFtzdGFydF0gID0gYXJyW3N0YXJ0XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0LmJ1ZmZlcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIl19 |
@@ -12,8 +12,20 @@ const UNRESOLVED = {}; | ||
this.floats = []; | ||
this.negatives = []; | ||
} | ||
float(float) { | ||
return this.floats.push(float); | ||
let index = this.floats.indexOf(float); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.floats.push(float) - 1; | ||
} | ||
negative(negative) { | ||
return this.negatives.push(negative); | ||
} | ||
string(value) { | ||
return this.strings.push(value); | ||
let index = this.strings.indexOf(value); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.strings.push(value) - 1; | ||
} | ||
@@ -28,6 +40,14 @@ stringArray(strings) { | ||
array(values) { | ||
return this.arrays.push(values); | ||
let index = this.arrays.indexOf(values); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.arrays.push(values) - 1; | ||
} | ||
table(t) { | ||
return this.tables.push(t); | ||
let index = this.tables.indexOf(t); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.tables.push(t) - 1; | ||
} | ||
@@ -39,3 +59,7 @@ handle(handle) { | ||
serializable(value) { | ||
return this.serializables.push(value); | ||
let index = this.serializables.indexOf(value); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.serializables.push(value) - 1; | ||
} | ||
@@ -49,3 +73,4 @@ toPool() { | ||
serializables: this.serializables, | ||
floats: this.floats | ||
floats: this.floats, | ||
negatives: this.negatives | ||
}; | ||
@@ -63,2 +88,3 @@ } | ||
this.floats = pool.floats; | ||
this.negatives = pool.negatives; | ||
this.resolved = this.handles.map(() => UNRESOLVED); | ||
@@ -68,6 +94,9 @@ } | ||
getFloat(value) { | ||
return this.floats[value - 1]; | ||
return this.floats[value]; | ||
} | ||
getNegative(value) { | ||
return this.negatives[value - 1]; | ||
} | ||
getString(value) { | ||
return this.strings[value - 1]; | ||
return this.strings[value]; | ||
} | ||
@@ -84,6 +113,6 @@ getStringArray(value) { | ||
getArray(value) { | ||
return this.arrays[value - 1]; | ||
return this.arrays[value]; | ||
} | ||
getSymbolTable(value) { | ||
return this.tables[value - 1]; | ||
return this.tables[value]; | ||
} | ||
@@ -100,3 +129,3 @@ resolveHandle(s) { | ||
getSerializable(s) { | ||
return this.serializables[s - 1]; | ||
return this.serializables[s]; | ||
} | ||
@@ -114,2 +143,4 @@ } | ||
this.serializables = pool.serializables; | ||
this.floats = pool.floats; | ||
this.negatives = pool.negatives; | ||
this.resolved = this.handles.map(() => UNRESOLVED); | ||
@@ -119,4 +150,10 @@ } | ||
// `0` means NULL | ||
getFloat(value) { | ||
return this.floats[value - 1]; | ||
} | ||
getNegative(value) { | ||
return this.negatives[value - 1]; | ||
} | ||
getString(value) { | ||
return this.strings[value - 1]; | ||
return this.strings[value]; | ||
} | ||
@@ -133,6 +170,6 @@ getStringArray(value) { | ||
getArray(value) { | ||
return this.arrays[value - 1]; | ||
return this.arrays[value]; | ||
} | ||
getSymbolTable(value) { | ||
return this.tables[value - 1]; | ||
return this.tables[value]; | ||
} | ||
@@ -149,3 +186,3 @@ resolveHandle(s) { | ||
getSerializable(s) { | ||
return this.serializables[s - 1]; | ||
return this.serializables[s]; | ||
} | ||
@@ -165,2 +202,2 @@ } | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvcHJvZ3JhbS9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQUFBVSxhQUFHLEFBQUUsQUFBQztBQWtCdEIsQUFBTTtBQUFOO0FBQ0UsQUFBaUI7QUFFUCxhQUFPLFVBQWEsQUFBRSxBQUFDO0FBQ3ZCLGFBQU0sU0FBZSxBQUFFLEFBQUM7QUFDeEIsYUFBTSxTQUFrQixBQUFFLEFBQUM7QUFDM0IsYUFBTyxVQUFhLEFBQUUsQUFBQztBQUN2QixhQUFhLGdCQUFhLEFBQUUsQUFBQztBQUM3QixhQUFRLFdBQWEsQUFBRSxBQUFDO0FBQ3hCLGFBQU0sU0FBYSxBQUFFLEFBQUMsQUErQ2xDO0FBQUM7QUE3Q0MsQUFBSyxVQUFDLEFBQWE7QUFDakIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxBQUFDLEFBQ2pDO0FBQUM7QUFFRCxBQUFNLFdBQUMsQUFBYTtBQUNsQixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDbEM7QUFBQztBQUVELEFBQVcsZ0JBQUMsQUFBaUI7QUFDM0IsWUFBSSxBQUFRLFdBQWEsSUFBSSxBQUFLLE1BQUMsQUFBTyxRQUFDLEFBQU0sQUFBQyxBQUFDO0FBRW5ELEFBQUcsQUFBQyxhQUFDLElBQUksQUFBQyxJQUFHLEFBQUMsR0FBRSxBQUFDLElBQUcsQUFBTyxRQUFDLEFBQU0sUUFBRSxBQUFDLEFBQUUsS0FBRSxBQUFDO0FBQ3hDLEFBQVEscUJBQUMsQUFBQyxBQUFDLEtBQUcsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFPLFFBQUMsQUFBQyxBQUFDLEFBQUMsQUFBQyxBQUN4QztBQUFDO0FBRUQsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBUSxBQUFDLEFB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LEFBQUksS0FBQyxBQUFRLFNBQUMsQUFBSyxBQUFDLEFBQUM7QUFFcEMsQUFBRSxBQUFDLFlBQUMsQUFBUSxhQUFLLEFBQVUsQUFBQyxZQUFDLEFBQUM7QUFDNUIsZ0JBQUksQUFBTSxTQUFHLEFBQUksS0FBQyxBQUFPLFFBQUMsQUFBSyxBQUFDLEFBQUM7QUFDakMsQUFBUSx1QkFBRyxBQUFJLEtBQUMsQUFBUSxTQUFDLEFBQUssQUFBQyxTQUFHLEFBQUksS0FBQyxBQUFRLFNBQUMsQUFBTyxRQUFDLEFBQU0sQUFBQyxBQUFDLEFBQ2xFO0FBQUM7QUFFRCxBQUFNLGVBQUMsQUFBYSxBQUFDLEFBQ3ZCO0FBQUM7QUFFRCxBQUFlLG9CQUFJLEFBQVM7QUFDMUIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFhLGNBQUMsQUFBQyxJQUFHLEFBQUMsQUFBTSxBQUFDLEFBQ3hDO0FBQUMsQUFDRjs7QUFFRCxBQUFNLGFBQXFCLHNCQUFRLEFBQWlCO0FBQXBEOztBQUNVLGFBQU0sU0FBYSxBQUFFLEFBQUMsQUFTaEM7QUFBQztBQVBDLEFBQVEsYUFBSSxBQUFhO0FBQ3ZCLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUssUUFBRyxBQUFDLEFBQU0sQUFBQyxBQUNyQztBQUFDO0FBRUQsQUFBSyxVQUFDLEFBQWE7QUFDakIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxBQUFDLEFBQ2pDO0FBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFJ1bnRpbWVSZXNvbHZlciB9IGZyb20gXCJAZ2xpbW1lci9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBDb21waWxlVGltZUNvbnN0YW50cyB9IGZyb20gXCJAZ2xpbW1lci9vcGNvZGUtY29tcGlsZXJcIjtcblxuY29uc3QgVU5SRVNPTFZFRCA9IHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0YW50UG9vbCB7XG4gIHN0cmluZ3M6IHN0cmluZ1tdO1xuICBhcnJheXM6IG51bWJlcltdW107XG4gIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgaGFuZGxlczogbnVtYmVyW107XG4gIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdO1xuICBmbG9hdHM6IG51bWJlcltdO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBQcmltaXRpdmVUeXBlIHtcbiAgTlVNQkVSICAgICAgICAgID0gMGIwMCxcbiAgRkxPQVQgICAgICAgICAgID0gMGIwMSxcbiAgU1RSSU5HICAgICAgICAgID0gMGIxMCxcbiAgQk9PTEVBTl9PUl9WT0lEID0gMGIxMVxufVxuXG5leHBvcnQgY2xhc3MgV3JpdGVPbmx5Q29uc3RhbnRzIGltcGxlbWVudHMgQ29tcGlsZVRpbWVDb25zdGFudHMge1xuICAvLyBgMGAgbWVhbnMgTlVMTFxuXG4gIHByb3RlY3RlZCBzdHJpbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBwcm90ZWN0ZWQgYXJyYXlzOiBudW1iZXJbXVtdID0gW107XG4gIHByb3RlY3RlZCB0YWJsZXM6IFN5bWJvbFRhYmxlW10gPSBbXTtcbiAgcHJvdGVjdGVkIGhhbmRsZXM6IG51bWJlcltdID0gW107XG4gIHByb3RlY3RlZCBzZXJpYWxpemFibGVzOiBPcGFxdWVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgcmVzb2x2ZWQ6IE9wYXF1ZVtdID0gW107XG4gIHByb3RlY3RlZCBmbG9hdHM6IG51bWJlcltdID0gW107XG5cbiAgZmxvYXQoZmxvYXQ6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmZsb2F0cy5wdXNoKGZsb2F0KTtcbiAgfVxuXG4gIHN0cmluZyh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzLnB1c2godmFsdWUpO1xuICB9XG5cbiAgc3RyaW5nQXJyYXkoc3RyaW5nczogc3RyaW5nW10pOiBudW1iZXIge1xuICAgIGxldCBfc3RyaW5nczogbnVtYmVyW10gPSBuZXcgQXJyYXkoc3RyaW5ncy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBfc3RyaW5nc1tpXSA9IHRoaXMuc3RyaW5nKHN0cmluZ3NbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFycmF5KF9zdHJpbmdzKTtcbiAgfVxuXG4gIGFycmF5KHZhbHVlczogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFycmF5cy5wdXNoKHZhbHVlcyk7XG4gIH1cblxuICB0YWJsZSh0OiBTeW1ib2xUYWJsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzLnB1c2godCk7XG4gIH1cblxuICBoYW5kbGUoaGFuZGxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRoaXMucmVzb2x2ZWQucHVzaChVTlJFU09MVkVEKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVzLnB1c2goaGFuZGxlKTtcbiAgfVxuXG4gIHNlcmlhbGl6YWJsZSh2YWx1ZTogT3BhcXVlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemFibGVzLnB1c2godmFsdWUpO1xuICB9XG5cbiAgdG9Qb29sKCk6IENvbnN0YW50UG9vbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmluZ3M6IHRoaXMuc3RyaW5ncyxcbiAgICAgIGFycmF5czogdGhpcy5hcnJheXMsXG4gICAgICB0YWJsZXM6IHRoaXMudGFibGVzLFxuICAgICAgaGFuZGxlczogdGhpcy5oYW5kbGVzLFxuICAgICAgc2VyaWFsaXphYmxlczogdGhpcy5zZXJpYWxpemFibGVzLFxuICAgICAgZmxvYXRzOiB0aGlzLmZsb2F0c1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHM8U3BlY2lmaWVyPiB7XG4gIHByb3RlY3RlZCBzdHJpbmdzOiBzdHJpbmdbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXTtcbiAgcHJvdGVjdGVkIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgcHJvdGVjdGVkIGhhbmRsZXM6IG51bWJlcltdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW107XG4gIHByb3RlY3RlZCByZXNvbHZlZDogT3BhcXVlW107XG4gIHByb3RlY3RlZCBmbG9hdHM6IG51bWJlcltdO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZXNvbHZlcjogUnVudGltZVJlc29sdmVyPFNwZWNpZmllcj4sIHBvb2w6IENvbnN0YW50UG9vbCkge1xuICAgIHRoaXMuc3RyaW5ncyA9IHBvb2wuc3RyaW5ncztcbiAgICB0aGlzLmFycmF5cyA9IHBvb2wuYXJyYXlzO1xuICAgIHRoaXMudGFibGVzID0gcG9vbC50YWJsZXM7XG4gICAgdGhpcy5oYW5kbGVzID0gcG9vbC5oYW5kbGVzO1xuICAgIHRoaXMuc2VyaWFsaXphYmxlcyA9IHBvb2wuc2VyaWFsaXphYmxlcztcbiAgICB0aGlzLmZsb2F0cyA9IHBvb2wuZmxvYXRzO1xuICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICB9XG5cbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBnZXRGbG9hdCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdHNbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN0cmluZyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmdBcnJheSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0QXJyYXkodmFsdWUpO1xuICAgIGxldCBfbmFtZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IG5hbWVzW2ldO1xuICAgICAgX25hbWVzW2ldID0gdGhpcy5nZXRTdHJpbmcobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9uYW1lcztcbiAgfVxuXG4gIGdldEFycmF5KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXlzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTeW1ib2xUYWJsZTxUIGV4dGVuZHMgU3ltYm9sVGFibGU+KHZhbHVlOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZXNbdmFsdWUgLSAxXSBhcyBUO1xuICB9XG5cbiAgcmVzb2x2ZUhhbmRsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICBsZXQgaW5kZXggPSBzIC0gMTtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XTtcblxuICAgIGlmIChyZXNvbHZlZCA9PT0gVU5SRVNPTFZFRCkge1xuICAgICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlc1tpbmRleF07XG4gICAgICByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkIGFzIFQ7XG4gIH1cblxuICBnZXRTZXJpYWxpemFibGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlc1tzIC0gMV0gYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzPFNwZWNpZmllcj4gZXh0ZW5kcyBXcml0ZU9ubHlDb25zdGFudHMge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sPzogQ29uc3RhbnRQb29sKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmIChwb29sKSB7XG4gICAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgICB0aGlzLmFycmF5cyA9IHBvb2wuYXJyYXlzO1xuICAgICAgdGhpcy50YWJsZXMgPSBwb29sLnRhYmxlcztcbiAgICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICAgIHRoaXMuc2VyaWFsaXphYmxlcyA9IHBvb2wuc2VyaWFsaXphYmxlcztcbiAgICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGAwYCBtZWFucyBOVUxMXG5cbiAgZ2V0U3RyaW5nKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ3NbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN0cmluZ0FycmF5KHZhbHVlOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gICAgbGV0IG5hbWVzID0gdGhpcy5nZXRBcnJheSh2YWx1ZSk7XG4gICAgbGV0IF9uYW1lczogc3RyaW5nW10gPSBuZXcgQXJyYXkobmFtZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBuID0gbmFtZXNbaV07XG4gICAgICBfbmFtZXNbaV0gPSB0aGlzLmdldFN0cmluZyhuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX25hbWVzO1xuICB9XG5cbiAgZ2V0QXJyYXkodmFsdWU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5hcnJheXNbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN5bWJvbFRhYmxlPFQgZXh0ZW5kcyBTeW1ib2xUYWJsZT4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlc1t2YWx1ZSAtIDFdIGFzIFQ7XG4gIH1cblxuICByZXNvbHZlSGFuZGxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIGxldCBpbmRleCA9IHMgLSAxO1xuICAgIGxldCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdO1xuXG4gICAgaWYgKHJlc29sdmVkID09PSBVTlJFU09MVkVEKSB7XG4gICAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGVzW2luZGV4XTtcbiAgICAgIHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF0gPSB0aGlzLnJlc29sdmVyLnJlc29sdmUoaGFuZGxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQgYXMgVDtcbiAgfVxuXG4gIGdldFNlcmlhbGl6YWJsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemFibGVzW3MgLSAxXSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYXp5Q29uc3RhbnRzIGV4dGVuZHMgQ29uc3RhbnRzPE9wYXF1ZT4ge1xuICBwcml2YXRlIG90aGVyczogT3BhcXVlW10gPSBbXTtcblxuICBnZXRPdGhlcjxUPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJzW3ZhbHVlIC0gMV0gYXMgVDtcbiAgfVxuXG4gIG90aGVyKG90aGVyOiBPcGFxdWUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm90aGVycy5wdXNoKG90aGVyKTtcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvcHJvZ3JhbS9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQUFBVSxhQUFHLEFBQUUsQUFBQztBQW9CdEIsQUFBTTtBQUFOO0FBQ0UsQUFBaUI7QUFFUCxhQUFPLFVBQWEsQUFBRSxBQUFDO0FBQ3ZCLGFBQU0sU0FBZSxBQUFFLEFBQUM7QUFDeEIsYUFBTSxTQUFrQixBQUFFLEFBQUM7QUFDM0IsYUFBTyxVQUFhLEFBQUUsQUFBQztBQUN2QixhQUFhLGdCQUFhLEFBQUUsQUFBQztBQUM3QixhQUFRLFdBQWEsQUFBRSxBQUFDO0FBQ3hCLGFBQU0sU0FBYSxBQUFFLEFBQUM7QUFDdEIsYUFBUyxZQUFhLEFBQUUsQUFBQyxBQWtGckM7QUFBQztBQWhGQyxBQUFLLFVBQUMsQUFBYTtBQUNqQixZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQU8sUUFBQyxBQUFLLEFBQUMsQUFBQztBQUV2QyxBQUFFLEFBQUMsWUFBQyxBQUFLLFFBQUcsQ0FBQyxBQUFDLEFBQUMsR0FBQyxBQUFDO0FBQ2YsQUFBTSxtQkFBQyxBQUFLLEFBQUMsQUFDZjtBQUFDO0FBRUQsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxTQUFHLEFBQUMsQUFBQyxBQUNyQztBQUFDO0FBRUQsQUFBUSxhQUFDLEFBQWdCO0FBQ3ZCLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUksS0FBQyxBQUFRLEFBQUMsQUFBQyxBQUN2QztBQUFDO0FBRUQsQUFBTSxXQUFDLEFBQWE7QUFDbEIsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQU8sUUFBQyxBQUFPLFFBQUMsQUFBSyxBQUFDLEFBQUM7QUFFeEMsQUFBRSxBQUFDLFlBQUMsQUFBSyxRQUFHLENBQUMsQUFB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QU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUssUUFBRyxBQUFDLEFBQU0sQUFBQyxBQUNyQztBQUFDO0FBRUQsQUFBSyxVQUFDLEFBQWE7QUFDakIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxBQUFDLEFBQ2pDO0FBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFJ1bnRpbWVSZXNvbHZlciwgQ29tcGlsZVRpbWVDb25zdGFudHMgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuXG5jb25zdCBVTlJFU09MVkVEID0ge307XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RhbnRQb29sIHtcbiAgc3RyaW5nczogc3RyaW5nW107XG4gIGFycmF5czogbnVtYmVyW11bXTtcbiAgdGFibGVzOiBTeW1ib2xUYWJsZVtdO1xuICBoYW5kbGVzOiBudW1iZXJbXTtcbiAgc2VyaWFsaXphYmxlczogT3BhcXVlW107XG4gIGZsb2F0czogbnVtYmVyW107XG4gIG5lZ2F0aXZlczogbnVtYmVyW107XG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFByaW1pdGl2ZVR5cGUge1xuICBOVU1CRVIgICAgICAgICAgPSAwYjAwMCxcbiAgRkxPQVQgICAgICAgICAgID0gMGIwMDEsXG4gIFNUUklORyAgICAgICAgICA9IDBiMDEwLFxuICBCT09MRUFOX09SX1ZPSUQgPSAwYjAxMSxcbiAgTkVHQVRJVkUgICAgICAgID0gMGIxMDBcbn1cblxuZXhwb3J0IGNsYXNzIFdyaXRlT25seUNvbnN0YW50cyBpbXBsZW1lbnRzIENvbXBpbGVUaW1lQ29uc3RhbnRzIHtcbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBwcm90ZWN0ZWQgc3RyaW5nczogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXSA9IFtdO1xuICBwcm90ZWN0ZWQgdGFibGVzOiBTeW1ib2xUYWJsZVtdID0gW107XG4gIHByb3RlY3RlZCBoYW5kbGVzOiBudW1iZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW10gPSBbXTtcbiAgcHJvdGVjdGVkIHJlc29sdmVkOiBPcGFxdWVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgZmxvYXRzOiBudW1iZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgbmVnYXRpdmVzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZsb2F0KGZsb2F0OiBudW1iZXIpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmZsb2F0cy5pbmRleE9mKGZsb2F0KTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmxvYXRzLnB1c2goZmxvYXQpIC0gMTtcbiAgfVxuXG4gIG5lZ2F0aXZlKG5lZ2F0aXZlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZXMucHVzaChuZWdhdGl2ZSk7XG4gIH1cblxuICBzdHJpbmcodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5zdHJpbmdzLmluZGV4T2YodmFsdWUpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzLnB1c2godmFsdWUpIC0gMTtcbiAgfVxuXG4gIHN0cmluZ0FycmF5KHN0cmluZ3M6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBsZXQgX3N0cmluZ3M6IG51bWJlcltdID0gbmV3IEFycmF5KHN0cmluZ3MubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgX3N0cmluZ3NbaV0gPSB0aGlzLnN0cmluZyhzdHJpbmdzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJheShfc3RyaW5ncyk7XG4gIH1cblxuICBhcnJheSh2YWx1ZXM6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmFycmF5cy5pbmRleE9mKHZhbHVlcyk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFycmF5cy5wdXNoKHZhbHVlcykgLSAxO1xuICB9XG5cbiAgdGFibGUodDogU3ltYm9sVGFibGUpOiBudW1iZXIge1xuICAgIGxldCBpbmRleCA9IHRoaXMudGFibGVzLmluZGV4T2YodCk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRhYmxlcy5wdXNoKHQpIC0gMTtcbiAgfVxuXG4gIGhhbmRsZShoYW5kbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgdGhpcy5yZXNvbHZlZC5wdXNoKFVOUkVTT0xWRUQpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXMucHVzaChoYW5kbGUpO1xuICB9XG5cbiAgc2VyaWFsaXphYmxlKHZhbHVlOiBPcGFxdWUpOiBudW1iZXIge1xuICAgIGxldCBpbmRleCA9IHRoaXMuc2VyaWFsaXphYmxlcy5pbmRleE9mKHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlcy5wdXNoKHZhbHVlKSAtIDE7XG4gIH1cblxuICB0b1Bvb2woKTogQ29uc3RhbnRQb29sIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RyaW5nczogdGhpcy5zdHJpbmdzLFxuICAgICAgYXJyYXlzOiB0aGlzLmFycmF5cyxcbiAgICAgIHRhYmxlczogdGhpcy50YWJsZXMsXG4gICAgICBoYW5kbGVzOiB0aGlzLmhhbmRsZXMsXG4gICAgICBzZXJpYWxpemFibGVzOiB0aGlzLnNlcmlhbGl6YWJsZXMsXG4gICAgICBmbG9hdHM6IHRoaXMuZmxvYXRzLFxuICAgICAgbmVnYXRpdmVzOiB0aGlzLm5lZ2F0aXZlc1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHM8U3BlY2lmaWVyPiB7XG4gIHByb3RlY3RlZCBzdHJpbmdzOiBzdHJpbmdbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXTtcbiAgcHJvdGVjdGVkIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgcHJvdGVjdGVkIGhhbmRsZXM6IG51bWJlcltdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW107XG4gIHByb3RlY3RlZCByZXNvbHZlZDogT3BhcXVlW107XG4gIHByb3RlY3RlZCBmbG9hdHM6IG51bWJlcltdO1xuICBwcm90ZWN0ZWQgbmVnYXRpdmVzOiBudW1iZXJbXTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sOiBDb25zdGFudFBvb2wpIHtcbiAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgdGhpcy5hcnJheXMgPSBwb29sLmFycmF5cztcbiAgICB0aGlzLnRhYmxlcyA9IHBvb2wudGFibGVzO1xuICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICB0aGlzLnNlcmlhbGl6YWJsZXMgPSBwb29sLnNlcmlhbGl6YWJsZXM7XG4gICAgdGhpcy5mbG9hdHMgPSBwb29sLmZsb2F0cztcbiAgICB0aGlzLm5lZ2F0aXZlcyA9IHBvb2wubmVnYXRpdmVzO1xuICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICB9XG5cbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBnZXRGbG9hdCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdHNbdmFsdWVdO1xuICB9XG5cbiAgZ2V0TmVnYXRpdmUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmVzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmcodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nc1t2YWx1ZV07XG4gIH1cblxuICBnZXRTdHJpbmdBcnJheSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0QXJyYXkodmFsdWUpO1xuICAgIGxldCBfbmFtZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IG5hbWVzW2ldO1xuICAgICAgX25hbWVzW2ldID0gdGhpcy5nZXRTdHJpbmcobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9uYW1lcztcbiAgfVxuXG4gIGdldEFycmF5KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXlzW3ZhbHVlXTtcbiAgfVxuXG4gIGdldFN5bWJvbFRhYmxlPFQgZXh0ZW5kcyBTeW1ib2xUYWJsZT4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlc1t2YWx1ZV0gYXMgVDtcbiAgfVxuXG4gIHJlc29sdmVIYW5kbGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgbGV0IGluZGV4ID0gcyAtIDE7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF07XG5cbiAgICBpZiAocmVzb2x2ZWQgPT09IFVOUkVTT0xWRUQpIHtcbiAgICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZXNbaW5kZXhdO1xuICAgICAgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZShoYW5kbGUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlZCBhcyBUO1xuICB9XG5cbiAgZ2V0U2VyaWFsaXphYmxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YWJsZXNbc10gYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzPFNwZWNpZmllcj4gZXh0ZW5kcyBXcml0ZU9ubHlDb25zdGFudHMge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sPzogQ29uc3RhbnRQb29sKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmIChwb29sKSB7XG4gICAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgICB0aGlzLmFycmF5cyA9IHBvb2wuYXJyYXlzO1xuICAgICAgdGhpcy50YWJsZXMgPSBwb29sLnRhYmxlcztcbiAgICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICAgIHRoaXMuc2VyaWFsaXphYmxlcyA9IHBvb2wuc2VyaWFsaXphYmxlcztcbiAgICAgIHRoaXMuZmxvYXRzID0gcG9vbC5mbG9hdHM7XG4gICAgICB0aGlzLm5lZ2F0aXZlcyA9IHBvb2wubmVnYXRpdmVzO1xuICAgICAgdGhpcy5yZXNvbHZlZCA9IHRoaXMuaGFuZGxlcy5tYXAoKCkgPT4gVU5SRVNPTFZFRCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYDBgIG1lYW5zIE5VTExcbiAgZ2V0RmxvYXQodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXROZWdhdGl2ZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZXNbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN0cmluZyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzW3ZhbHVlXTtcbiAgfVxuXG4gIGdldFN0cmluZ0FycmF5KHZhbHVlOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gICAgbGV0IG5hbWVzID0gdGhpcy5nZXRBcnJheSh2YWx1ZSk7XG4gICAgbGV0IF9uYW1lczogc3RyaW5nW10gPSBuZXcgQXJyYXkobmFtZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBuID0gbmFtZXNbaV07XG4gICAgICBfbmFtZXNbaV0gPSB0aGlzLmdldFN0cmluZyhuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX25hbWVzO1xuICB9XG5cbiAgZ2V0QXJyYXkodmFsdWU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5hcnJheXNbdmFsdWVdO1xuICB9XG5cbiAgZ2V0U3ltYm9sVGFibGU8VCBleHRlbmRzIFN5bWJvbFRhYmxlPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzW3ZhbHVlXSBhcyBUO1xuICB9XG5cbiAgcmVzb2x2ZUhhbmRsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICBsZXQgaW5kZXggPSBzIC0gMTtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XTtcblxuICAgIGlmIChyZXNvbHZlZCA9PT0gVU5SRVNPTFZFRCkge1xuICAgICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlc1tpbmRleF07XG4gICAgICByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkIGFzIFQ7XG4gIH1cblxuICBnZXRTZXJpYWxpemFibGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlc1tzXSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYXp5Q29uc3RhbnRzIGV4dGVuZHMgQ29uc3RhbnRzPE9wYXF1ZT4ge1xuICBwcml2YXRlIG90aGVyczogT3BhcXVlW10gPSBbXTtcblxuICBnZXRPdGhlcjxUPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJzW3ZhbHVlIC0gMV0gYXMgVDtcbiAgfVxuXG4gIG90aGVyKG90aGVyOiBPcGFxdWUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm90aGVycy5wdXNoKG90aGVyKTtcbiAgfVxufVxuIl19 |
@@ -15,16 +15,44 @@ | ||
const STATE_OFFSET = 3; | ||
/** | ||
* The Heap is responsible for dynamically allocating | ||
* memory in which we read/write the VM's instructions | ||
* from/to. When we malloc we pass out a VMHandle, which | ||
* is used as an indirect way of accessing the memory during | ||
* execution of the VM. Internally we track the different | ||
* regions of the memory in an int array known as the table. | ||
* | ||
* The table has the following layout: | ||
* | ||
* | ... | table entry | | ||
* | ... | hp | size | scope size | state | | ||
* | ... | 0 | 122 | 3 | 0 | | ||
* handle ^ | | ^ region state (allocated, freed, purged) | ||
* region size ^ | | ||
* number of symbols ^ | ||
* | ||
* With this information we effectively have the ability to | ||
* control when we want to free memory. That being said you | ||
* can not free during execution as raw address are only | ||
* valid during the execution. This means you cannot close | ||
* over them as you will have a bad memory access exception. | ||
*/ | ||
export class Heap { | ||
constructor() { | ||
this.heap = []; | ||
constructor(serializedHeap) { | ||
this.offset = 0; | ||
this.handle = 0; | ||
/** | ||
* layout: | ||
* | ||
* - pointer into heap | ||
* - size | ||
* - scope size | ||
* - freed (0 or 1) | ||
*/ | ||
this.table = []; | ||
if (serializedHeap) { | ||
let { buffer, table, handle } = serializedHeap; | ||
this.heap = new Uint16Array(buffer); | ||
this.table = table; | ||
this.offset = this.heap.length; | ||
this.handle = handle; | ||
} else { | ||
if (typeof Uint16Array !== 'undefined') { | ||
this.heap = new Uint16Array(0x100000); | ||
} else { | ||
// FIXME remove once we drop IE9 | ||
this.heap = new Array(0x100000); | ||
} | ||
this.table = []; | ||
} | ||
} | ||
@@ -79,2 +107,9 @@ push(item) { | ||
} | ||
/** | ||
* The heap uses the [Mark-Compact Algorithm](https://en.wikipedia.org/wiki/Mark-compact_algorithm) to shift | ||
* reachable memory to the bottom of the heap and freeable | ||
* memory to the top of the heap. When we have shifted all | ||
* the reachable memory to the top of the heap, we move the | ||
* offset to the next free position. | ||
*/ | ||
compact() { | ||
@@ -106,4 +141,10 @@ let compactedSize = 0; | ||
} | ||
toArray() { | ||
return this.heap.slice(); | ||
capture() { | ||
// Only called in eager mode | ||
let buffer = slice(this.heap, 0, this.offset); | ||
return { | ||
handle: this.handle, | ||
table: this.table, | ||
buffer: buffer | ||
}; | ||
} | ||
@@ -134,2 +175,15 @@ } | ||
export class Program extends WriteOnlyProgram {} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUdBLEFBQU8sU0FBYSxBQUFrQixBQUFvQiwwQkFBTSxBQUFhLEFBQUM7QUFDOUUsQUFBTyxTQUFFLEFBQU0sQUFBRSxjQUFNLEFBQVUsQUFBQztBQUdsQyxJQUFLLEFBS0o7QUFMRCxXQUFLLEFBQWM7QUFDakIsc0RBQVM7QUFDVCxrREFBSztBQUNMLG1EQUFNO0FBQ04sb0RBQU8sQUFDVDtBQUFDLEdBTEksQUFBYyxtQkFBZCxBQUFjLGlCQUtsQjtBQUVELE1BQU0sQUFBVSxhQUFHLEFBQUMsQUFBQztBQUNyQixNQUFNLEFBQVcsY0FBRyxBQUFDLEFBQUM7QUFDdEIsTUFBTSxBQUFnQixtQkFBRyxBQUFDLEFBQUM7QUFDM0IsTUFBTSxBQUFZLGVBQUcsQUFBQyxBQUFDO0FBRXZCLEFBQU07QUFBTjtBQUNVLGFBQUksT0FBYSxBQUFFLEFBQUM7QUFDcEIsYUFBTSxTQUFHLEFBQUMsQUFBQztBQUNYLGFBQU0sU0FBRyxBQUFDLEFBQUM7QUFFbkIsQUFPRzs7Ozs7Ozs7QUFDSyxhQUFLLFFBQWEsQUFBRSxBQUFDLEFBK0YvQjtBQUFDO0FBN0ZDLEFBQUksU0FBQyxBQUFZO0FBQ2YsQUFBSSxhQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBTSxBQUFFLEFBQUMsWUFBRyxBQUFJLEFBQUMsQUFDbEM7QUFBQztBQUVELEFBQVMsY0FBQyxBQUFlO0FBQ3ZCLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQU8sQUFBQyxBQUFDLEFBQzVCO0FBQUM7QUFFRCxBQUFTLGNBQUMsQUFBZSxTQUFFLEFBQWE7QUFDdEMsQUFBSSxhQUFDLEFBQUksS0FBQyxBQUFPLEFBQUMsV0FBRyxBQUFLLEFBQUMsQUFDN0I7QUFBQztBQUVELEFBQU07QUFDSixBQUFJ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QUFDO0FBRUQsQUFBTSxXQUFDLEFBQWM7QUFDbkIsQUFBSSxhQUFDLEFBQU8sUUFBQyxBQUFNLFNBQUcsQUFBTSxBQUFDO0FBQzdCLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLEFBQ3RCO0FBQUMsQUFDRjs7QUFFRCxBQUFNO0FBS0osZ0JBQW1CLEFBQXNDLFdBQVMsQUFBVTtBQUF6RCxhQUFTLFlBQVQsQUFBUyxBQUE2QjtBQUFTLGFBQUksT0FBSixBQUFJLEFBQU07QUFDMUUsQUFBSSxhQUFDLEFBQU8sVUFBRyxJQUFJLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUMsQUFDdkM7QUFBQztBQUVELEFBQU0sV0FBQyxBQUFjO0FBQ25CLEFBQUksYUFBQyxBQUFPLFFBQUMsQUFBTSxTQUFHLEFBQU0sQUFBQztBQUM3QixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU8sQUFBQyxBQUN0QjtBQUFDLEFBQ0Y7O0FBRUQsQUFBTSxhQUEwQixnQkFBUSxBQUFnQixpQkFFdkQiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IFJlY2FzdCwgVk1IYW5kbGUgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgREVCVUcgfSBmcm9tIFwiQGdsaW1tZXIvbG9jYWwtZGVidWctZmxhZ3NcIjtcbmltcG9ydCB7IENvbnN0YW50cywgV3JpdGVPbmx5Q29uc3RhbnRzLCBSdW50aW1lQ29uc3RhbnRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT3Bjb2RlIH0gZnJvbSAnLi9vcGNvZGUnO1xuaW1wb3J0IHsgQ29tcGlsZVRpbWVQcm9ncmFtIH0gZnJvbSBcIkBnbGltbWVyL29wY29kZS1jb21waWxlclwiO1xuXG5lbnVtIFRhYmxlU2xvdFN0YXRlIHtcbiAgQWxsb2NhdGVkLFxuICBGcmVlZCxcbiAgUHVyZ2VkLFxuICBQb2ludGVyXG59XG5cbmNvbnN0IEVOVFJZX1NJWkUgPSA0O1xuY29uc3QgU0laRV9PRkZTRVQgPSAxO1xuY29uc3QgU0NPUEVTSVpFX09GRlNFVCA9IDI7XG5jb25zdCBTVEFURV9PRkZTRVQgPSAzO1xuXG5leHBvcnQgY2xhc3MgSGVhcCB7XG4gIHByaXZhdGUgaGVhcDogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBvZmZzZXQgPSAwO1xuICBwcml2YXRlIGhhbmRsZSA9IDA7XG5cbiAgLyoqXG4gICAqIGxheW91dDpcbiAgICpcbiAgICogLSBwb2ludGVyIGludG8gaGVhcFxuICAgKiAtIHNpemVcbiAgICogLSBzY29wZSBzaXplXG4gICAqIC0gZnJlZWQgKDAgb3IgMSlcbiAgICovXG4gIHByaXZhdGUgdGFibGU6IG51bWJlcltdID0gW107XG5cbiAgcHVzaChpdGVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmhlYXBbdGhpcy5vZmZzZXQrK10gPSBpdGVtO1xuICB9XG5cbiAgZ2V0YnlhZGRyKGFkZHJlc3M6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaGVhcFthZGRyZXNzXTtcbiAgfVxuXG4gIHNldGJ5YWRkcihhZGRyZXNzOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmhlYXBbYWRkcmVzc10gPSB2YWx1ZTtcbiAgfVxuXG4gIG1hbGxvYygpOiBWTUhhbmRsZSB7XG4gICAgdGhpcy50YWJsZS5wdXNoKHRoaXMub2Zmc2V0LCAwLCAwLCAwKTtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGU7XG4gICAgdGhpcy5oYW5kbGUgKz0gRU5UUllfU0laRTtcbiAgICByZXR1cm4gaGFuZGxlIGFzIFJlY2FzdDxudW1iZXIsIFZNSGFuZGxlPjtcbiAgfVxuXG4gIGZpbmlzaE1hbGxvYyhoYW5kbGU6IFZNSGFuZGxlLCBzY29wZVNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBzdGFydCA9IHRoaXMudGFibGVbaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPl07XG4gICAgbGV0IGZpbmlzaCA9IHRoaXMub2Zmc2V0O1xuICAgIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0laRV9PRkZTRVRdID0gZmluaXNoIC0gc3RhcnQ7XG4gICAgdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTQ09QRVNJWkVfT0ZGU0VUXSA9IHNjb3BlU2l6ZTtcbiAgfVxuXG4gIHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQ7XG4gIH1cblxuICAvLyBJdCBpcyBpbGxlZ2FsIHRvIGNsb3NlIG92ZXIgdGhpcyBhZGRyZXNzLCBhcyBjb21wYWN0aW9uXG4gIC8vIG1heSBtb3ZlIGl0LiBIb3dldmVyLCBpdCBpcyBsZWdhbCB0byB1c2UgdGhpcyBhZGRyZXNzXG4gIC8vIG11bHRpcGxlIHRpbWVzIGJldHdlZW4gY29tcGFjdGlvbnMuXG4gIGdldGFkZHIoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVbaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPl07XG4gIH1cblxuICBnZXRoYW5kbGUoYWRkcmVzczogbnVtYmVyKTogVk1IYW5kbGUge1xuICAgIHRoaXMudGFibGUucHVzaChhZGRyZXNzLCAwLCAwLCBUYWJsZVNsb3RTdGF0ZS5Qb2ludGVyKTtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGU7XG4gICAgdGhpcy5oYW5kbGUgKz0gRU5UUllfU0laRTtcbiAgICByZXR1cm4gaGFuZGxlIGFzIFJlY2FzdDxudW1iZXIsIFZNSGFuZGxlPjtcbiAgfVxuXG4gIHNpemVvZihoYW5kbGU6IFZNSGFuZGxlKTogbnVtYmVyIHtcbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNJWkVfT0ZGU0VUXTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgc2NvcGVzaXplb2YoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0NPUEVTSVpFX09GRlNFVF07XG4gIH1cblxuICBmcmVlKGhhbmRsZTogVk1IYW5kbGUpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNUQVRFX09GRlNFVF0gPSAxO1xuICB9XG5cbiAgY29tcGFjdCgpOiB2b2lkIHtcbiAgICBsZXQgY29tcGFjdGVkU2l6ZSA9IDA7XG4gICAgbGV0IHsgdGFibGUsIHRhYmxlOiB7IGxlbmd0aCB9LCBoZWFwIH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaT0wOyBpPGxlbmd0aDsgaSs9RU5UUllfU0laRSkge1xuICAgICAgbGV0IG9mZnNldCA9IHRhYmxlW2ldO1xuICAgICAgbGV0IHNpemUgPSB0YWJsZVtpICsgU0laRV9PRkZTRVRdO1xuICAgICAgbGV0IHN0YXRlID0gdGFibGVbaSArIFNUQVRFX09GRlNFVF07XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuUHVyZ2VkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuRnJlZWQpIHtcbiAgICAgICAgLy8gdHJhbnNpdGlvbiB0byBcImFscmVhZHkgZnJlZWRcIiBha2EgXCJwdXJnZWRcIlxuICAgICAgICAvLyBhIGdvb2QgaW1wcm92ZW1lbnQgd291bGQgYmUgdG8gcmV1c2VcbiAgICAgICAgLy8gdGhlc2Ugc2xvdHNcbiAgICAgICAgdGFibGVbaSArIFNUQVRFX09GRlNFVF0gPSBUYWJsZVNsb3RTdGF0ZS5QdXJnZWQ7XG4gICAgICAgIGNvbXBhY3RlZFNpemUgKz0gc2l6ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLkFsbG9jYXRlZCkge1xuICAgICAgICBmb3IgKGxldCBqPW9mZnNldDsgajw9aStzaXplOyBqKyspIHtcbiAgICAgICAgICBoZWFwW2ogLSBjb21wYWN0ZWRTaXplXSA9IGhlYXBbal07XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZVtpXSA9IG9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5Qb2ludGVyKSB7XG4gICAgICAgIHRhYmxlW2ldID0gb2Zmc2V0IC0gY29tcGFjdGVkU2l6ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9mZnNldCA9IHRoaXMub2Zmc2V0IC0gY29tcGFjdGVkU2l6ZTtcbiAgfVxuXG4gIHRvQXJyYXkoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLmhlYXAuc2xpY2UoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV3JpdGVPbmx5UHJvZ3JhbSBpbXBsZW1lbnRzIENvbXBpbGVUaW1lUHJvZ3JhbSB7XG4gIFtrZXk6IG51bWJlcl06IG5ldmVyO1xuXG4gIHByaXZhdGUgX29wY29kZTogT3Bjb2RlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb25zdGFudHM6IFdyaXRlT25seUNvbnN0YW50cyA9IG5ldyBXcml0ZU9ubHlDb25zdGFudHMoKSwgcHVibGljIGhlYXAgPSBuZXcgSGVhcCgpKSB7XG4gICAgdGhpcy5fb3Bjb2RlID0gbmV3IE9wY29kZSh0aGlzLmhlYXApO1xuICB9XG5cbiAgb3Bjb2RlKG9mZnNldDogbnVtYmVyKTogT3Bjb2RlIHtcbiAgICB0aGlzLl9vcGNvZGUub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLl9vcGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVQcm9ncmFtPFNwZWNpZmllcj4ge1xuICBba2V5OiBudW1iZXJdOiBuZXZlcjtcblxuICBwcml2YXRlIF9vcGNvZGU6IE9wY29kZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uc3RhbnRzOiBSdW50aW1lQ29uc3RhbnRzPFNwZWNpZmllcj4sIHB1YmxpYyBoZWFwOiBIZWFwKSB7XG4gICAgdGhpcy5fb3Bjb2RlID0gbmV3IE9wY29kZSh0aGlzLmhlYXApO1xuICB9XG5cbiAgb3Bjb2RlKG9mZnNldDogbnVtYmVyKTogT3Bjb2RlIHtcbiAgICB0aGlzLl9vcGNvZGUub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLl9vcGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW08U3BlY2lmaWVyPiBleHRlbmRzIFdyaXRlT25seVByb2dyYW0ge1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM8U3BlY2lmaWVyPjtcbn1cbiJdfQ== | ||
function slice(arr, start, end) { | ||
if (arr instanceof Uint16Array) { | ||
if (arr.slice !== undefined) { | ||
return arr.slice(start, end).buffer; | ||
} | ||
let ret = new Uint16Array(end); | ||
for (; start < end; start++) { | ||
ret[start] = arr[start]; | ||
} | ||
return ret.buffer; | ||
} | ||
return null; | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUdBLEFBQU8sU0FBYSxBQUFrQixBQUFvQiwwQkFBTSxBQUFhLEFBQUM7QUFDOUUsQUFBTyxTQUFFLEFBQU0sQUFBRSxjQUFNLEFBQVUsQUFBQztBQUVsQyxJQUFLLEFBS0o7QUFMRCxXQUFLLEFBQWM7QUFDakIsc0RBQVM7QUFDVCxrREFBSztBQUNMLG1EQUFNO0FBQ04sb0RBQU8sQUFDVDtBQUFDLEdBTEksQUFBYyxtQkFBZCxBQUFjLGlCQUtsQjtBQUVELE1BQU0sQUFBVSxhQUFHLEFBQUMsQUFBQztBQUNyQixNQUFNLEFBQVcsY0FBRyxBQUFDLEFBQUM7QUFDdEIsTUFBTSxBQUFnQixtQkFBRyxBQUFDLEFBQUM7QUFDM0IsTUFBTSxBQUFZLGVBQUcsQUFBQyxBQUFDO0FBRXZCLEFBc0JHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNILEFBQU07QUFNSixnQkFBWSxBQUF5RTtBQUg3RSxhQUFNLFNBQUcsQUFBQyxBQUFDO0FBQ1gsYUFBTSxTQUFHLEFBQUMsQUFBQztBQUdqQixBQUFFLEFBQUMsWUFBQyxBQUFjLEFBQUMsZ0JBQUMsQUFBQztBQUNuQixnQkFBSSxFQUFFLEFBQU0sUUFBRSxBQUFLLE9BQUUsQUFBTSxBQUFFLFdBQUcsQUFBYyxBQUFDO0FBQy9DLEFBQUksaUJBQUMsQUFBSSxPQUFHLElBQUksQUFBVyxZQUFDLEFBQU0sQUFBQyxBQUFDO0FBQ3BDLEFBQUksaUJBQUMsQUFBSyxRQUFHLEFBQUssQUFBQztBQUNuQixBQUFJLGlCQUFDLEFBQU0sU0FBRyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQztBQUMvQixBQUFJLGlCQUFDLEFBQU0sU0FBRyxBQUFNLEFBQUMsQUFDdkI7QUFBQyxBQUFDLEFBQUksZUFBQyxBQUFDO0FBQ04sQUFBRSxBQUFDLGdCQUFDLE9BQU8sQUFBVyxnQkFBSyxBQUFXLEFBQUMsYUFBQyxBQUFDO0FBQ3ZDLEFBQUkscUJBQUMsQUFBSSxPQUFHLElBQUksQUFBVyxZQUFDLEFBQVEsQUFBQyxBQUFDLEFBQ3hDO0FBQUMsQUFBQyxBQUFJLG1CQUFDLEFBQUM7QUFDTixBQUFnQztBQUNoQyxBQUFJLHFCQUFDLEFBQUksT0FBRyxJQUFJLEFBQUssTUFBQyxBQUFRLEFBQUMsQUFBQyxBQUNsQztBQUFDO0FBQ0QsQUFBSSxpQkFBQyxBQUFLLFFBQUcsQUFBRSxBQUFDLEFBQ2xCO0FBQUMsQUFDSDtBQUFDO0FBRUQsQUFBSSxTQUFDLEFBQVk7QUFDZixBQUFJLGFBQUMsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFNLEFBQUUsQUFBQyxZQUFHLEFBQUksQUFBQyxBQUNsQztBQUFDO0FBRUQsQUFBUyxjQUFDLEFBQWU7QUFDdkIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLEFBQUMsQUFDNUI7QUFBQztBQUVELEFBQVMsY0FBQyxBQUFlLFNBQUUsQUFBYTtBQUN0QyxBQUFJLGFBQUMsQUFBSSxLQUFDLEFBQU8sQUFBQyxXQUFHLEFBQUssQUFBQyxBQUM3QjtBQUFDO0FBRUQsQUFBTTtBQUNKLEFBQUksYUFBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFNLFFBQUUsQUFBQyxHQUFFLEFBQUMsR0FBRSxBQUFDLEFBQUMsQUFBQztBQUN0QyxZQUFJLEFBQU0sU0FBRyxBQUFJLEtBQUMsQUFBTSxBQUFDO0FBQ3pCLEFBQUksYUFBQyxBQUFNLFVBQUksQUFBVSxBQUFDO0FBQzFCLEFBQU0sZUFBQyxBQUFrQyxBQUFDLEFBQzVDO0FBQUM7QUFFRCxBQUFZLGlCQUFDLEFBQWdCLFFBQUUsQUFBaUI7QUFDOUMsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFrQyxBQUFDLEFBQUM7QUFDM0QsWUFBSSxBQUFNLFNBQUcsQUFBSSxLQUFDLEFBQU0sQUFBQztBQUN6QixBQUFJLGFBQUMsQUFBSyxNQUFFLEFBQW1DLFNBQUcsQUFBVyxBQUFDLGVBQUcsQUFBTSxTQUFHLEFBQUssQUFBQztBQUNoRixBQUFJLGFBQUMsQUFBSyxNQUFFLEFBQW1DLFNBQUcsQUFBZ0IsQUFBQyxvQkFBRyxBQUFTLEFBQUMsQUFDbEY7QUFBQztBQUVELEFBQUk7QUFDRixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUNyQjtBQUFDO0FBRUQsQUFBMEQ7QUFDMUQsQUFBd0Q7QUFDeEQsQUFBc0M7QUFDdEMsQUFBTyxZQUFDLEFBQWdCO0FBQ3RCLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQWtDLEFBQUMsQUFBQyxBQUN4RDtBQUFDO0FBRUQsQUFBUyxjQUFDLEFBQWU7QUFDdkIsQUFBSSxhQUFDLEFBQUssTUFBQyxBQUFJLEtBQUMsQUFBTyxTQUFFLEFBQUMsR0FBRSxBQUFDLEdBQUUsQUFBYyxlQUFDLEFBQU8sQUFBQyxBQUFDO0FBQ3ZELFlBQUksQUFBTSxTQUFHLEFBQUksS0FBQyxBQUFNLEFBQUM7QUFDekIsQUFBSSxhQUFDLEFBQU0sVUFBSSxBQUFVLEFBQUM7QUFDMUIsQUFBTSxlQUFDLEFBQWtDLEFBQUMsQUFDNUM7QUFBQztBQUVELEFBQU0sV0FBQyxBQUFnQjtBQUNyQixBQUFFLEFBQUMsQUFBQyxBQUFLLEFBQUMsbUJBQUMsQUFBQztBQUNWLEFBQU0sbUJBQUMsQUFBSSxLQUFDLEFBQUssTUFBRSxBQUFtQyxTQUFHLEFBQVcsQUFBQyxBQUFDLEFBQ3hFO0FBQUM7QUFDRCxBQUFNLGVBQUMsQ0FBQyxBQUFDLEFBQUMsQUFDWjtBQUFDO0FBRUQsQUFBVyxnQkFBQyxBQUFnQjtBQUMxQixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUssTUFBRSxBQUFtQyxTQUFHLEFBQWdCLEFBQUMsQUFBQyxBQUM3RTtBQUFDO0FBRUQsQUFBSSxTQUFDLEFBQWdCO0FBQ25CLEFBQUksYUFBQyxBQUFLLE1BQUUsQUFBbUMsU0FBRyxBQUFZLEFBQUMsZ0JBQUcsQUFBQyxBQUFDLEFBQ3RFO0FBQUM7QUFFRCxBQU1HOzs7Ozs7O0FBQ0gsQUFBTztBQUNMLFlBQUksQUFBYSxnQkFBRyxBQUFDLEFBQUM7QUFDdEIsWUFBSSxFQUFFLEFBQUssT0FBRSxBQUFLLE9BQUUsRUFBRSxBQUFNLEFBQUUsVUFBRSxBQUFJLEFBQUUsU0FBRyxBQUFJLEFBQUM7QUFFOUMsQUFBRyxBQUFDLGFBQUMsSUFBSSxBQUFDLElBQUMsQUFBQyxHQUFFLEFBQUMsSUFBQyxBQUFNLFFBQUUsQUFBQyxLQUFFLEFBQVUsWUFBRSxBQUFDO0FBQ3RDLGdCQUFJLEFBQU0sU0FBRyxBQUFLLE1BQUMsQUFBQyxBQUFDLEFBQUM7QUFDdEIsZ0JBQUksQUFBSSxPQUFHLEFBQUssTUFBQyxBQUFDLElBQUcsQUFBVyxBQUFDLEFBQUM7QUFDbEMsZ0JBQUksQUFBSyxRQUFHLEFBQUssTUFBQyxBQUFDLElBQUcsQUFBWSxBQUFDLEFBQUM7QUFFcEMsQUFBRSxBQUFDLGdCQUFDLEFBQUssVUFBSyxBQUFjLGVBQUMsQUFBTSxBQUFDLFFBQUMsQUFBQztBQUNwQyxBQUFRLEFBQUMsQUFDWDtBQUFDLEFBQUMsQUFBSSx1QkFBSyxBQUFLLFVBQUssQUFBYyxlQUFDLEFBQUssQUFBQyxPQUFDLEFBQUM7QUFDMUMsQUFBNkM7QUFDN0MsQUFBdUM7QUFDdkMsQUFBYztBQUNkLEFBQUssc0JBQUMsQUFBQyxJQUFHLEFBQVksQUFBQyxnQkFBRyxBQUFjLGVBQUMsQUFBTSxBQUFDO0FBQ2hELEFBQWEsaUNBQUksQUFBSSxBQUFDLEFBQ3hCO0FBQUMsQUFBQyxBQUFJLGFBTkMsQUFBRSxBQUFDLFVBTUMsQUFBSyxVQUFLLEFBQWMsZUFBQyxBQUFTLEFBQUMsV0FBQyxBQUFDO0FBQzlDLEFBQUcsQUFBQyxxQkFBQyxJQUFJLEFBQUMsSUFBQyxBQUFNLFFBQUUsQUFBQyxLQUFFLEFBQUMsSUFBQyxBQUFJLE1BQUUsQUFBQyxBQUFFLEtBQUUsQUFBQztBQUNsQyxBQUFJLHlCQUFDLEFBQUMsSUFBRyxBQUFhLEFBQUMsaUJBQUcsQUFBSSxLQUFDLEFBQUMsQUFBQyxBQUFDLEFBQ3BDO0FBQUM7QUFFRCxBQUFLLHNCQUFDLEFBQUMsQUFBQyxLQUFHLEFBQU0sU0FBRyxBQUFhLEFBQUMsQUFDcEM7QUFBQyxBQUFDLEFBQUksYUFOQyxBQUFFLEFBQUMsTUFNSCxBQUFFLEFBQUMsSUFBQyxBQUFLLFVBQUssQUFBYyxlQUFDLEFBQU8sQUFBQyxTQUFDLEFBQUM7QUFDNUMsQUFBSyxzQkFBQyxBQUFDLEFBQUMsS0FBRyxBQUFNLFNBQUcsQUFBYSxBQUFDLEFBQ3BDO0FBQUMsQUFDSDtBQUFDO0FBRUQsQUFBSSxhQUFDLEFBQU0sU0FBRyxBQUFJLEtBQUMsQUFBTSxTQUFHLEFBQWEsQUFBQyxBQUM1QztBQUFDO0FBRUQsQUFBTztBQUNMLEFBQTRCO0FBQzVCLFlBQUksQUFBTSxTQUFHLEFBQUssTUFBQyxBQUFJLEtBQUMsQUFBSSxNQUFFLEFBQUMsR0FBRSxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQUM7QUFDOUMsQUFBTTtBQUNKLEFBQU0sb0JBQUUsQUFBSSxLQUFDLEFBQU07QUFDbkIsQUFBSyxtQkFBRSxBQUFJLEtBQUMsQUFBSztBQUNqQixBQUFNLG9CQUFFLEFBQXFCLEFBQzlCLEFBQUMsQUFDSjtBQUxTO0FBS1IsQUFDRjs7QUFFRCxBQUFNO0FBS0osZ0JBQW1CLFlBQWdDLElBQUksQUFBa0IsQUFBRSxzQkFBUyxPQUFPLElBQUksQUFBSSxBQUFFO0FBQWxGLGFBQVMsWUFBVCxBQUFTLEFBQStDO0FBQVMsYUFBSSxPQUFKLEFBQUksQUFBYTtBQUNuRyxBQUFJLGFBQUMsQUFBTyxVQUFHLElBQUksQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFJLEFBQUMsQUFBQyxBQUN2QztBQUFDO0FBRUQsQUFBTSxXQUFDLEFBQWM7QUFDbkIsQUFBSSxhQUFDLEFBQU8sUUFBQyxBQUFNLFNBQUcsQUFBTSxBQUFDO0FBQzdCLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLEFBQ3RCO0FBQUMsQUFDRjs7QUFFRCxBQUFNO0FBS0osZ0JBQW1CLEFBQXNDLFdBQVMsQUFBVTtBQUF6RCxhQUFTLFlBQVQsQUFBUyxBQUE2QjtBQUFTLGFBQUksT0FBSixBQUFJLEFBQU07QUFDMUUsQUFBSSxhQUFDLEFBQU8sVUFBRyxJQUFJLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUMsQUFDdkM7QUFBQztBQUVELEFBQU0sV0FBQyxBQUFjO0FBQ25CLEFBQUksYUFBQyxBQUFPLFFBQUMsQUFBTSxTQUFHLEFBQU0sQUFBQztBQUM3QixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU8sQUFBQyxBQUN0QjtBQUFDLEFBQ0Y7O0FBRUQsQUFBTSxhQUEwQixnQkFBUSxBQUFnQixpQkFFdkQ7QUFFRCxlQUFlLEFBQTJCLEtBQUUsQUFBYSxPQUFFLEFBQVc7QUFDcEUsQUFBRSxBQUFDLFFBQUMsQUFBRyxlQUFZLEFBQVcsQUFBQyxhQUFDLEFBQUM7QUFDL0IsQUFBRSxBQUFDLFlBQUMsQUFBRyxJQUFDLEFBQUssVUFBSyxBQUFTLEFBQUMsV0FBQyxBQUFDO0FBQzVCLEFBQU0sbUJBQUMsQUFBRyxJQUFDLEFBQUssTUFBQyxBQUFLLE9BQUUsQUFBRyxBQUFDLEtBQUMsQUFBTSxBQUFDLEFBQ3RDO0FBQUM7QUFFRCxZQUFJLEFBQUcsTUFBRyxJQUFJLEFBQVcsWUFBQyxBQUFHLEFBQUMsQUFBQztBQUUvQixBQUFHLEFBQUMsQUFBQyxlQUFFLEFBQUssUUFBRyxBQUFHLEtBQUUsQUFBSyxBQUFFLFNBQUUsQUFBQztBQUM1QixBQUFHLGdCQUFDLEFBQUssQUFBQyxTQUFJLEFBQUcsSUFBQyxBQUFLLEFBQUMsQUFBQyxBQUMzQjtBQUFDO0FBRUQsQUFBTSxlQUFDLEFBQUcsSUFBQyxBQUFNLEFBQUMsQUFDcEI7QUFBQztBQUVELEFBQU0sV0FBQyxBQUFJLEFBQUMsQUFDZDtBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBDb21waWxlVGltZVByb2dyYW0sIFJlY2FzdCwgVk1IYW5kbGUgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgREVCVUcgfSBmcm9tIFwiQGdsaW1tZXIvbG9jYWwtZGVidWctZmxhZ3NcIjtcbmltcG9ydCB7IENvbnN0YW50cywgV3JpdGVPbmx5Q29uc3RhbnRzLCBSdW50aW1lQ29uc3RhbnRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT3Bjb2RlIH0gZnJvbSAnLi9vcGNvZGUnO1xuXG5lbnVtIFRhYmxlU2xvdFN0YXRlIHtcbiAgQWxsb2NhdGVkLFxuICBGcmVlZCxcbiAgUHVyZ2VkLFxuICBQb2ludGVyXG59XG5cbmNvbnN0IEVOVFJZX1NJWkUgPSA0O1xuY29uc3QgU0laRV9PRkZTRVQgPSAxO1xuY29uc3QgU0NPUEVTSVpFX09GRlNFVCA9IDI7XG5jb25zdCBTVEFURV9PRkZTRVQgPSAzO1xuXG4vKipcbiAqIFRoZSBIZWFwIGlzIHJlc3BvbnNpYmxlIGZvciBkeW5hbWljYWxseSBhbGxvY2F0aW5nXG4gKiBtZW1vcnkgaW4gd2hpY2ggd2UgcmVhZC93cml0ZSB0aGUgVk0ncyBpbnN0cnVjdGlvbnNcbiAqIGZyb20vdG8uIFdoZW4gd2UgbWFsbG9jIHdlIHBhc3Mgb3V0IGEgVk1IYW5kbGUsIHdoaWNoXG4gKiBpcyB1c2VkIGFzIGFuIGluZGlyZWN0IHdheSBvZiBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBkdXJpbmdcbiAqIGV4ZWN1dGlvbiBvZiB0aGUgVk0uIEludGVybmFsbHkgd2UgdHJhY2sgdGhlIGRpZmZlcmVudFxuICogcmVnaW9ucyBvZiB0aGUgbWVtb3J5IGluIGFuIGludCBhcnJheSBrbm93biBhcyB0aGUgdGFibGUuXG4gKlxuICogVGhlIHRhYmxlIGhhcyB0aGUgZm9sbG93aW5nIGxheW91dDpcbiAqXG4gKiB8IC4uLiB8ICAgICAgICAgICB0YWJsZSBlbnRyeSAgICAgICAgICB8XG4gKiB8IC4uLiB8IGhwIHwgc2l6ZSB8IHNjb3BlIHNpemUgfCBzdGF0ZSB8XG4gKiB8IC4uLiB8IDAgIHwgMTIyICB8ICAgICAgMyAgICAgfCAgIDAgICB8XG4gKiAgaGFuZGxlIF4gICAgIHwgICAgICAgICAgfCAgICAgICAgIF4gcmVnaW9uIHN0YXRlIChhbGxvY2F0ZWQsIGZyZWVkLCBwdXJnZWQpXG4gKiAgIHJlZ2lvbiBzaXplIF4gICAgICAgICAgfFxuICogICAgICAgIG51bWJlciBvZiBzeW1ib2xzIF5cbiAqXG4gKiBXaXRoIHRoaXMgaW5mb3JtYXRpb24gd2UgZWZmZWN0aXZlbHkgaGF2ZSB0aGUgYWJpbGl0eSB0b1xuICogY29udHJvbCB3aGVuIHdlIHdhbnQgdG8gZnJlZSBtZW1vcnkuIFRoYXQgYmVpbmcgc2FpZCB5b3VcbiAqIGNhbiBub3QgZnJlZSBkdXJpbmcgZXhlY3V0aW9uIGFzIHJhdyBhZGRyZXNzIGFyZSBvbmx5XG4gKiB2YWxpZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbi4gVGhpcyBtZWFucyB5b3UgY2Fubm90IGNsb3NlXG4gKiBvdmVyIHRoZW0gYXMgeW91IHdpbGwgaGF2ZSBhIGJhZCBtZW1vcnkgYWNjZXNzIGV4Y2VwdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEhlYXAge1xuICBwcml2YXRlIGhlYXA6IFVpbnQxNkFycmF5IHwgQXJyYXk8bnVtYmVyPjtcbiAgcHJpdmF0ZSB0YWJsZTogbnVtYmVyW107XG4gIHByaXZhdGUgb2Zmc2V0ID0gMDtcbiAgcHJpdmF0ZSBoYW5kbGUgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHNlcmlhbGl6ZWRIZWFwPzogeyBidWZmZXI6IEFycmF5QnVmZmVyLCB0YWJsZTogbnVtYmVyW10sIGhhbmRsZTogbnVtYmVyIH0pIHtcbiAgICBpZiAoc2VyaWFsaXplZEhlYXApIHtcbiAgICAgIGxldCB7IGJ1ZmZlciwgdGFibGUsIGhhbmRsZSB9ID0gc2VyaWFsaXplZEhlYXA7XG4gICAgICB0aGlzLmhlYXAgPSBuZXcgVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5oZWFwLmxlbmd0aDtcbiAgICAgIHRoaXMuaGFuZGxlID0gaGFuZGxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIFVpbnQxNkFycmF5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmhlYXAgPSBuZXcgVWludDE2QXJyYXkoMHgxMDAwMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRklYTUUgcmVtb3ZlIG9uY2Ugd2UgZHJvcCBJRTlcbiAgICAgICAgdGhpcy5oZWFwID0gbmV3IEFycmF5KDB4MTAwMDAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGUgPSBbXTtcbiAgICB9XG4gIH1cblxuICBwdXNoKGl0ZW06IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaGVhcFt0aGlzLm9mZnNldCsrXSA9IGl0ZW07XG4gIH1cblxuICBnZXRieWFkZHIoYWRkcmVzczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5oZWFwW2FkZHJlc3NdO1xuICB9XG5cbiAgc2V0YnlhZGRyKGFkZHJlc3M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuaGVhcFthZGRyZXNzXSA9IHZhbHVlO1xuICB9XG5cbiAgbWFsbG9jKCk6IFZNSGFuZGxlIHtcbiAgICB0aGlzLnRhYmxlLnB1c2godGhpcy5vZmZzZXQsIDAsIDAsIDApO1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZTtcbiAgICB0aGlzLmhhbmRsZSArPSBFTlRSWV9TSVpFO1xuICAgIHJldHVybiBoYW5kbGUgYXMgUmVjYXN0PG51bWJlciwgVk1IYW5kbGU+O1xuICB9XG5cbiAgZmluaXNoTWFsbG9jKGhhbmRsZTogVk1IYW5kbGUsIHNjb3BlU2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IHN0YXJ0ID0gdGhpcy50YWJsZVtoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+XTtcbiAgICBsZXQgZmluaXNoID0gdGhpcy5vZmZzZXQ7XG4gICAgdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTSVpFX09GRlNFVF0gPSBmaW5pc2ggLSBzdGFydDtcbiAgICB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNDT1BFU0laRV9PRkZTRVRdID0gc2NvcGVTaXplO1xuICB9XG5cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIC8vIEl0IGlzIGlsbGVnYWwgdG8gY2xvc2Ugb3ZlciB0aGlzIGFkZHJlc3MsIGFzIGNvbXBhY3Rpb25cbiAgLy8gbWF5IG1vdmUgaXQuIEhvd2V2ZXIsIGl0IGlzIGxlZ2FsIHRvIHVzZSB0aGlzIGFkZHJlc3NcbiAgLy8gbXVsdGlwbGUgdGltZXMgYmV0d2VlbiBjb21wYWN0aW9ucy5cbiAgZ2V0YWRkcihoYW5kbGU6IFZNSGFuZGxlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVtoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+XTtcbiAgfVxuXG4gIGdldGhhbmRsZShhZGRyZXNzOiBudW1iZXIpOiBWTUhhbmRsZSB7XG4gICAgdGhpcy50YWJsZS5wdXNoKGFkZHJlc3MsIDAsIDAsIFRhYmxlU2xvdFN0YXRlLlBvaW50ZXIpO1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZTtcbiAgICB0aGlzLmhhbmRsZSArPSBFTlRSWV9TSVpFO1xuICAgIHJldHVybiBoYW5kbGUgYXMgUmVjYXN0PG51bWJlciwgVk1IYW5kbGU+O1xuICB9XG5cbiAgc2l6ZW9mKGhhbmRsZTogVk1IYW5kbGUpOiBudW1iZXIge1xuICAgIGlmIChERUJVRykge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0laRV9PRkZTRVRdO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBzY29wZXNpemVvZihoYW5kbGU6IFZNSGFuZGxlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTQ09QRVNJWkVfT0ZGU0VUXTtcbiAgfVxuXG4gIGZyZWUoaGFuZGxlOiBWTUhhbmRsZSk6IHZvaWQge1xuICAgIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU1RBVEVfT0ZGU0VUXSA9IDE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGhlYXAgdXNlcyB0aGUgW01hcmstQ29tcGFjdCBBbGdvcml0aG1dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01hcmstY29tcGFjdF9hbGdvcml0aG0pIHRvIHNoaWZ0XG4gICAqIHJlYWNoYWJsZSBtZW1vcnkgdG8gdGhlIGJvdHRvbSBvZiB0aGUgaGVhcCBhbmQgZnJlZWFibGVcbiAgICogbWVtb3J5IHRvIHRoZSB0b3Agb2YgdGhlIGhlYXAuIFdoZW4gd2UgaGF2ZSBzaGlmdGVkIGFsbFxuICAgKiB0aGUgcmVhY2hhYmxlIG1lbW9yeSB0byB0aGUgdG9wIG9mIHRoZSBoZWFwLCB3ZSBtb3ZlIHRoZVxuICAgKiBvZmZzZXQgdG8gdGhlIG5leHQgZnJlZSBwb3NpdGlvbi5cbiAgICovXG4gIGNvbXBhY3QoKTogdm9pZCB7XG4gICAgbGV0IGNvbXBhY3RlZFNpemUgPSAwO1xuICAgIGxldCB7IHRhYmxlLCB0YWJsZTogeyBsZW5ndGggfSwgaGVhcCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGk9MDsgaTxsZW5ndGg7IGkrPUVOVFJZX1NJWkUpIHtcbiAgICAgIGxldCBvZmZzZXQgPSB0YWJsZVtpXTtcbiAgICAgIGxldCBzaXplID0gdGFibGVbaSArIFNJWkVfT0ZGU0VUXTtcbiAgICAgIGxldCBzdGF0ZSA9IHRhYmxlW2kgKyBTVEFURV9PRkZTRVRdO1xuXG4gICAgICBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLlB1cmdlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLkZyZWVkKSB7XG4gICAgICAgIC8vIHRyYW5zaXRpb24gdG8gXCJhbHJlYWR5IGZyZWVkXCIgYWthIFwicHVyZ2VkXCJcbiAgICAgICAgLy8gYSBnb29kIGltcHJvdmVtZW50IHdvdWxkIGJlIHRvIHJldXNlXG4gICAgICAgIC8vIHRoZXNlIHNsb3RzXG4gICAgICAgIHRhYmxlW2kgKyBTVEFURV9PRkZTRVRdID0gVGFibGVTbG90U3RhdGUuUHVyZ2VkO1xuICAgICAgICBjb21wYWN0ZWRTaXplICs9IHNpemU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5BbGxvY2F0ZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaj1vZmZzZXQ7IGo8PWkrc2l6ZTsgaisrKSB7XG4gICAgICAgICAgaGVhcFtqIC0gY29tcGFjdGVkU2l6ZV0gPSBoZWFwW2pdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVbaV0gPSBvZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuUG9pbnRlcikge1xuICAgICAgICB0YWJsZVtpXSA9IG9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vZmZzZXQgPSB0aGlzLm9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gIH1cblxuICBjYXB0dXJlKCkge1xuICAgIC8vIE9ubHkgY2FsbGVkIGluIGVhZ2VyIG1vZGVcbiAgICBsZXQgYnVmZmVyID0gc2xpY2UodGhpcy5oZWFwLCAwLCB0aGlzLm9mZnNldCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhbmRsZTogdGhpcy5oYW5kbGUsXG4gICAgICB0YWJsZTogdGhpcy50YWJsZSxcbiAgICAgIGJ1ZmZlcjogYnVmZmVyIGFzIEFycmF5QnVmZmVyXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV3JpdGVPbmx5UHJvZ3JhbSBpbXBsZW1lbnRzIENvbXBpbGVUaW1lUHJvZ3JhbSB7XG4gIFtrZXk6IG51bWJlcl06IG5ldmVyO1xuXG4gIHByaXZhdGUgX29wY29kZTogT3Bjb2RlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb25zdGFudHM6IFdyaXRlT25seUNvbnN0YW50cyA9IG5ldyBXcml0ZU9ubHlDb25zdGFudHMoKSwgcHVibGljIGhlYXAgPSBuZXcgSGVhcCgpKSB7XG4gICAgdGhpcy5fb3Bjb2RlID0gbmV3IE9wY29kZSh0aGlzLmhlYXApO1xuICB9XG5cbiAgb3Bjb2RlKG9mZnNldDogbnVtYmVyKTogT3Bjb2RlIHtcbiAgICB0aGlzLl9vcGNvZGUub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLl9vcGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVQcm9ncmFtPFNwZWNpZmllcj4ge1xuICBba2V5OiBudW1iZXJdOiBuZXZlcjtcblxuICBwcml2YXRlIF9vcGNvZGU6IE9wY29kZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uc3RhbnRzOiBSdW50aW1lQ29uc3RhbnRzPFNwZWNpZmllcj4sIHB1YmxpYyBoZWFwOiBIZWFwKSB7XG4gICAgdGhpcy5fb3Bjb2RlID0gbmV3IE9wY29kZSh0aGlzLmhlYXApO1xuICB9XG5cbiAgb3Bjb2RlKG9mZnNldDogbnVtYmVyKTogT3Bjb2RlIHtcbiAgICB0aGlzLl9vcGNvZGUub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLl9vcGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW08U3BlY2lmaWVyPiBleHRlbmRzIFdyaXRlT25seVByb2dyYW0ge1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM8U3BlY2lmaWVyPjtcbn1cblxuZnVuY3Rpb24gc2xpY2UoYXJyOiBVaW50MTZBcnJheSB8IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICBpZiAoYXJyIGluc3RhbmNlb2YgVWludDE2QXJyYXkpIHtcbiAgICBpZiAoYXJyLnNsaWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCkuYnVmZmVyO1xuICAgIH1cblxuICAgIGxldCByZXQgPSBuZXcgVWludDE2QXJyYXkoZW5kKTtcblxuICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykge1xuICAgICAgcmV0W3N0YXJ0XSAgPSBhcnJbc3RhcnRdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQuYnVmZmVyO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0= |
@@ -23,10 +23,23 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } | ||
this.floats = []; | ||
this.negatives = []; | ||
} | ||
WriteOnlyConstants.prototype.float = function float(_float) { | ||
return this.floats.push(_float); | ||
var index = this.floats.indexOf(_float); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.floats.push(_float) - 1; | ||
}; | ||
WriteOnlyConstants.prototype.negative = function negative(_negative) { | ||
return this.negatives.push(_negative); | ||
}; | ||
WriteOnlyConstants.prototype.string = function string(value) { | ||
return this.strings.push(value); | ||
var index = this.strings.indexOf(value); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.strings.push(value) - 1; | ||
}; | ||
@@ -43,7 +56,15 @@ | ||
WriteOnlyConstants.prototype.array = function array(values) { | ||
return this.arrays.push(values); | ||
var index = this.arrays.indexOf(values); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.arrays.push(values) - 1; | ||
}; | ||
WriteOnlyConstants.prototype.table = function table(t) { | ||
return this.tables.push(t); | ||
var index = this.tables.indexOf(t); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.tables.push(t) - 1; | ||
}; | ||
@@ -57,3 +78,7 @@ | ||
WriteOnlyConstants.prototype.serializable = function serializable(value) { | ||
return this.serializables.push(value); | ||
var index = this.serializables.indexOf(value); | ||
if (index > -1) { | ||
return index; | ||
} | ||
return this.serializables.push(value) - 1; | ||
}; | ||
@@ -68,3 +93,4 @@ | ||
serializables: this.serializables, | ||
floats: this.floats | ||
floats: this.floats, | ||
negatives: this.negatives | ||
}; | ||
@@ -89,2 +115,3 @@ }; | ||
this.floats = pool.floats; | ||
this.negatives = pool.negatives; | ||
this.resolved = this.handles.map(function () { | ||
@@ -98,7 +125,11 @@ return UNRESOLVED; | ||
RuntimeConstants.prototype.getFloat = function getFloat(value) { | ||
return this.floats[value - 1]; | ||
return this.floats[value]; | ||
}; | ||
RuntimeConstants.prototype.getNegative = function getNegative(value) { | ||
return this.negatives[value - 1]; | ||
}; | ||
RuntimeConstants.prototype.getString = function getString(value) { | ||
return this.strings[value - 1]; | ||
return this.strings[value]; | ||
}; | ||
@@ -117,7 +148,7 @@ | ||
RuntimeConstants.prototype.getArray = function getArray(value) { | ||
return this.arrays[value - 1]; | ||
return this.arrays[value]; | ||
}; | ||
RuntimeConstants.prototype.getSymbolTable = function getSymbolTable(value) { | ||
return this.tables[value - 1]; | ||
return this.tables[value]; | ||
}; | ||
@@ -136,3 +167,3 @@ | ||
RuntimeConstants.prototype.getSerializable = function getSerializable(s) { | ||
return this.serializables[s - 1]; | ||
return this.serializables[s]; | ||
}; | ||
@@ -157,2 +188,4 @@ | ||
_this.serializables = pool.serializables; | ||
_this.floats = pool.floats; | ||
_this.negatives = pool.negatives; | ||
_this.resolved = _this.handles.map(function () { | ||
@@ -167,4 +200,12 @@ return UNRESOLVED; | ||
Constants.prototype.getFloat = function getFloat(value) { | ||
return this.floats[value - 1]; | ||
}; | ||
Constants.prototype.getNegative = function getNegative(value) { | ||
return this.negatives[value - 1]; | ||
}; | ||
Constants.prototype.getString = function getString(value) { | ||
return this.strings[value - 1]; | ||
return this.strings[value]; | ||
}; | ||
@@ -183,7 +224,7 @@ | ||
Constants.prototype.getArray = function getArray(value) { | ||
return this.arrays[value - 1]; | ||
return this.arrays[value]; | ||
}; | ||
Constants.prototype.getSymbolTable = function getSymbolTable(value) { | ||
return this.tables[value - 1]; | ||
return this.tables[value]; | ||
}; | ||
@@ -202,3 +243,3 @@ | ||
Constants.prototype.getSerializable = function getSerializable(s) { | ||
return this.serializables[s - 1]; | ||
return this.serializables[s]; | ||
}; | ||
@@ -233,2 +274,2 @@ | ||
export { LazyConstants }; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvcHJvZ3JhbS9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBR0EsSUFBTSxBQUFVLGFBQUcsQUFBRSxBQUFDLEFBa0J0QixBQUFNOztJQUFOOztBQUNFLEFBQWlCOztBQUVQO2FBQU8sVUFBYSxBQUFFLEFBQUMsQUFDdkI7YUFBTSxTQUFlLEFBQUUsQUFBQyxBQUN4QjthQUFNLFNBQWtCLEFBQUUsQUFBQyxBQUMzQjthQUFPLFVBQWEsQUFBRSxBQUFDLEFBQ3ZCO2FBQWEsZ0JBQWEsQUFBRSxBQUFDLEFBQzdCO2FBQVEsV0FBYSxBQUFFLEFBQUMsQUFDeEI7YUFBTSxTQUFhLEFBQUUsQUFBQyxBQStDbEMsQUFBQztBQTdDQyxBQUFLOzt3REFBQyxBQUFhLFFBQ2pCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQyxBQUNqQyxBQUFDO0FBRUQsQUFBTTs7MERBQUMsQUFBYSxPQUNsQixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDbEMsQUFBQztBQUVELEFBQVc7O29FQUFDLEFBQWlCLFNBQzNCO1lBQUksQUFBUSxXQUFhLElBQUksQUFBSyxNQUFDLEFBQU8sUUFBQyxBQUFNLEFBQUMsQUFBQyxBQUVuRCxBQUFHLEFBQUM7YUFBQyxJQUFJLEFBQUMsSUFBRyxBQUFDLEdBQUUsQUFBQyxJQUFHLEFBQU8sUUFBQyxBQUFNLFFBQUUsQUFBQyxBQUFFLEtBQUUsQUFBQyxBQUN4QyxBQUFRO3FCQUFDLEFBQUMsQUFBQyxLQUFHLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBTyxRQUFDLEFBQUMsQUFBQyxBQUFDLEFBQUMsQUFDeEMsQUFBQztBQUVELEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBSyxN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QUFBSyxRQUFHLEFBQUMsSUFBRyxBQUFDLEFBQUMsQUFDbEI7WUFBSSxBQUFRLFdBQUcsQUFBSSxLQUFDLEFBQVEsU0FBQyxBQUFLLEFBQUMsQUFBQyxBQUVwQyxBQUFFLEFBQUM7WUFBQyxBQUFRLGFBQUssQUFBVSxBQUFDLFlBQUMsQUFBQyxBQUM1QjtnQkFBSSxBQUFNLFNBQUcsQUFBSSxLQUFDLEFBQU8sUUFBQyxBQUFLLEFBQUMsQUFBQyxBQUNqQyxBQUFRO3VCQUFHLEFBQUksS0FBQyxBQUFRLFNBQUMsQUFBSyxBQUFDLFNBQUcsQUFBSSxLQUFDLEFBQVEsU0FBQyxBQUFPLFFBQUMsQUFBTSxBQUFDLEFBQUMsQUFDbEUsQUFBQztBQUVELEFBQU07ZUFBQyxBQUFhLEFBQUMsQUFDdkIsQUFBQztBQUVELEFBQWU7O21FQUFJLEFBQVMsR0FDMUIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFhLGNBQUMsQUFBQyxJQUFHLEFBQUMsQUFBTSxBQUFDLEFBQ3hDLEFBQUMsQUFDRjtBQUVELEFBQU07OztFQXpEb0MsQUFBa0IsQUFDMUQ7O0lBd0R5Qjs7Ozs7OzZFQUNqQjs7ZUFBTSxTQUFhLEFBQUUsQUFBQyxBQVNoQyxBQUFDOztBQVBDLEFBQVE7O3lEQUFJLEFBQWEsT0FDdkIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBSyxRQUFHLEFBQUMsQUFBTSxBQUFDLEFBQ3JDLEFBQUM7QUFFRCxBQUFLOzttREFBQyxBQUFhLFFBQ2pCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQyxBQUNqQyxBQUFDLEFBQ0Y7Ozs7RUFWRCxBQUFtQyxBQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFJ1bnRpbWVSZXNvbHZlciB9IGZyb20gXCJAZ2xpbW1lci9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBDb21waWxlVGltZUNvbnN0YW50cyB9IGZyb20gXCJAZ2xpbW1lci9vcGNvZGUtY29tcGlsZXJcIjtcblxuY29uc3QgVU5SRVNPTFZFRCA9IHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0YW50UG9vbCB7XG4gIHN0cmluZ3M6IHN0cmluZ1tdO1xuICBhcnJheXM6IG51bWJlcltdW107XG4gIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgaGFuZGxlczogbnVtYmVyW107XG4gIHNlcmlhbGl6YWJsZXM6IE9wYXF1ZVtdO1xuICBmbG9hdHM6IG51bWJlcltdO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBQcmltaXRpdmVUeXBlIHtcbiAgTlVNQkVSICAgICAgICAgID0gMGIwMCxcbiAgRkxPQVQgICAgICAgICAgID0gMGIwMSxcbiAgU1RSSU5HICAgICAgICAgID0gMGIxMCxcbiAgQk9PTEVBTl9PUl9WT0lEID0gMGIxMVxufVxuXG5leHBvcnQgY2xhc3MgV3JpdGVPbmx5Q29uc3RhbnRzIGltcGxlbWVudHMgQ29tcGlsZVRpbWVDb25zdGFudHMge1xuICAvLyBgMGAgbWVhbnMgTlVMTFxuXG4gIHByb3RlY3RlZCBzdHJpbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBwcm90ZWN0ZWQgYXJyYXlzOiBudW1iZXJbXVtdID0gW107XG4gIHByb3RlY3RlZCB0YWJsZXM6IFN5bWJvbFRhYmxlW10gPSBbXTtcbiAgcHJvdGVjdGVkIGhhbmRsZXM6IG51bWJlcltdID0gW107XG4gIHByb3RlY3RlZCBzZXJpYWxpemFibGVzOiBPcGFxdWVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgcmVzb2x2ZWQ6IE9wYXF1ZVtdID0gW107XG4gIHByb3RlY3RlZCBmbG9hdHM6IG51bWJlcltdID0gW107XG5cbiAgZmxvYXQoZmxvYXQ6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmZsb2F0cy5wdXNoKGZsb2F0KTtcbiAgfVxuXG4gIHN0cmluZyh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzLnB1c2godmFsdWUpO1xuICB9XG5cbiAgc3RyaW5nQXJyYXkoc3RyaW5nczogc3RyaW5nW10pOiBudW1iZXIge1xuICAgIGxldCBfc3RyaW5nczogbnVtYmVyW10gPSBuZXcgQXJyYXkoc3RyaW5ncy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBfc3RyaW5nc1tpXSA9IHRoaXMuc3RyaW5nKHN0cmluZ3NbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFycmF5KF9zdHJpbmdzKTtcbiAgfVxuXG4gIGFycmF5KHZhbHVlczogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFycmF5cy5wdXNoKHZhbHVlcyk7XG4gIH1cblxuICB0YWJsZSh0OiBTeW1ib2xUYWJsZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzLnB1c2godCk7XG4gIH1cblxuICBoYW5kbGUoaGFuZGxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRoaXMucmVzb2x2ZWQucHVzaChVTlJFU09MVkVEKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVzLnB1c2goaGFuZGxlKTtcbiAgfVxuXG4gIHNlcmlhbGl6YWJsZSh2YWx1ZTogT3BhcXVlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemFibGVzLnB1c2godmFsdWUpO1xuICB9XG5cbiAgdG9Qb29sKCk6IENvbnN0YW50UG9vbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmluZ3M6IHRoaXMuc3RyaW5ncyxcbiAgICAgIGFycmF5czogdGhpcy5hcnJheXMsXG4gICAgICB0YWJsZXM6IHRoaXMudGFibGVzLFxuICAgICAgaGFuZGxlczogdGhpcy5oYW5kbGVzLFxuICAgICAgc2VyaWFsaXphYmxlczogdGhpcy5zZXJpYWxpemFibGVzLFxuICAgICAgZmxvYXRzOiB0aGlzLmZsb2F0c1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHM8U3BlY2lmaWVyPiB7XG4gIHByb3RlY3RlZCBzdHJpbmdzOiBzdHJpbmdbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXTtcbiAgcHJvdGVjdGVkIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgcHJvdGVjdGVkIGhhbmRsZXM6IG51bWJlcltdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW107XG4gIHByb3RlY3RlZCByZXNvbHZlZDogT3BhcXVlW107XG4gIHByb3RlY3RlZCBmbG9hdHM6IG51bWJlcltdO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZXNvbHZlcjogUnVudGltZVJlc29sdmVyPFNwZWNpZmllcj4sIHBvb2w6IENvbnN0YW50UG9vbCkge1xuICAgIHRoaXMuc3RyaW5ncyA9IHBvb2wuc3RyaW5ncztcbiAgICB0aGlzLmFycmF5cyA9IHBvb2wuYXJyYXlzO1xuICAgIHRoaXMudGFibGVzID0gcG9vbC50YWJsZXM7XG4gICAgdGhpcy5oYW5kbGVzID0gcG9vbC5oYW5kbGVzO1xuICAgIHRoaXMuc2VyaWFsaXphYmxlcyA9IHBvb2wuc2VyaWFsaXphYmxlcztcbiAgICB0aGlzLmZsb2F0cyA9IHBvb2wuZmxvYXRzO1xuICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICB9XG5cbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBnZXRGbG9hdCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdHNbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN0cmluZyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmdBcnJheSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0QXJyYXkodmFsdWUpO1xuICAgIGxldCBfbmFtZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IG5hbWVzW2ldO1xuICAgICAgX25hbWVzW2ldID0gdGhpcy5nZXRTdHJpbmcobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9uYW1lcztcbiAgfVxuXG4gIGdldEFycmF5KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXlzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTeW1ib2xUYWJsZTxUIGV4dGVuZHMgU3ltYm9sVGFibGU+KHZhbHVlOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZXNbdmFsdWUgLSAxXSBhcyBUO1xuICB9XG5cbiAgcmVzb2x2ZUhhbmRsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICBsZXQgaW5kZXggPSBzIC0gMTtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XTtcblxuICAgIGlmIChyZXNvbHZlZCA9PT0gVU5SRVNPTFZFRCkge1xuICAgICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlc1tpbmRleF07XG4gICAgICByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkIGFzIFQ7XG4gIH1cblxuICBnZXRTZXJpYWxpemFibGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlc1tzIC0gMV0gYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzPFNwZWNpZmllcj4gZXh0ZW5kcyBXcml0ZU9ubHlDb25zdGFudHMge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sPzogQ29uc3RhbnRQb29sKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmIChwb29sKSB7XG4gICAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgICB0aGlzLmFycmF5cyA9IHBvb2wuYXJyYXlzO1xuICAgICAgdGhpcy50YWJsZXMgPSBwb29sLnRhYmxlcztcbiAgICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICAgIHRoaXMuc2VyaWFsaXphYmxlcyA9IHBvb2wuc2VyaWFsaXphYmxlcztcbiAgICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGAwYCBtZWFucyBOVUxMXG5cbiAgZ2V0U3RyaW5nKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ3NbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN0cmluZ0FycmF5KHZhbHVlOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gICAgbGV0IG5hbWVzID0gdGhpcy5nZXRBcnJheSh2YWx1ZSk7XG4gICAgbGV0IF9uYW1lczogc3RyaW5nW10gPSBuZXcgQXJyYXkobmFtZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBuID0gbmFtZXNbaV07XG4gICAgICBfbmFtZXNbaV0gPSB0aGlzLmdldFN0cmluZyhuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX25hbWVzO1xuICB9XG5cbiAgZ2V0QXJyYXkodmFsdWU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5hcnJheXNbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN5bWJvbFRhYmxlPFQgZXh0ZW5kcyBTeW1ib2xUYWJsZT4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlc1t2YWx1ZSAtIDFdIGFzIFQ7XG4gIH1cblxuICByZXNvbHZlSGFuZGxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIGxldCBpbmRleCA9IHMgLSAxO1xuICAgIGxldCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdO1xuXG4gICAgaWYgKHJlc29sdmVkID09PSBVTlJFU09MVkVEKSB7XG4gICAgICBsZXQgaGFuZGxlID0gdGhpcy5oYW5kbGVzW2luZGV4XTtcbiAgICAgIHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF0gPSB0aGlzLnJlc29sdmVyLnJlc29sdmUoaGFuZGxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQgYXMgVDtcbiAgfVxuXG4gIGdldFNlcmlhbGl6YWJsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemFibGVzW3MgLSAxXSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYXp5Q29uc3RhbnRzIGV4dGVuZHMgQ29uc3RhbnRzPE9wYXF1ZT4ge1xuICBwcml2YXRlIG90aGVyczogT3BhcXVlW10gPSBbXTtcblxuICBnZXRPdGhlcjxUPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJzW3ZhbHVlIC0gMV0gYXMgVDtcbiAgfVxuXG4gIG90aGVyKG90aGVyOiBPcGFxdWUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm90aGVycy5wdXNoKG90aGVyKTtcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvcHJvZ3JhbS9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUEsSUFBTSxBQUFVLGFBQUcsQUFBRSxBQUFDLEFBb0J0QixBQUFNOztJQUFOOztBQUNFLEFBQWlCOztBQUVQO2FBQU8sVUFBYSxBQUFFLEFBQUMsQUFDdkI7YUFBTSxTQUFlLEFBQUUsQUFBQyxBQUN4QjthQUFNLFNBQWtCLEFBQUUsQUFBQyxBQUMzQjthQUFPLFVBQWEsQUFBRSxBQUFDLEFBQ3ZCO2FBQWEsZ0JBQWEsQUFBRSxBQUFDLEFBQzdCO2FBQVEsV0FBYSxBQUFFLEFBQUMsQUFDeEI7YUFBTSxTQUFhLEFBQUUsQUFBQyxBQUN0QjthQUFTLFlBQWEsQUFBRSxBQUFDLEFBa0ZyQyxBQUFDO0FBaEZDLEFBQUs7O3dEQUFDLEFBQWEsUUFDakI7WUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFPLFFBQUMsQUFBSyxBQUFDLEFBQUMsQUFFdkMsQUFBRSxBQUFDO1lBQUMsQUFBSyxRQUFHLENBQUMsQUFBQyxBQUFDLEdBQUMsQUFBQyxBQUNmLEFBQU07bUJBQUMsQUFBSyxBQUFDLEFBQ2YsQUFBQztBQUVELEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsVUFBRyxBQUFDLEFBQUMsQUFDckMsQUFBQztBQUVELEFBQVE7OzhEQUFDLEFBQWdCLFdBQ3ZCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUksS0FBQyxBQUFRLEFBQUMsQUFBQyxBQUN2QyxBQUFDO0FBRUQsQUFBTTs7MERBQUMsQUFBYSxPQUNsQjtZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBTyxRQUFDLEFBQU8sUUFBQyxBQUFLLEFBQUMsQUFBQyxBQUV4QyxBQUFFLEFBQUM7WUFBQyxB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OzZFQUNqQjs7ZUFBTSxTQUFhLEFBQUUsQUFBQyxBQVNoQyxBQUFDOztBQVBDLEFBQVE7O3lEQUFJLEFBQWEsT0FDdkIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBSyxRQUFHLEFBQUMsQUFBTSxBQUFDLEFBQ3JDLEFBQUM7QUFFRCxBQUFLOzttREFBQyxBQUFhLFFBQ2pCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQyxBQUNqQyxBQUFDLEFBQ0Y7Ozs7RUFWRCxBQUFtQyxBQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFJ1bnRpbWVSZXNvbHZlciwgQ29tcGlsZVRpbWVDb25zdGFudHMgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuXG5jb25zdCBVTlJFU09MVkVEID0ge307XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RhbnRQb29sIHtcbiAgc3RyaW5nczogc3RyaW5nW107XG4gIGFycmF5czogbnVtYmVyW11bXTtcbiAgdGFibGVzOiBTeW1ib2xUYWJsZVtdO1xuICBoYW5kbGVzOiBudW1iZXJbXTtcbiAgc2VyaWFsaXphYmxlczogT3BhcXVlW107XG4gIGZsb2F0czogbnVtYmVyW107XG4gIG5lZ2F0aXZlczogbnVtYmVyW107XG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFByaW1pdGl2ZVR5cGUge1xuICBOVU1CRVIgICAgICAgICAgPSAwYjAwMCxcbiAgRkxPQVQgICAgICAgICAgID0gMGIwMDEsXG4gIFNUUklORyAgICAgICAgICA9IDBiMDEwLFxuICBCT09MRUFOX09SX1ZPSUQgPSAwYjAxMSxcbiAgTkVHQVRJVkUgICAgICAgID0gMGIxMDBcbn1cblxuZXhwb3J0IGNsYXNzIFdyaXRlT25seUNvbnN0YW50cyBpbXBsZW1lbnRzIENvbXBpbGVUaW1lQ29uc3RhbnRzIHtcbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBwcm90ZWN0ZWQgc3RyaW5nczogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXSA9IFtdO1xuICBwcm90ZWN0ZWQgdGFibGVzOiBTeW1ib2xUYWJsZVtdID0gW107XG4gIHByb3RlY3RlZCBoYW5kbGVzOiBudW1iZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW10gPSBbXTtcbiAgcHJvdGVjdGVkIHJlc29sdmVkOiBPcGFxdWVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgZmxvYXRzOiBudW1iZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgbmVnYXRpdmVzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZsb2F0KGZsb2F0OiBudW1iZXIpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmZsb2F0cy5pbmRleE9mKGZsb2F0KTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmxvYXRzLnB1c2goZmxvYXQpIC0gMTtcbiAgfVxuXG4gIG5lZ2F0aXZlKG5lZ2F0aXZlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZXMucHVzaChuZWdhdGl2ZSk7XG4gIH1cblxuICBzdHJpbmcodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5zdHJpbmdzLmluZGV4T2YodmFsdWUpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzLnB1c2godmFsdWUpIC0gMTtcbiAgfVxuXG4gIHN0cmluZ0FycmF5KHN0cmluZ3M6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBsZXQgX3N0cmluZ3M6IG51bWJlcltdID0gbmV3IEFycmF5KHN0cmluZ3MubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgX3N0cmluZ3NbaV0gPSB0aGlzLnN0cmluZyhzdHJpbmdzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJheShfc3RyaW5ncyk7XG4gIH1cblxuICBhcnJheSh2YWx1ZXM6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmFycmF5cy5pbmRleE9mKHZhbHVlcyk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFycmF5cy5wdXNoKHZhbHVlcykgLSAxO1xuICB9XG5cbiAgdGFibGUodDogU3ltYm9sVGFibGUpOiBudW1iZXIge1xuICAgIGxldCBpbmRleCA9IHRoaXMudGFibGVzLmluZGV4T2YodCk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRhYmxlcy5wdXNoKHQpIC0gMTtcbiAgfVxuXG4gIGhhbmRsZShoYW5kbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgdGhpcy5yZXNvbHZlZC5wdXNoKFVOUkVTT0xWRUQpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXMucHVzaChoYW5kbGUpO1xuICB9XG5cbiAgc2VyaWFsaXphYmxlKHZhbHVlOiBPcGFxdWUpOiBudW1iZXIge1xuICAgIGxldCBpbmRleCA9IHRoaXMuc2VyaWFsaXphYmxlcy5pbmRleE9mKHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlcy5wdXNoKHZhbHVlKSAtIDE7XG4gIH1cblxuICB0b1Bvb2woKTogQ29uc3RhbnRQb29sIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RyaW5nczogdGhpcy5zdHJpbmdzLFxuICAgICAgYXJyYXlzOiB0aGlzLmFycmF5cyxcbiAgICAgIHRhYmxlczogdGhpcy50YWJsZXMsXG4gICAgICBoYW5kbGVzOiB0aGlzLmhhbmRsZXMsXG4gICAgICBzZXJpYWxpemFibGVzOiB0aGlzLnNlcmlhbGl6YWJsZXMsXG4gICAgICBmbG9hdHM6IHRoaXMuZmxvYXRzLFxuICAgICAgbmVnYXRpdmVzOiB0aGlzLm5lZ2F0aXZlc1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHM8U3BlY2lmaWVyPiB7XG4gIHByb3RlY3RlZCBzdHJpbmdzOiBzdHJpbmdbXTtcbiAgcHJvdGVjdGVkIGFycmF5czogbnVtYmVyW11bXTtcbiAgcHJvdGVjdGVkIHRhYmxlczogU3ltYm9sVGFibGVbXTtcbiAgcHJvdGVjdGVkIGhhbmRsZXM6IG51bWJlcltdO1xuICBwcm90ZWN0ZWQgc2VyaWFsaXphYmxlczogT3BhcXVlW107XG4gIHByb3RlY3RlZCByZXNvbHZlZDogT3BhcXVlW107XG4gIHByb3RlY3RlZCBmbG9hdHM6IG51bWJlcltdO1xuICBwcm90ZWN0ZWQgbmVnYXRpdmVzOiBudW1iZXJbXTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sOiBDb25zdGFudFBvb2wpIHtcbiAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgdGhpcy5hcnJheXMgPSBwb29sLmFycmF5cztcbiAgICB0aGlzLnRhYmxlcyA9IHBvb2wudGFibGVzO1xuICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICB0aGlzLnNlcmlhbGl6YWJsZXMgPSBwb29sLnNlcmlhbGl6YWJsZXM7XG4gICAgdGhpcy5mbG9hdHMgPSBwb29sLmZsb2F0cztcbiAgICB0aGlzLm5lZ2F0aXZlcyA9IHBvb2wubmVnYXRpdmVzO1xuICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLmhhbmRsZXMubWFwKCgpID0+IFVOUkVTT0xWRUQpO1xuICB9XG5cbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBnZXRGbG9hdCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdHNbdmFsdWVdO1xuICB9XG5cbiAgZ2V0TmVnYXRpdmUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmVzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXRTdHJpbmcodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nc1t2YWx1ZV07XG4gIH1cblxuICBnZXRTdHJpbmdBcnJheSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0QXJyYXkodmFsdWUpO1xuICAgIGxldCBfbmFtZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IG5hbWVzW2ldO1xuICAgICAgX25hbWVzW2ldID0gdGhpcy5nZXRTdHJpbmcobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9uYW1lcztcbiAgfVxuXG4gIGdldEFycmF5KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXlzW3ZhbHVlXTtcbiAgfVxuXG4gIGdldFN5bWJvbFRhYmxlPFQgZXh0ZW5kcyBTeW1ib2xUYWJsZT4odmFsdWU6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlc1t2YWx1ZV0gYXMgVDtcbiAgfVxuXG4gIHJlc29sdmVIYW5kbGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgbGV0IGluZGV4ID0gcyAtIDE7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZFtpbmRleF07XG5cbiAgICBpZiAocmVzb2x2ZWQgPT09IFVOUkVTT0xWRUQpIHtcbiAgICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZXNbaW5kZXhdO1xuICAgICAgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZShoYW5kbGUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlZCBhcyBUO1xuICB9XG5cbiAgZ2V0U2VyaWFsaXphYmxlPFQ+KHM6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YWJsZXNbc10gYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzPFNwZWNpZmllcj4gZXh0ZW5kcyBXcml0ZU9ubHlDb25zdGFudHMge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzb2x2ZXI6IFJ1bnRpbWVSZXNvbHZlcjxTcGVjaWZpZXI+LCBwb29sPzogQ29uc3RhbnRQb29sKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmIChwb29sKSB7XG4gICAgICB0aGlzLnN0cmluZ3MgPSBwb29sLnN0cmluZ3M7XG4gICAgICB0aGlzLmFycmF5cyA9IHBvb2wuYXJyYXlzO1xuICAgICAgdGhpcy50YWJsZXMgPSBwb29sLnRhYmxlcztcbiAgICAgIHRoaXMuaGFuZGxlcyA9IHBvb2wuaGFuZGxlcztcbiAgICAgIHRoaXMuc2VyaWFsaXphYmxlcyA9IHBvb2wuc2VyaWFsaXphYmxlcztcbiAgICAgIHRoaXMuZmxvYXRzID0gcG9vbC5mbG9hdHM7XG4gICAgICB0aGlzLm5lZ2F0aXZlcyA9IHBvb2wubmVnYXRpdmVzO1xuICAgICAgdGhpcy5yZXNvbHZlZCA9IHRoaXMuaGFuZGxlcy5tYXAoKCkgPT4gVU5SRVNPTFZFRCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYDBgIG1lYW5zIE5VTExcbiAgZ2V0RmxvYXQodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRzW3ZhbHVlIC0gMV07XG4gIH1cblxuICBnZXROZWdhdGl2ZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZXNbdmFsdWUgLSAxXTtcbiAgfVxuXG4gIGdldFN0cmluZyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdzW3ZhbHVlXTtcbiAgfVxuXG4gIGdldFN0cmluZ0FycmF5KHZhbHVlOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gICAgbGV0IG5hbWVzID0gdGhpcy5nZXRBcnJheSh2YWx1ZSk7XG4gICAgbGV0IF9uYW1lczogc3RyaW5nW10gPSBuZXcgQXJyYXkobmFtZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBuID0gbmFtZXNbaV07XG4gICAgICBfbmFtZXNbaV0gPSB0aGlzLmdldFN0cmluZyhuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX25hbWVzO1xuICB9XG5cbiAgZ2V0QXJyYXkodmFsdWU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5hcnJheXNbdmFsdWVdO1xuICB9XG5cbiAgZ2V0U3ltYm9sVGFibGU8VCBleHRlbmRzIFN5bWJvbFRhYmxlPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzW3ZhbHVlXSBhcyBUO1xuICB9XG5cbiAgcmVzb2x2ZUhhbmRsZTxUPihzOiBudW1iZXIpOiBUIHtcbiAgICBsZXQgaW5kZXggPSBzIC0gMTtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkW2luZGV4XTtcblxuICAgIGlmIChyZXNvbHZlZCA9PT0gVU5SRVNPTFZFRCkge1xuICAgICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlc1tpbmRleF07XG4gICAgICByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRbaW5kZXhdID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkIGFzIFQ7XG4gIH1cblxuICBnZXRTZXJpYWxpemFibGU8VD4oczogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlc1tzXSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYXp5Q29uc3RhbnRzIGV4dGVuZHMgQ29uc3RhbnRzPE9wYXF1ZT4ge1xuICBwcml2YXRlIG90aGVyczogT3BhcXVlW10gPSBbXTtcblxuICBnZXRPdGhlcjxUPih2YWx1ZTogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJzW3ZhbHVlIC0gMV0gYXMgVDtcbiAgfVxuXG4gIG90aGVyKG90aGVyOiBPcGFxdWUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm90aGVycy5wdXNoKG90aGVyKTtcbiAgfVxufVxuIl19 |
@@ -22,18 +22,49 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } | ||
var STATE_OFFSET = 3; | ||
/** | ||
* The Heap is responsible for dynamically allocating | ||
* memory in which we read/write the VM's instructions | ||
* from/to. When we malloc we pass out a VMHandle, which | ||
* is used as an indirect way of accessing the memory during | ||
* execution of the VM. Internally we track the different | ||
* regions of the memory in an int array known as the table. | ||
* | ||
* The table has the following layout: | ||
* | ||
* | ... | table entry | | ||
* | ... | hp | size | scope size | state | | ||
* | ... | 0 | 122 | 3 | 0 | | ||
* handle ^ | | ^ region state (allocated, freed, purged) | ||
* region size ^ | | ||
* number of symbols ^ | ||
* | ||
* With this information we effectively have the ability to | ||
* control when we want to free memory. That being said you | ||
* can not free during execution as raw address are only | ||
* valid during the execution. This means you cannot close | ||
* over them as you will have a bad memory access exception. | ||
*/ | ||
export var Heap = function () { | ||
function Heap() { | ||
function Heap(serializedHeap) { | ||
_classCallCheck(this, Heap); | ||
this.heap = []; | ||
this.offset = 0; | ||
this.handle = 0; | ||
/** | ||
* layout: | ||
* | ||
* - pointer into heap | ||
* - size | ||
* - scope size | ||
* - freed (0 or 1) | ||
*/ | ||
this.table = []; | ||
if (serializedHeap) { | ||
var buffer = serializedHeap.buffer, | ||
table = serializedHeap.table, | ||
handle = serializedHeap.handle; | ||
this.heap = new Uint16Array(buffer); | ||
this.table = table; | ||
this.offset = this.heap.length; | ||
this.handle = handle; | ||
} else { | ||
if (typeof Uint16Array !== 'undefined') { | ||
this.heap = new Uint16Array(0x100000); | ||
} else { | ||
// FIXME remove once we drop IE9 | ||
this.heap = new Array(0x100000); | ||
} | ||
this.table = []; | ||
} | ||
} | ||
@@ -100,3 +131,11 @@ | ||
}; | ||
/** | ||
* The heap uses the [Mark-Compact Algorithm](https://en.wikipedia.org/wiki/Mark-compact_algorithm) to shift | ||
* reachable memory to the bottom of the heap and freeable | ||
* memory to the top of the heap. When we have shifted all | ||
* the reachable memory to the top of the heap, we move the | ||
* offset to the next free position. | ||
*/ | ||
Heap.prototype.compact = function compact() { | ||
@@ -132,4 +171,10 @@ var compactedSize = 0; | ||
Heap.prototype.toArray = function toArray() { | ||
return this.heap.slice(); | ||
Heap.prototype.capture = function capture() { | ||
// Only called in eager mode | ||
var buffer = slice(this.heap, 0, this.offset); | ||
return { | ||
handle: this.handle, | ||
table: this.table, | ||
buffer: buffer | ||
}; | ||
}; | ||
@@ -185,2 +230,15 @@ | ||
}(WriteOnlyProgram); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSxBQUFPLFNBQWEsQUFBa0IsQUFBb0IsMEJBQU0sQUFBYSxBQUFDO0FBQzlFLEFBQU8sU0FBRSxBQUFNLEFBQUUsY0FBTSxBQUFVLEFBQUM7QUFHbEMsSUFBSyxBQUtKO0FBTEQsV0FBSyxBQUFjLGdCQUNqQjtzREFBUyxBQUNUO2tEQUFLLEFBQ0w7bURBQU0sQUFDTjtvREFBTyxBQUNULEFBQUM7R0FMSSxBQUFjLG1CQUFkLEFBQWMsaUJBS2xCO0FBRUQsSUFBTSxBQUFVLGFBQUcsQUFBQyxBQUFDO0FBQ3JCLElBQU0sQUFBVyxjQUFHLEFBQUMsQUFBQztBQUN0QixJQUFNLEFBQWdCLG1CQUFHLEFBQUMsQUFBQztBQUMzQixJQUFNLEFBQVksZUFBRyxBQUFDLEFBQUM7QUFFdkIsQUFBTSxXQUFOOztBQUNVOzthQUFJLE9BQWEsQUFBRSxBQUFDLEFBQ3BCO2FBQU0sU0FBRyxBQUFDLEFBQUMsQUFDWDthQUFNLFNBQUcsQUFBQyxBQUFDLEFBRW5CLEFBT0c7QUFDSzs7Ozs7Ozs7YUFBSyxRQUFhLEFBQUUsQUFBQyxBQStGL0IsQUFBQztBQTdGQyxBQUFJOzt3Q0FBQyxBQUFZLE1BQ2YsQUFBSTthQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBTSxBQUFFLEFBQUMsWUFBRyxBQUFJLEFBQUMsQUFDbEMsQUFBQztBQUVELEFBQVM7O2tEQUFDLEFBQWUsU0FDdkIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLEFBQUMsQUFDNUIsQUFBQztBQUVELEFBQVM7O2tEQUFDLEFBQWUsU0FBRSxBQUFhLE9BQ3RDLEFBQUk7YUFBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLFdBQUcsQUFBSyxBQUFDLEFBQzdCLEFBQUM7QUFF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QUFJLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUMsQUFDdkMsQUFBQztBQUVELEFBQU07O3dEQUFDLEFBQWMsUUFDbkIsQUFBSTthQUFDLEFBQU8sUUFBQyxBQUFNLFNBQUcsQUFBTSxBQUFDLEFBQzdCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLEFBQ3RCLEFBQUMsQUFDRjs7Ozs7QUFFRCxBQUFNLFdBS0o7NEJBQW1CLEFBQXNDLFdBQVMsQUFBVTtBQUF6RDs7YUFBUyxZQUFULEFBQVMsQUFBNkIsQUFBUzthQUFJLE9BQUosQUFBSSxBQUFNLEFBQzFFLEFBQUk7YUFBQyxBQUFPLFVBQUcsSUFBSSxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3ZDLEFBQUM7QUFFRCxBQUFNOztzREFBQyxBQUFjLFFBQ25CLEFBQUk7YUFBQyxBQUFPLFFBQUMsQUFBTSxTQUFHLEFBQU0sQUFBQyxBQUM3QixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU8sQUFBQyxBQUN0QixBQUFDLEFBQ0Y7Ozs7O0FBRUQsQUFBTSxXQUEwQjs7Ozs7Ozs7OztFQUFRLEFBQWdCLEFBRXZEIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBSZWNhc3QsIFZNSGFuZGxlIH0gZnJvbSBcIkBnbGltbWVyL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IERFQlVHIH0gZnJvbSBcIkBnbGltbWVyL2xvY2FsLWRlYnVnLWZsYWdzXCI7XG5pbXBvcnQgeyBDb25zdGFudHMsIFdyaXRlT25seUNvbnN0YW50cywgUnVudGltZUNvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9wY29kZSB9IGZyb20gJy4vb3Bjb2RlJztcbmltcG9ydCB7IENvbXBpbGVUaW1lUHJvZ3JhbSB9IGZyb20gXCJAZ2xpbW1lci9vcGNvZGUtY29tcGlsZXJcIjtcblxuZW51bSBUYWJsZVNsb3RTdGF0ZSB7XG4gIEFsbG9jYXRlZCxcbiAgRnJlZWQsXG4gIFB1cmdlZCxcbiAgUG9pbnRlclxufVxuXG5jb25zdCBFTlRSWV9TSVpFID0gNDtcbmNvbnN0IFNJWkVfT0ZGU0VUID0gMTtcbmNvbnN0IFNDT1BFU0laRV9PRkZTRVQgPSAyO1xuY29uc3QgU1RBVEVfT0ZGU0VUID0gMztcblxuZXhwb3J0IGNsYXNzIEhlYXAge1xuICBwcml2YXRlIGhlYXA6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgb2Zmc2V0ID0gMDtcbiAgcHJpdmF0ZSBoYW5kbGUgPSAwO1xuXG4gIC8qKlxuICAgKiBsYXlvdXQ6XG4gICAqXG4gICAqIC0gcG9pbnRlciBpbnRvIGhlYXBcbiAgICogLSBzaXplXG4gICAqIC0gc2NvcGUgc2l6ZVxuICAgKiAtIGZyZWVkICgwIG9yIDEpXG4gICAqL1xuICBwcml2YXRlIHRhYmxlOiBudW1iZXJbXSA9IFtdO1xuXG4gIHB1c2goaXRlbTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5oZWFwW3RoaXMub2Zmc2V0KytdID0gaXRlbTtcbiAgfVxuXG4gIGdldGJ5YWRkcihhZGRyZXNzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmhlYXBbYWRkcmVzc107XG4gIH1cblxuICBzZXRieWFkZHIoYWRkcmVzczogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5oZWFwW2FkZHJlc3NdID0gdmFsdWU7XG4gIH1cblxuICBtYWxsb2MoKTogVk1IYW5kbGUge1xuICAgIHRoaXMudGFibGUucHVzaCh0aGlzLm9mZnNldCwgMCwgMCwgMCk7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlO1xuICAgIHRoaXMuaGFuZGxlICs9IEVOVFJZX1NJWkU7XG4gICAgcmV0dXJuIGhhbmRsZSBhcyBSZWNhc3Q8bnVtYmVyLCBWTUhhbmRsZT47XG4gIH1cblxuICBmaW5pc2hNYWxsb2MoaGFuZGxlOiBWTUhhbmRsZSwgc2NvcGVTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgc3RhcnQgPSB0aGlzLnRhYmxlW2hhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj5dO1xuICAgIGxldCBmaW5pc2ggPSB0aGlzLm9mZnNldDtcbiAgICB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNJWkVfT0ZGU0VUXSA9IGZpbmlzaCAtIHN0YXJ0O1xuICAgIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0NPUEVTSVpFX09GRlNFVF0gPSBzY29wZVNpemU7XG4gIH1cblxuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0O1xuICB9XG5cbiAgLy8gSXQgaXMgaWxsZWdhbCB0byBjbG9zZSBvdmVyIHRoaXMgYWRkcmVzcywgYXMgY29tcGFjdGlvblxuICAvLyBtYXkgbW92ZSBpdC4gSG93ZXZlciwgaXQgaXMgbGVnYWwgdG8gdXNlIHRoaXMgYWRkcmVzc1xuICAvLyBtdWx0aXBsZSB0aW1lcyBiZXR3ZWVuIGNvbXBhY3Rpb25zLlxuICBnZXRhZGRyKGhhbmRsZTogVk1IYW5kbGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlW2hhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj5dO1xuICB9XG5cbiAgZ2V0aGFuZGxlKGFkZHJlc3M6IG51bWJlcik6IFZNSGFuZGxlIHtcbiAgICB0aGlzLnRhYmxlLnB1c2goYWRkcmVzcywgMCwgMCwgVGFibGVTbG90U3RhdGUuUG9pbnRlcik7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMuaGFuZGxlO1xuICAgIHRoaXMuaGFuZGxlICs9IEVOVFJZX1NJWkU7XG4gICAgcmV0dXJuIGhhbmRsZSBhcyBSZWNhc3Q8bnVtYmVyLCBWTUhhbmRsZT47XG4gIH1cblxuICBzaXplb2YoaGFuZGxlOiBWTUhhbmRsZSk6IG51bWJlciB7XG4gICAgaWYgKERFQlVHKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTSVpFX09GRlNFVF07XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHNjb3Blc2l6ZW9mKGhhbmRsZTogVk1IYW5kbGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNDT1BFU0laRV9PRkZTRVRdO1xuICB9XG5cbiAgZnJlZShoYW5kbGU6IFZNSGFuZGxlKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTVEFURV9PRkZTRVRdID0gMTtcbiAgfVxuXG4gIGNvbXBhY3QoKTogdm9pZCB7XG4gICAgbGV0IGNvbXBhY3RlZFNpemUgPSAwO1xuICAgIGxldCB7IHRhYmxlLCB0YWJsZTogeyBsZW5ndGggfSwgaGVhcCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGk9MDsgaTxsZW5ndGg7IGkrPUVOVFJZX1NJWkUpIHtcbiAgICAgIGxldCBvZmZzZXQgPSB0YWJsZVtpXTtcbiAgICAgIGxldCBzaXplID0gdGFibGVbaSArIFNJWkVfT0ZGU0VUXTtcbiAgICAgIGxldCBzdGF0ZSA9IHRhYmxlW2kgKyBTVEFURV9PRkZTRVRdO1xuXG4gICAgICBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLlB1cmdlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLkZyZWVkKSB7XG4gICAgICAgIC8vIHRyYW5zaXRpb24gdG8gXCJhbHJlYWR5IGZyZWVkXCIgYWthIFwicHVyZ2VkXCJcbiAgICAgICAgLy8gYSBnb29kIGltcHJvdmVtZW50IHdvdWxkIGJlIHRvIHJldXNlXG4gICAgICAgIC8vIHRoZXNlIHNsb3RzXG4gICAgICAgIHRhYmxlW2kgKyBTVEFURV9PRkZTRVRdID0gVGFibGVTbG90U3RhdGUuUHVyZ2VkO1xuICAgICAgICBjb21wYWN0ZWRTaXplICs9IHNpemU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5BbGxvY2F0ZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaj1vZmZzZXQ7IGo8PWkrc2l6ZTsgaisrKSB7XG4gICAgICAgICAgaGVhcFtqIC0gY29tcGFjdGVkU2l6ZV0gPSBoZWFwW2pdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVbaV0gPSBvZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuUG9pbnRlcikge1xuICAgICAgICB0YWJsZVtpXSA9IG9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vZmZzZXQgPSB0aGlzLm9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gIH1cblxuICB0b0FycmF5KCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5oZWFwLnNsaWNlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFdyaXRlT25seVByb2dyYW0gaW1wbGVtZW50cyBDb21waWxlVGltZVByb2dyYW0ge1xuICBba2V5OiBudW1iZXJdOiBuZXZlcjtcblxuICBwcml2YXRlIF9vcGNvZGU6IE9wY29kZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uc3RhbnRzOiBXcml0ZU9ubHlDb25zdGFudHMgPSBuZXcgV3JpdGVPbmx5Q29uc3RhbnRzKCksIHB1YmxpYyBoZWFwID0gbmV3IEhlYXAoKSkge1xuICAgIHRoaXMuX29wY29kZSA9IG5ldyBPcGNvZGUodGhpcy5oZWFwKTtcbiAgfVxuXG4gIG9wY29kZShvZmZzZXQ6IG51bWJlcik6IE9wY29kZSB7XG4gICAgdGhpcy5fb3Bjb2RlLm9mZnNldCA9IG9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5fb3Bjb2RlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lUHJvZ3JhbTxTcGVjaWZpZXI+IHtcbiAgW2tleTogbnVtYmVyXTogbmV2ZXI7XG5cbiAgcHJpdmF0ZSBfb3Bjb2RlOiBPcGNvZGU7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbnN0YW50czogUnVudGltZUNvbnN0YW50czxTcGVjaWZpZXI+LCBwdWJsaWMgaGVhcDogSGVhcCkge1xuICAgIHRoaXMuX29wY29kZSA9IG5ldyBPcGNvZGUodGhpcy5oZWFwKTtcbiAgfVxuXG4gIG9wY29kZShvZmZzZXQ6IG51bWJlcik6IE9wY29kZSB7XG4gICAgdGhpcy5fb3Bjb2RlLm9mZnNldCA9IG9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5fb3Bjb2RlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtPFNwZWNpZmllcj4gZXh0ZW5kcyBXcml0ZU9ubHlQcm9ncmFtIHtcbiAgcHVibGljIGNvbnN0YW50czogQ29uc3RhbnRzPFNwZWNpZmllcj47XG59XG4iXX0= | ||
function slice(arr, start, end) { | ||
if (arr instanceof Uint16Array) { | ||
if (arr.slice !== undefined) { | ||
return arr.slice(start, end).buffer; | ||
} | ||
var ret = new Uint16Array(end); | ||
for (; start < end; start++) { | ||
ret[start] = arr[start]; | ||
} | ||
return ret.buffer; | ||
} | ||
return null; | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSxBQUFPLFNBQWEsQUFBa0IsQUFBb0IsMEJBQU0sQUFBYSxBQUFDO0FBQzlFLEFBQU8sU0FBRSxBQUFNLEFBQUUsY0FBTSxBQUFVLEFBQUM7QUFFbEMsSUFBSyxBQUtKO0FBTEQsV0FBSyxBQUFjLGdCQUNqQjtzREFBUyxBQUNUO2tEQUFLLEFBQ0w7bURBQU0sQUFDTjtvREFBTyxBQUNULEFBQUM7R0FMSSxBQUFjLG1CQUFkLEFBQWMsaUJBS2xCO0FBRUQsSUFBTSxBQUFVLGFBQUcsQUFBQyxBQUFDO0FBQ3JCLElBQU0sQUFBVyxjQUFHLEFBQUMsQUFBQztBQUN0QixJQUFNLEFBQWdCLG1CQUFHLEFBQUMsQUFBQztBQUMzQixJQUFNLEFBQVksZUFBRyxBQUFDLEFBQUM7QUFFdkIsQUFzQkc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0gsQUFBTSxXQU1KO2tCQUFZLEFBQXlFO0FBSDdFOzthQUFNLFNBQUcsQUFBQyxBQUFDLEFBQ1g7YUFBTSxTQUFHLEFBQUMsQUFBQyxBQUdqQixBQUFFLEFBQUM7WUFBQyxBQUFjLEFBQUM7QUFBQyxBQUFDLEFBQ25CLEFBQUksZ0JBQUUsQUFBTTtnQkFBRSxBQUFLLFFBQWEsQUFBYyxBQUFDLEFBQy9DLEFBQUk7Z0JBRGlCLEFBQU0sQUFBRTs7aUJBQ3hCLEFBQUksT0FBRyxJQUFJLEFBQVcsWUFBQyxBQUFNLEFBQUMsQUFBQyxBQUNwQyxBQUFJO2lCQUFDLEFBQUssUUFBRyxBQUFLLEFBQUMsQUFDbkIsQUFBSTtpQkFBQyxBQUFNLFNBQUcsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFNLEFBQUMsQUFDL0IsQUFBSTtpQkFBQyxBQUFNLFNBQUcsQUFBTSxBQUFDLEFBQ3ZCLEFBQUMsQUFBQyxBQUFJ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YW0sIFJlY2FzdCwgVk1IYW5kbGUgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgREVCVUcgfSBmcm9tIFwiQGdsaW1tZXIvbG9jYWwtZGVidWctZmxhZ3NcIjtcbmltcG9ydCB7IENvbnN0YW50cywgV3JpdGVPbmx5Q29uc3RhbnRzLCBSdW50aW1lQ29uc3RhbnRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT3Bjb2RlIH0gZnJvbSAnLi9vcGNvZGUnO1xuXG5lbnVtIFRhYmxlU2xvdFN0YXRlIHtcbiAgQWxsb2NhdGVkLFxuICBGcmVlZCxcbiAgUHVyZ2VkLFxuICBQb2ludGVyXG59XG5cbmNvbnN0IEVOVFJZX1NJWkUgPSA0O1xuY29uc3QgU0laRV9PRkZTRVQgPSAxO1xuY29uc3QgU0NPUEVTSVpFX09GRlNFVCA9IDI7XG5jb25zdCBTVEFURV9PRkZTRVQgPSAzO1xuXG4vKipcbiAqIFRoZSBIZWFwIGlzIHJlc3BvbnNpYmxlIGZvciBkeW5hbWljYWxseSBhbGxvY2F0aW5nXG4gKiBtZW1vcnkgaW4gd2hpY2ggd2UgcmVhZC93cml0ZSB0aGUgVk0ncyBpbnN0cnVjdGlvbnNcbiAqIGZyb20vdG8uIFdoZW4gd2UgbWFsbG9jIHdlIHBhc3Mgb3V0IGEgVk1IYW5kbGUsIHdoaWNoXG4gKiBpcyB1c2VkIGFzIGFuIGluZGlyZWN0IHdheSBvZiBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBkdXJpbmdcbiAqIGV4ZWN1dGlvbiBvZiB0aGUgVk0uIEludGVybmFsbHkgd2UgdHJhY2sgdGhlIGRpZmZlcmVudFxuICogcmVnaW9ucyBvZiB0aGUgbWVtb3J5IGluIGFuIGludCBhcnJheSBrbm93biBhcyB0aGUgdGFibGUuXG4gKlxuICogVGhlIHRhYmxlIGhhcyB0aGUgZm9sbG93aW5nIGxheW91dDpcbiAqXG4gKiB8IC4uLiB8ICAgICAgICAgICB0YWJsZSBlbnRyeSAgICAgICAgICB8XG4gKiB8IC4uLiB8IGhwIHwgc2l6ZSB8IHNjb3BlIHNpemUgfCBzdGF0ZSB8XG4gKiB8IC4uLiB8IDAgIHwgMTIyICB8ICAgICAgMyAgICAgfCAgIDAgICB8XG4gKiAgaGFuZGxlIF4gICAgIHwgICAgICAgICAgfCAgICAgICAgIF4gcmVnaW9uIHN0YXRlIChhbGxvY2F0ZWQsIGZyZWVkLCBwdXJnZWQpXG4gKiAgIHJlZ2lvbiBzaXplIF4gICAgICAgICAgfFxuICogICAgICAgIG51bWJlciBvZiBzeW1ib2xzIF5cbiAqXG4gKiBXaXRoIHRoaXMgaW5mb3JtYXRpb24gd2UgZWZmZWN0aXZlbHkgaGF2ZSB0aGUgYWJpbGl0eSB0b1xuICogY29udHJvbCB3aGVuIHdlIHdhbnQgdG8gZnJlZSBtZW1vcnkuIFRoYXQgYmVpbmcgc2FpZCB5b3VcbiAqIGNhbiBub3QgZnJlZSBkdXJpbmcgZXhlY3V0aW9uIGFzIHJhdyBhZGRyZXNzIGFyZSBvbmx5XG4gKiB2YWxpZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbi4gVGhpcyBtZWFucyB5b3UgY2Fubm90IGNsb3NlXG4gKiBvdmVyIHRoZW0gYXMgeW91IHdpbGwgaGF2ZSBhIGJhZCBtZW1vcnkgYWNjZXNzIGV4Y2VwdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEhlYXAge1xuICBwcml2YXRlIGhlYXA6IFVpbnQxNkFycmF5IHwgQXJyYXk8bnVtYmVyPjtcbiAgcHJpdmF0ZSB0YWJsZTogbnVtYmVyW107XG4gIHByaXZhdGUgb2Zmc2V0ID0gMDtcbiAgcHJpdmF0ZSBoYW5kbGUgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHNlcmlhbGl6ZWRIZWFwPzogeyBidWZmZXI6IEFycmF5QnVmZmVyLCB0YWJsZTogbnVtYmVyW10sIGhhbmRsZTogbnVtYmVyIH0pIHtcbiAgICBpZiAoc2VyaWFsaXplZEhlYXApIHtcbiAgICAgIGxldCB7IGJ1ZmZlciwgdGFibGUsIGhhbmRsZSB9ID0gc2VyaWFsaXplZEhlYXA7XG4gICAgICB0aGlzLmhlYXAgPSBuZXcgVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5oZWFwLmxlbmd0aDtcbiAgICAgIHRoaXMuaGFuZGxlID0gaGFuZGxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIFVpbnQxNkFycmF5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmhlYXAgPSBuZXcgVWludDE2QXJyYXkoMHgxMDAwMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRklYTUUgcmVtb3ZlIG9uY2Ugd2UgZHJvcCBJRTlcbiAgICAgICAgdGhpcy5oZWFwID0gbmV3IEFycmF5KDB4MTAwMDAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGUgPSBbXTtcbiAgICB9XG4gIH1cblxuICBwdXNoKGl0ZW06IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaGVhcFt0aGlzLm9mZnNldCsrXSA9IGl0ZW07XG4gIH1cblxuICBnZXRieWFkZHIoYWRkcmVzczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5oZWFwW2FkZHJlc3NdO1xuICB9XG5cbiAgc2V0YnlhZGRyKGFkZHJlc3M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuaGVhcFthZGRyZXNzXSA9IHZhbHVlO1xuICB9XG5cbiAgbWFsbG9jKCk6IFZNSGFuZGxlIHtcbiAgICB0aGlzLnRhYmxlLnB1c2godGhpcy5vZmZzZXQsIDAsIDAsIDApO1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZTtcbiAgICB0aGlzLmhhbmRsZSArPSBFTlRSWV9TSVpFO1xuICAgIHJldHVybiBoYW5kbGUgYXMgUmVjYXN0PG51bWJlciwgVk1IYW5kbGU+O1xuICB9XG5cbiAgZmluaXNoTWFsbG9jKGhhbmRsZTogVk1IYW5kbGUsIHNjb3BlU2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IHN0YXJ0ID0gdGhpcy50YWJsZVtoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+XTtcbiAgICBsZXQgZmluaXNoID0gdGhpcy5vZmZzZXQ7XG4gICAgdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTSVpFX09GRlNFVF0gPSBmaW5pc2ggLSBzdGFydDtcbiAgICB0aGlzLnRhYmxlWyhoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+KSArIFNDT1BFU0laRV9PRkZTRVRdID0gc2NvcGVTaXplO1xuICB9XG5cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIC8vIEl0IGlzIGlsbGVnYWwgdG8gY2xvc2Ugb3ZlciB0aGlzIGFkZHJlc3MsIGFzIGNvbXBhY3Rpb25cbiAgLy8gbWF5IG1vdmUgaXQuIEhvd2V2ZXIsIGl0IGlzIGxlZ2FsIHRvIHVzZSB0aGlzIGFkZHJlc3NcbiAgLy8gbXVsdGlwbGUgdGltZXMgYmV0d2VlbiBjb21wYWN0aW9ucy5cbiAgZ2V0YWRkcihoYW5kbGU6IFZNSGFuZGxlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVtoYW5kbGUgYXMgUmVjYXN0PFZNSGFuZGxlLCBudW1iZXI+XTtcbiAgfVxuXG4gIGdldGhhbmRsZShhZGRyZXNzOiBudW1iZXIpOiBWTUhhbmRsZSB7XG4gICAgdGhpcy50YWJsZS5wdXNoKGFkZHJlc3MsIDAsIDAsIFRhYmxlU2xvdFN0YXRlLlBvaW50ZXIpO1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRsZTtcbiAgICB0aGlzLmhhbmRsZSArPSBFTlRSWV9TSVpFO1xuICAgIHJldHVybiBoYW5kbGUgYXMgUmVjYXN0PG51bWJlciwgVk1IYW5kbGU+O1xuICB9XG5cbiAgc2l6ZW9mKGhhbmRsZTogVk1IYW5kbGUpOiBudW1iZXIge1xuICAgIGlmIChERUJVRykge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU0laRV9PRkZTRVRdO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBzY29wZXNpemVvZihoYW5kbGU6IFZNSGFuZGxlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVsoaGFuZGxlIGFzIFJlY2FzdDxWTUhhbmRsZSwgbnVtYmVyPikgKyBTQ09QRVNJWkVfT0ZGU0VUXTtcbiAgfVxuXG4gIGZyZWUoaGFuZGxlOiBWTUhhbmRsZSk6IHZvaWQge1xuICAgIHRoaXMudGFibGVbKGhhbmRsZSBhcyBSZWNhc3Q8Vk1IYW5kbGUsIG51bWJlcj4pICsgU1RBVEVfT0ZGU0VUXSA9IDE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGhlYXAgdXNlcyB0aGUgW01hcmstQ29tcGFjdCBBbGdvcml0aG1dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01hcmstY29tcGFjdF9hbGdvcml0aG0pIHRvIHNoaWZ0XG4gICAqIHJlYWNoYWJsZSBtZW1vcnkgdG8gdGhlIGJvdHRvbSBvZiB0aGUgaGVhcCBhbmQgZnJlZWFibGVcbiAgICogbWVtb3J5IHRvIHRoZSB0b3Agb2YgdGhlIGhlYXAuIFdoZW4gd2UgaGF2ZSBzaGlmdGVkIGFsbFxuICAgKiB0aGUgcmVhY2hhYmxlIG1lbW9yeSB0byB0aGUgdG9wIG9mIHRoZSBoZWFwLCB3ZSBtb3ZlIHRoZVxuICAgKiBvZmZzZXQgdG8gdGhlIG5leHQgZnJlZSBwb3NpdGlvbi5cbiAgICovXG4gIGNvbXBhY3QoKTogdm9pZCB7XG4gICAgbGV0IGNvbXBhY3RlZFNpemUgPSAwO1xuICAgIGxldCB7IHRhYmxlLCB0YWJsZTogeyBsZW5ndGggfSwgaGVhcCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGk9MDsgaTxsZW5ndGg7IGkrPUVOVFJZX1NJWkUpIHtcbiAgICAgIGxldCBvZmZzZXQgPSB0YWJsZVtpXTtcbiAgICAgIGxldCBzaXplID0gdGFibGVbaSArIFNJWkVfT0ZGU0VUXTtcbiAgICAgIGxldCBzdGF0ZSA9IHRhYmxlW2kgKyBTVEFURV9PRkZTRVRdO1xuXG4gICAgICBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLlB1cmdlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLkZyZWVkKSB7XG4gICAgICAgIC8vIHRyYW5zaXRpb24gdG8gXCJhbHJlYWR5IGZyZWVkXCIgYWthIFwicHVyZ2VkXCJcbiAgICAgICAgLy8gYSBnb29kIGltcHJvdmVtZW50IHdvdWxkIGJlIHRvIHJldXNlXG4gICAgICAgIC8vIHRoZXNlIHNsb3RzXG4gICAgICAgIHRhYmxlW2kgKyBTVEFURV9PRkZTRVRdID0gVGFibGVTbG90U3RhdGUuUHVyZ2VkO1xuICAgICAgICBjb21wYWN0ZWRTaXplICs9IHNpemU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5BbGxvY2F0ZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaj1vZmZzZXQ7IGo8PWkrc2l6ZTsgaisrKSB7XG4gICAgICAgICAgaGVhcFtqIC0gY29tcGFjdGVkU2l6ZV0gPSBoZWFwW2pdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVbaV0gPSBvZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuUG9pbnRlcikge1xuICAgICAgICB0YWJsZVtpXSA9IG9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vZmZzZXQgPSB0aGlzLm9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gIH1cblxuICBjYXB0dXJlKCkge1xuICAgIC8vIE9ubHkgY2FsbGVkIGluIGVhZ2VyIG1vZGVcbiAgICBsZXQgYnVmZmVyID0gc2xpY2UodGhpcy5oZWFwLCAwLCB0aGlzLm9mZnNldCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhbmRsZTogdGhpcy5oYW5kbGUsXG4gICAgICB0YWJsZTogdGhpcy50YWJsZSxcbiAgICAgIGJ1ZmZlcjogYnVmZmVyIGFzIEFycmF5QnVmZmVyXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV3JpdGVPbmx5UHJvZ3JhbSBpbXBsZW1lbnRzIENvbXBpbGVUaW1lUHJvZ3JhbSB7XG4gIFtrZXk6IG51bWJlcl06IG5ldmVyO1xuXG4gIHByaXZhdGUgX29wY29kZTogT3Bjb2RlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb25zdGFudHM6IFdyaXRlT25seUNvbnN0YW50cyA9IG5ldyBXcml0ZU9ubHlDb25zdGFudHMoKSwgcHVibGljIGhlYXAgPSBuZXcgSGVhcCgpKSB7XG4gICAgdGhpcy5fb3Bjb2RlID0gbmV3IE9wY29kZSh0aGlzLmhlYXApO1xuICB9XG5cbiAgb3Bjb2RlKG9mZnNldDogbnVtYmVyKTogT3Bjb2RlIHtcbiAgICB0aGlzLl9vcGNvZGUub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLl9vcGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVQcm9ncmFtPFNwZWNpZmllcj4ge1xuICBba2V5OiBudW1iZXJdOiBuZXZlcjtcblxuICBwcml2YXRlIF9vcGNvZGU6IE9wY29kZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uc3RhbnRzOiBSdW50aW1lQ29uc3RhbnRzPFNwZWNpZmllcj4sIHB1YmxpYyBoZWFwOiBIZWFwKSB7XG4gICAgdGhpcy5fb3Bjb2RlID0gbmV3IE9wY29kZSh0aGlzLmhlYXApO1xuICB9XG5cbiAgb3Bjb2RlKG9mZnNldDogbnVtYmVyKTogT3Bjb2RlIHtcbiAgICB0aGlzLl9vcGNvZGUub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLl9vcGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW08U3BlY2lmaWVyPiBleHRlbmRzIFdyaXRlT25seVByb2dyYW0ge1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM8U3BlY2lmaWVyPjtcbn1cblxuZnVuY3Rpb24gc2xpY2UoYXJyOiBVaW50MTZBcnJheSB8IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICBpZiAoYXJyIGluc3RhbmNlb2YgVWludDE2QXJyYXkpIHtcbiAgICBpZiAoYXJyLnNsaWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCkuYnVmZmVyO1xuICAgIH1cblxuICAgIGxldCByZXQgPSBuZXcgVWludDE2QXJyYXkoZW5kKTtcblxuICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykge1xuICAgICAgcmV0W3N0YXJ0XSAgPSBhcnJbc3RhcnRdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQuYnVmZmVyO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0= |
@@ -1,3 +0,2 @@ | ||
import { Opaque, SymbolTable, RuntimeResolver } from "@glimmer/interfaces"; | ||
import { CompileTimeConstants } from "@glimmer/opcode-compiler"; | ||
import { Opaque, SymbolTable, RuntimeResolver, CompileTimeConstants } from "@glimmer/interfaces"; | ||
export interface ConstantPool { | ||
@@ -10,2 +9,3 @@ strings: string[]; | ||
floats: number[]; | ||
negatives: number[]; | ||
} | ||
@@ -17,2 +17,3 @@ export declare const enum PrimitiveType { | ||
BOOLEAN_OR_VOID = 3, | ||
NEGATIVE = 4, | ||
} | ||
@@ -27,3 +28,5 @@ export declare class WriteOnlyConstants implements CompileTimeConstants { | ||
protected floats: number[]; | ||
protected negatives: number[]; | ||
float(float: number): number; | ||
negative(negative: number): number; | ||
string(value: string): number; | ||
@@ -46,4 +49,6 @@ stringArray(strings: string[]): number; | ||
protected floats: number[]; | ||
protected negatives: number[]; | ||
constructor(resolver: RuntimeResolver<Specifier>, pool: ConstantPool); | ||
getFloat(value: number): number; | ||
getNegative(value: number): number; | ||
getString(value: number): string; | ||
@@ -59,2 +64,4 @@ getStringArray(value: number): string[]; | ||
constructor(resolver: RuntimeResolver<Specifier>, pool?: ConstantPool); | ||
getFloat(value: number): number; | ||
getNegative(value: number): number; | ||
getString(value: number): string; | ||
@@ -61,0 +68,0 @@ getStringArray(value: number): string[]; |
@@ -1,18 +0,37 @@ | ||
import { VMHandle } from "@glimmer/interfaces"; | ||
import { CompileTimeProgram, VMHandle } from "@glimmer/interfaces"; | ||
import { Constants, WriteOnlyConstants, RuntimeConstants } from './constants'; | ||
import { Opcode } from './opcode'; | ||
import { CompileTimeProgram } from "@glimmer/opcode-compiler"; | ||
/** | ||
* The Heap is responsible for dynamically allocating | ||
* memory in which we read/write the VM's instructions | ||
* from/to. When we malloc we pass out a VMHandle, which | ||
* is used as an indirect way of accessing the memory during | ||
* execution of the VM. Internally we track the different | ||
* regions of the memory in an int array known as the table. | ||
* | ||
* The table has the following layout: | ||
* | ||
* | ... | table entry | | ||
* | ... | hp | size | scope size | state | | ||
* | ... | 0 | 122 | 3 | 0 | | ||
* handle ^ | | ^ region state (allocated, freed, purged) | ||
* region size ^ | | ||
* number of symbols ^ | ||
* | ||
* With this information we effectively have the ability to | ||
* control when we want to free memory. That being said you | ||
* can not free during execution as raw address are only | ||
* valid during the execution. This means you cannot close | ||
* over them as you will have a bad memory access exception. | ||
*/ | ||
export declare class Heap { | ||
private heap; | ||
private table; | ||
private offset; | ||
private handle; | ||
/** | ||
* layout: | ||
* | ||
* - pointer into heap | ||
* - size | ||
* - scope size | ||
* - freed (0 or 1) | ||
*/ | ||
private table; | ||
constructor(serializedHeap?: { | ||
buffer: ArrayBuffer; | ||
table: number[]; | ||
handle: number; | ||
}); | ||
push(item: number): void; | ||
@@ -29,4 +48,15 @@ getbyaddr(address: number): number; | ||
free(handle: VMHandle): void; | ||
/** | ||
* The heap uses the [Mark-Compact Algorithm](https://en.wikipedia.org/wiki/Mark-compact_algorithm) to shift | ||
* reachable memory to the bottom of the heap and freeable | ||
* memory to the top of the heap. When we have shifted all | ||
* the reachable memory to the top of the heap, we move the | ||
* offset to the next free position. | ||
*/ | ||
compact(): void; | ||
toArray(): number[]; | ||
capture(): { | ||
handle: number; | ||
table: number[]; | ||
buffer: ArrayBuffer; | ||
}; | ||
} | ||
@@ -33,0 +63,0 @@ export declare class WriteOnlyProgram implements CompileTimeProgram { |
{ | ||
"name": "@glimmer/program", | ||
"version": "0.28.3", | ||
"version": "0.29.0", | ||
"repository": "https://github.com/glimmerjs/glimmer-vm/tree/master/packages/@glimmer/program", | ||
"dependencies": { | ||
"@glimmer/util": "^0.28.3", | ||
"@glimmer/interfaces": "^0.28.3", | ||
"@glimmer/encoder": "^0.28.3" | ||
"@glimmer/util": "^0.29.0", | ||
"@glimmer/interfaces": "^0.29.0", | ||
"@glimmer/encoder": "^0.29.0" | ||
}, | ||
@@ -10,0 +10,0 @@ "devDependencies": { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
263013
2599
0
+ Added@glimmer/encoder@0.29.10(transitive)
+ Added@glimmer/interfaces@0.29.10(transitive)
+ Added@glimmer/util@0.29.10(transitive)
+ Added@glimmer/wire-format@0.29.10(transitive)
- Removed@glimmer/encoder@0.28.3(transitive)
- Removed@glimmer/interfaces@0.28.3(transitive)
- Removed@glimmer/util@0.28.3(transitive)
- Removed@glimmer/wire-format@0.28.3(transitive)
Updated@glimmer/encoder@^0.29.0
Updated@glimmer/interfaces@^0.29.0
Updated@glimmer/util@^0.29.0