Comparing version 1.0.16 to 1.0.17
@@ -0,1 +1,8 @@ | ||
## [1.0.17](https://github.com/GMOD/bbi-js/compare/v1.0.16...v1.0.17) (2019-04-30) | ||
- Use some standard rxjs notions for combining operator results | ||
- Add parsing of the extraIndex data in BigBed, allowing you to call bigbed.searchExtraIndex(name[,opts]) | ||
## [1.0.16](https://github.com/GMOD/bbi-js/compare/v1.0.15...v1.0.16) (2019-04-23) | ||
@@ -2,0 +9,0 @@ |
import { GenericFilehandle } from 'generic-filehandle'; | ||
import BlockView from './blockView'; | ||
interface Options { | ||
filehandle?: GenericFilehandle; | ||
path?: string; | ||
url?: string; | ||
renameRefSeqs?: (a: string) => string; | ||
import { Observable } from 'rxjs'; | ||
import { BlockView } from './blockView'; | ||
export interface Feature { | ||
start: number; | ||
end: number; | ||
score: number; | ||
rest?: string; | ||
minScore?: number; | ||
maxScore?: number; | ||
summary?: boolean; | ||
uniqueId?: string; | ||
field?: number; | ||
} | ||
export default abstract class BBIFile { | ||
private bbi; | ||
private fileType; | ||
private headerCache; | ||
interface Statistics { | ||
scoreSum: number; | ||
basesCovered: number; | ||
scoreSumSquares: number; | ||
} | ||
interface RefInfo { | ||
name: string; | ||
id: number; | ||
length: number; | ||
} | ||
export interface Header { | ||
autoSql: string; | ||
totalSummary: Statistics; | ||
zoomLevels: any; | ||
unzoomedIndexOffset: number; | ||
unzoomedDataOffset: number; | ||
uncompressBufSize: number; | ||
chromTreeOffset: number; | ||
fileSize: number; | ||
extHeaderOffset: number; | ||
isBigEndian: boolean; | ||
fileType: string; | ||
refsByName: Map<string, number>; | ||
refsByNumber: Map<number, RefInfo>; | ||
} | ||
declare class AbortAwareCache { | ||
private cache; | ||
abortableMemoize(fn: (signal?: AbortSignal) => Promise<any>): (signal?: AbortSignal) => Promise<any>; | ||
} | ||
export declare abstract class BBI { | ||
protected bbi: GenericFilehandle; | ||
protected headerCache: AbortAwareCache; | ||
protected renameRefSeqs: (a: string) => string; | ||
getHeader: (abortSignal?: AbortSignal) => Promise<any>; | ||
constructor(options?: Options); | ||
getHeader: (abortSignal?: AbortSignal) => Promise<Header>; | ||
constructor(options?: { | ||
filehandle?: GenericFilehandle; | ||
path?: string; | ||
url?: string; | ||
renameRefSeqs?: (a: string) => string; | ||
}); | ||
private _getHeader; | ||
private getMainHeader; | ||
private isBigEndian; | ||
private getParsers; | ||
private readChromTree; | ||
protected getView(scale: number, abortSignal?: AbortSignal): Promise<BlockView>; | ||
private getUnzoomedView; | ||
private _getMainHeader; | ||
private _isBigEndian; | ||
private _readChromTree; | ||
protected getUnzoomedView(abortSignal?: AbortSignal): Promise<BlockView>; | ||
protected abstract getView(scale: number, abortSignal?: AbortSignal): Promise<BlockView>; | ||
/** | ||
* Gets features from a BigWig file | ||
* | ||
* @param refName - The chromosome name | ||
* @param start - The start of a region | ||
* @param end - The end of a region | ||
* @param opts - An object containing basesPerSpan (e.g. pixels per basepair) or scale used to infer the zoomLevel to use | ||
*/ | ||
getFeatureStream(refName: string, start: number, end: number, opts?: { | ||
basesPerSpan?: number; | ||
scale?: number; | ||
signal?: AbortSignal; | ||
}): Promise<Observable<Feature[]>>; | ||
getFeatures(refName: string, start: number, end: number, opts?: { | ||
basesPerSpan?: number; | ||
scale?: number; | ||
signal?: AbortSignal; | ||
}): Promise<Feature[]>; | ||
} | ||
export {}; |
413
dist/bbi.js
@@ -8,3 +8,3 @@ "use strict"; | ||
}); | ||
exports.default = void 0; | ||
exports.BBI = void 0; | ||
@@ -27,4 +27,8 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); | ||
var _blockView = _interopRequireDefault(require("./blockView")); | ||
var _rxjs = require("rxjs"); | ||
var _operators = require("rxjs/operators"); | ||
var _blockView = require("./blockView"); | ||
var _util = require("./util"); | ||
@@ -35,6 +39,2 @@ | ||
/* | ||
* Takes a function that has one argument, abortSignal, that returns a promise | ||
* and it works by retrying the function if a previous attempt to initialize the parse cache was aborted | ||
*/ | ||
var AbortAwareCache = | ||
@@ -52,10 +52,10 @@ /*#__PURE__*/ | ||
var cache = this.cache; | ||
return function abortableMemoizeFn(abortSignal) { | ||
return function abortableMemoizeFn(signal) { | ||
if (!cache.has(fn)) { | ||
var fnReturn = fn(abortSignal); | ||
var fnReturn = fn(signal); | ||
cache.set(fn, fnReturn); | ||
if (abortSignal) { | ||
if (signal) { | ||
fnReturn.catch(function () { | ||
if (abortSignal.aborted) cache.delete(fn); | ||
if (signal.aborted) cache.delete(fn); | ||
}); | ||
@@ -69,3 +69,3 @@ } | ||
if (e.code === 'ERR_ABORTED' || e.name === 'AbortError') { | ||
return fn(abortSignal); | ||
return fn(signal); | ||
} | ||
@@ -81,10 +81,39 @@ | ||
var BBIFile = | ||
function getParsers(isBE) { | ||
var le = isBE ? 'big' : 'little'; | ||
var headerParser = new _binaryParser.Parser().endianess(le).int32('magic').uint16('version').uint16('numZoomLevels').uint64('chromTreeOffset').uint64('unzoomedDataOffset').uint64('unzoomedIndexOffset').uint16('fieldCount').uint16('definedFieldCount').uint64('asOffset') // autoSql offset, used in bigbed | ||
.uint64('totalSummaryOffset').uint32('uncompressBufSize').uint64('extHeaderOffset') // name index offset, used in bigbed | ||
.array('zoomLevels', { | ||
length: 'numZoomLevels', | ||
type: new _binaryParser.Parser().uint32('reductionLevel').uint32('reserved').uint64('dataOffset').uint64('indexOffset') | ||
}); | ||
var totalSummaryParser = new _binaryParser.Parser().endianess(le).uint64('basesCovered').double('scoreMin').double('scoreMax').double('scoreSum').double('scoreSumSquares'); | ||
var chromTreeParser = new _binaryParser.Parser().endianess(le).uint32('magic').uint32('blockSize').uint32('keySize').uint32('valSize').uint64('itemCount'); | ||
var isLeafNode = new _binaryParser.Parser().endianess(le).uint8('isLeafNode').skip(1).uint16('cnt'); | ||
return { | ||
chromTreeParser: chromTreeParser, | ||
totalSummaryParser: totalSummaryParser, | ||
headerParser: headerParser, | ||
isLeafNode: isLeafNode | ||
}; | ||
} | ||
var BBI = | ||
/*#__PURE__*/ | ||
function () { | ||
function BBIFile() { | ||
/* fetch and parse header information from a bigwig or bigbed file | ||
* @param abortSignal - abort the operation, can be null | ||
* @return a Header object | ||
*/ | ||
/* | ||
* @param filehandle - a filehandle from generic-filehandle or implementing something similar to the node10 fs.promises API | ||
* @param path - a Local file path as a string | ||
* @param url - a URL string | ||
* @param renameRefSeqs - an optional method to rename the internal reference sequences using a mapping function | ||
*/ | ||
function BBI() { | ||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
(0, _classCallCheck2.default)(this, BBIFile); | ||
(0, _classCallCheck2.default)(this, BBI); | ||
(0, _defineProperty2.default)(this, "bbi", void 0); | ||
(0, _defineProperty2.default)(this, "fileType", void 0); | ||
(0, _defineProperty2.default)(this, "headerCache", void 0); | ||
@@ -103,3 +132,2 @@ (0, _defineProperty2.default)(this, "renameRefSeqs", void 0); | ||
this.headerCache = new AbortAwareCache(); | ||
this.fileType = ''; | ||
@@ -119,3 +147,3 @@ if (filehandle) { | ||
(0, _createClass2.default)(BBIFile, [{ | ||
(0, _createClass2.default)(BBI, [{ | ||
key: "_getHeader", | ||
@@ -132,3 +160,3 @@ value: function () { | ||
_context.next = 2; | ||
return this.isBigEndian(abortSignal); | ||
return this._isBigEndian(abortSignal); | ||
@@ -138,3 +166,3 @@ case 2: | ||
_context.next = 5; | ||
return this.getMainHeader(abortSignal); | ||
return this._getMainHeader(abortSignal); | ||
@@ -144,3 +172,3 @@ case 5: | ||
_context.next = 8; | ||
return this.readChromTree(abortSignal); | ||
return this._readChromTree(abortSignal); | ||
@@ -168,5 +196,5 @@ case 8: | ||
}, { | ||
key: "getMainHeader", | ||
key: "_getMainHeader", | ||
value: function () { | ||
var _getMainHeader = (0, _asyncToGenerator2.default)( | ||
var _getMainHeader2 = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
@@ -179,15 +207,11 @@ _regenerator.default.mark(function _callee2(abortSignal) { | ||
case 0: | ||
_context2.t0 = this; | ||
_context2.t0 = getParsers; | ||
_context2.next = 3; | ||
return this.isBigEndian(); | ||
return this._isBigEndian(); | ||
case 3: | ||
_context2.t1 = _context2.sent; | ||
_context2.next = 6; | ||
return _context2.t0.getParsers.call(_context2.t0, _context2.t1); | ||
case 6: | ||
ret = _context2.sent; | ||
ret = (0, _context2.t0)(_context2.t1); | ||
buf = Buffer.alloc(2000); | ||
_context2.next = 10; | ||
_context2.next = 8; | ||
return this.bbi.read(buf, 0, 2000, 0, { | ||
@@ -197,5 +221,5 @@ signal: abortSignal | ||
case 10: | ||
case 8: | ||
header = ret.headerParser.parse(buf).result; | ||
this.fileType = header.magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig'; | ||
header.fileType = header.magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig'; | ||
@@ -213,3 +237,3 @@ if (header.asOffset) { | ||
case 15: | ||
case 13: | ||
case "end": | ||
@@ -222,12 +246,12 @@ return _context2.stop(); | ||
function getMainHeader(_x2) { | ||
return _getMainHeader.apply(this, arguments); | ||
function _getMainHeader(_x2) { | ||
return _getMainHeader2.apply(this, arguments); | ||
} | ||
return getMainHeader; | ||
return _getMainHeader; | ||
}() | ||
}, { | ||
key: "isBigEndian", | ||
key: "_isBigEndian", | ||
value: function () { | ||
var _isBigEndian = (0, _asyncToGenerator2.default)( | ||
var _isBigEndian2 = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
@@ -277,32 +301,13 @@ _regenerator.default.mark(function _callee3(abortSignal) { | ||
function isBigEndian(_x3) { | ||
return _isBigEndian.apply(this, arguments); | ||
function _isBigEndian(_x3) { | ||
return _isBigEndian2.apply(this, arguments); | ||
} | ||
return isBigEndian; | ||
}() | ||
}, { | ||
key: "getParsers", | ||
value: function getParsers(isBE) { | ||
var le = isBE ? 'big' : 'little'; | ||
var headerParser = new _binaryParser.Parser().endianess(le).int32('magic').uint16('version').uint16('numZoomLevels').uint64('chromTreeOffset').uint64('unzoomedDataOffset').uint64('unzoomedIndexOffset').uint16('fieldCount').uint16('definedFieldCount').uint64('asOffset').uint64('totalSummaryOffset').uint32('uncompressBufSize').skip(8) // reserved | ||
.array('zoomLevels', { | ||
length: 'numZoomLevels', | ||
type: new _binaryParser.Parser().uint32('reductionLevel').uint32('reserved').uint64('dataOffset').uint64('indexOffset') | ||
}); | ||
var totalSummaryParser = new _binaryParser.Parser().endianess(le).uint64('basesCovered').double('scoreMin').double('scoreMax').double('scoreSum').double('scoreSumSquares'); | ||
var chromTreeParser = new _binaryParser.Parser().endianess(le).uint32('magic').uint32('blockSize').uint32('keySize').uint32('valSize').uint64('itemCount'); | ||
var isLeafNode = new _binaryParser.Parser().endianess(le).uint8('isLeafNode').skip(1).uint16('cnt'); | ||
return { | ||
chromTreeParser: chromTreeParser, | ||
totalSummaryParser: totalSummaryParser, | ||
headerParser: headerParser, | ||
isLeafNode: isLeafNode | ||
}; | ||
} // todo: add progress if long running | ||
return _isBigEndian; | ||
}() // todo: add progress if long running | ||
}, { | ||
key: "readChromTree", | ||
key: "_readChromTree", | ||
value: function () { | ||
var _readChromTree = (0, _asyncToGenerator2.default)( | ||
var _readChromTree2 = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
@@ -312,3 +317,3 @@ _regenerator.default.mark(function _callee5(abortSignal) { | ||
var header, isBE, le, refsByNumber, refsByName, chromTreeOffset, unzoomedDataOffset, data, p, ret, leafNodeParser, nonleafNodeParser, rootNodeOffset, bptReadNode; | ||
var header, isBE, le, refsByNumber, refsByName, chromTreeOffset, unzoomedDataOffset, data, p, keySize, leafNodeParser, nonleafNodeParser, rootNodeOffset, bptReadNode; | ||
return _regenerator.default.wrap(function _callee5$(_context5) { | ||
@@ -319,3 +324,3 @@ while (1) { | ||
_context5.next = 2; | ||
return this.getMainHeader(abortSignal); | ||
return this._getMainHeader(abortSignal); | ||
@@ -325,3 +330,3 @@ case 2: | ||
_context5.next = 5; | ||
return this.isBigEndian(abortSignal); | ||
return this._isBigEndian(abortSignal); | ||
@@ -347,13 +352,9 @@ case 5: | ||
case 15: | ||
_context5.next = 17; | ||
return this.getParsers(isBE); | ||
case 17: | ||
p = _context5.sent; | ||
ret = p.chromTreeParser.parse(data).result; | ||
p = getParsers(isBE); | ||
keySize = p.chromTreeParser.parse(data).result.keySize; | ||
leafNodeParser = new _binaryParser.Parser().endianess(le).string('key', { | ||
stripNull: true, | ||
length: ret.keySize | ||
length: keySize | ||
}).uint32('refId').uint32('refSize'); | ||
nonleafNodeParser = new _binaryParser.Parser().endianess(le).skip(ret.keySize).uint64('childOffset'); | ||
nonleafNodeParser = new _binaryParser.Parser().endianess(le).skip(keySize).uint64('childOffset'); | ||
rootNodeOffset = 32; | ||
@@ -390,3 +391,3 @@ | ||
if (!(n < cnt)) { | ||
_context4.next = 28; | ||
_context4.next = 14; | ||
break; | ||
@@ -399,30 +400,23 @@ } | ||
case 10: | ||
if (!isLeafNode) { | ||
_context4.next = 19; | ||
break; | ||
if (isLeafNode) { | ||
leafRet = leafNodeParser.parse(data.slice(offset)); | ||
offset += leafRet.offset; | ||
_leafRet$result = leafRet.result, key = _leafRet$result.key, refId = _leafRet$result.refId, refSize = _leafRet$result.refSize; | ||
refRec = { | ||
name: key, | ||
id: refId, | ||
length: refSize | ||
}; | ||
refsByName[_this.renameRefSeqs(key)] = refId; | ||
refsByNumber[refId] = refRec; | ||
} else { | ||
// parse index node | ||
nonleafRet = nonleafNodeParser.parse(data.slice(offset)); | ||
childOffset = nonleafRet.result.childOffset; | ||
offset += nonleafRet.offset; | ||
childOffset -= chromTreeOffset; | ||
bptReadNode(childOffset); | ||
} | ||
leafRet = leafNodeParser.parse(data.slice(offset)); | ||
offset += leafRet.offset; | ||
_leafRet$result = leafRet.result, key = _leafRet$result.key, refId = _leafRet$result.refId, refSize = _leafRet$result.refSize; | ||
refRec = { | ||
name: key, | ||
id: refId, | ||
length: refSize | ||
}; | ||
refsByName[_this.renameRefSeqs(key)] = refId; | ||
refsByNumber[refId] = refRec; | ||
_context4.next = 25; | ||
break; | ||
case 19: | ||
// parse index node | ||
nonleafRet = nonleafNodeParser.parse(data.slice(offset)); | ||
childOffset = nonleafRet.result.childOffset; | ||
offset += nonleafRet.offset; | ||
childOffset -= chromTreeOffset; | ||
_context4.next = 25; | ||
return bptReadNode(childOffset); | ||
case 25: | ||
case 11: | ||
n += 1; | ||
@@ -432,3 +426,3 @@ _context4.next = 7; | ||
case 28: | ||
case 14: | ||
case "end": | ||
@@ -446,6 +440,6 @@ return _context4.stop(); | ||
_context5.next = 25; | ||
_context5.next = 23; | ||
return bptReadNode(rootNodeOffset); | ||
case 25: | ||
case 23: | ||
return _context5.abrupt("return", { | ||
@@ -456,3 +450,3 @@ refsByName: refsByName, | ||
case 26: | ||
case 24: | ||
case "end": | ||
@@ -465,16 +459,20 @@ return _context5.stop(); | ||
function readChromTree(_x4) { | ||
return _readChromTree.apply(this, arguments); | ||
function _readChromTree(_x4) { | ||
return _readChromTree2.apply(this, arguments); | ||
} | ||
return readChromTree; | ||
}() //todo: memoize | ||
return _readChromTree; | ||
}() | ||
/* | ||
* fetches the "unzoomed" view of the bigwig data. this is the default for bigbed | ||
* @param abortSignal - a signal to optionally abort this operation | ||
*/ | ||
}, { | ||
key: "getView", | ||
key: "getUnzoomedView", | ||
value: function () { | ||
var _getView = (0, _asyncToGenerator2.default)( | ||
var _getUnzoomedView = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee6(scale, abortSignal) { | ||
var _ref2, zoomLevels, refsByName, fileSize, isBigEndian, uncompressBufSize, bbi, basesPerPx, maxLevel, i, zh, indexLength; | ||
_regenerator.default.mark(function _callee6(abortSignal) { | ||
var _ref2, unzoomedIndexOffset, zoomLevels, refsByName, uncompressBufSize, isBigEndian, fileType, nzl, cirLen; | ||
@@ -490,108 +488,173 @@ return _regenerator.default.wrap(function _callee6$(_context6) { | ||
_ref2 = _context6.sent; | ||
unzoomedIndexOffset = _ref2.unzoomedIndexOffset; | ||
zoomLevels = _ref2.zoomLevels; | ||
refsByName = _ref2.refsByName; | ||
fileSize = _ref2.fileSize; | ||
uncompressBufSize = _ref2.uncompressBufSize; | ||
isBigEndian = _ref2.isBigEndian; | ||
uncompressBufSize = _ref2.uncompressBufSize; | ||
bbi = this.bbi; | ||
basesPerPx = 1 / scale; | ||
maxLevel = zoomLevels.length; | ||
fileType = _ref2.fileType; | ||
nzl = zoomLevels[0]; | ||
cirLen = nzl ? nzl.dataOffset - unzoomedIndexOffset : 4000; | ||
return _context6.abrupt("return", new _blockView.BlockView(this.bbi, refsByName, unzoomedIndexOffset, cirLen, isBigEndian, uncompressBufSize > 0, fileType)); | ||
if (!fileSize) { | ||
// if we don't know the file size, we can't fetch the highest zoom level :-( | ||
maxLevel -= 1; | ||
} | ||
case 12: | ||
case "end": | ||
return _context6.stop(); | ||
} | ||
} | ||
}, _callee6, this); | ||
})); | ||
i = maxLevel; | ||
function getUnzoomedView(_x6) { | ||
return _getUnzoomedView.apply(this, arguments); | ||
} | ||
case 13: | ||
if (!(i > 0)) { | ||
_context6.next = 21; | ||
return getUnzoomedView; | ||
}() | ||
/* | ||
* abstract method - get the view for a given scale | ||
*/ | ||
}, { | ||
key: "getFeatureStream", | ||
/** | ||
* Gets features from a BigWig file | ||
* | ||
* @param refName - The chromosome name | ||
* @param start - The start of a region | ||
* @param end - The end of a region | ||
* @param opts - An object containing basesPerSpan (e.g. pixels per basepair) or scale used to infer the zoomLevel to use | ||
*/ | ||
value: function () { | ||
var _getFeatureStream = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee7(refName, start, end) { | ||
var opts, | ||
chrName, | ||
view, | ||
_args7 = arguments; | ||
return _regenerator.default.wrap(function _callee7$(_context7) { | ||
while (1) { | ||
switch (_context7.prev = _context7.next) { | ||
case 0: | ||
opts = _args7.length > 3 && _args7[3] !== undefined ? _args7[3] : { | ||
scale: 1 | ||
}; | ||
_context7.next = 3; | ||
return this.getHeader(opts.signal); | ||
case 3: | ||
chrName = this.renameRefSeqs(refName); | ||
if (!opts.basesPerSpan) { | ||
_context7.next = 10; | ||
break; | ||
} | ||
zh = zoomLevels[i]; | ||
_context7.next = 7; | ||
return this.getView(1 / opts.basesPerSpan, opts.signal); | ||
if (!(zh && zh.reductionLevel <= 2 * basesPerPx)) { | ||
_context6.next = 18; | ||
case 7: | ||
view = _context7.sent; | ||
_context7.next = 19; | ||
break; | ||
case 10: | ||
if (!opts.scale) { | ||
_context7.next = 16; | ||
break; | ||
} | ||
indexLength = i < zoomLevels.length - 1 ? zoomLevels[i + 1].dataOffset - zh.indexOffset : fileSize - 4 - zh.indexOffset; | ||
return _context6.abrupt("return", new _blockView.default(bbi, refsByName, zh.indexOffset, indexLength, isBigEndian, uncompressBufSize > 0, 'summary')); | ||
_context7.next = 13; | ||
return this.getView(opts.scale, opts.signal); | ||
case 18: | ||
i -= 1; | ||
_context6.next = 13; | ||
case 13: | ||
view = _context7.sent; | ||
_context7.next = 19; | ||
break; | ||
case 16: | ||
_context7.next = 18; | ||
return this.getView(1, opts.signal); | ||
case 18: | ||
view = _context7.sent; | ||
case 19: | ||
if (view) { | ||
_context7.next = 21; | ||
break; | ||
} | ||
throw new Error('unable to get block view for data'); | ||
case 21: | ||
return _context6.abrupt("return", this.getUnzoomedView(abortSignal)); | ||
return _context7.abrupt("return", new _rxjs.Observable(function (observer) { | ||
view.readWigData(chrName, start, end, observer, opts); | ||
})); | ||
case 22: | ||
case "end": | ||
return _context6.stop(); | ||
return _context7.stop(); | ||
} | ||
} | ||
}, _callee6, this); | ||
}, _callee7, this); | ||
})); | ||
function getView(_x6, _x7) { | ||
return _getView.apply(this, arguments); | ||
function getFeatureStream(_x7, _x8, _x9) { | ||
return _getFeatureStream.apply(this, arguments); | ||
} | ||
return getView; | ||
}() //todo memoize | ||
return getFeatureStream; | ||
}() | ||
}, { | ||
key: "getUnzoomedView", | ||
key: "getFeatures", | ||
value: function () { | ||
var _getUnzoomedView = (0, _asyncToGenerator2.default)( | ||
var _getFeatures = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee7(abortSignal) { | ||
var _ref3, unzoomedIndexOffset, zoomLevels, refsByName, uncompressBufSize, isBigEndian, bbi, fileType, cirLen, nzl; | ||
return _regenerator.default.wrap(function _callee7$(_context7) { | ||
_regenerator.default.mark(function _callee8(refName, start, end) { | ||
var opts, | ||
ob, | ||
ret, | ||
_args8 = arguments; | ||
return _regenerator.default.wrap(function _callee8$(_context8) { | ||
while (1) { | ||
switch (_context7.prev = _context7.next) { | ||
switch (_context8.prev = _context8.next) { | ||
case 0: | ||
_context7.next = 2; | ||
return this.getHeader(abortSignal); | ||
opts = _args8.length > 3 && _args8[3] !== undefined ? _args8[3] : { | ||
scale: 1 | ||
}; | ||
_context8.next = 3; | ||
return this.getFeatureStream(refName, start, end, opts); | ||
case 2: | ||
_ref3 = _context7.sent; | ||
unzoomedIndexOffset = _ref3.unzoomedIndexOffset; | ||
zoomLevels = _ref3.zoomLevels; | ||
refsByName = _ref3.refsByName; | ||
uncompressBufSize = _ref3.uncompressBufSize; | ||
isBigEndian = _ref3.isBigEndian; | ||
bbi = this.bbi, fileType = this.fileType; | ||
cirLen = 4000; | ||
nzl = zoomLevels[0]; | ||
case 3: | ||
ob = _context8.sent; | ||
_context8.next = 6; | ||
return ob.pipe((0, _operators.reduce)(function (acc, curr) { | ||
return acc.concat(curr); | ||
})).toPromise(); | ||
if (nzl) { | ||
cirLen = nzl.dataOffset - unzoomedIndexOffset; | ||
} | ||
case 6: | ||
ret = _context8.sent; | ||
return _context8.abrupt("return", ret || []); | ||
return _context7.abrupt("return", new _blockView.default(bbi, refsByName, unzoomedIndexOffset, cirLen, isBigEndian, uncompressBufSize > 0, fileType)); | ||
case 13: | ||
case 8: | ||
case "end": | ||
return _context7.stop(); | ||
return _context8.stop(); | ||
} | ||
} | ||
}, _callee7, this); | ||
}, _callee8, this); | ||
})); | ||
function getUnzoomedView(_x8) { | ||
return _getUnzoomedView.apply(this, arguments); | ||
function getFeatures(_x10, _x11, _x12) { | ||
return _getFeatures.apply(this, arguments); | ||
} | ||
return getUnzoomedView; | ||
return getFeatures; | ||
}() | ||
}]); | ||
return BBIFile; | ||
return BBI; | ||
}(); | ||
exports.default = BBIFile; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYmkudHMiXSwibmFtZXMiOlsiQklHX1dJR19NQUdJQyIsIkJJR19CRURfTUFHSUMiLCJBYm9ydEF3YXJlQ2FjaGUiLCJNYXAiLCJmbiIsImNhY2hlIiwiYWJvcnRhYmxlTWVtb2l6ZUZuIiwiYWJvcnRTaWduYWwiLCJoYXMiLCJmblJldHVybiIsInNldCIsImNhdGNoIiwiYWJvcnRlZCIsImRlbGV0ZSIsImdldCIsImUiLCJjb2RlIiwibmFtZSIsIkJCSUZpbGUiLCJvcHRpb25zIiwiZmlsZWhhbmRsZSIsInJlbmFtZVJlZlNlcXMiLCJwYXRoIiwidXJsIiwicyIsImhlYWRlckNhY2hlIiwiZmlsZVR5cGUiLCJiYmkiLCJSZW1vdGVGaWxlIiwiTG9jYWxGaWxlIiwiRXJyb3IiLCJnZXRIZWFkZXIiLCJhYm9ydGFibGVNZW1vaXplIiwiX2dldEhlYWRlciIsImJpbmQiLCJpc0JpZ0VuZGlhbiIsImdldE1haW5IZWFkZXIiLCJoZWFkZXIiLCJyZWFkQ2hyb21UcmVlIiwiY2hyb21zIiwiZ2V0UGFyc2VycyIsInJldCIsImJ1ZiIsIkJ1ZmZlciIsImFsbG9jIiwicmVhZCIsInNpZ25hbCIsImhlYWRlclBhcnNlciIsInBhcnNlIiwicmVzdWx0IiwibWFnaWMiLCJhc09mZnNldCIsImF1dG9TcWwiLCJzbGljZSIsImluZGV4T2YiLCJ0b1N0cmluZyIsInRvdGFsU3VtbWFyeU9mZnNldCIsInRhaWwiLCJ0b3RhbFN1bW1hcnkiLCJ0b3RhbFN1bW1hcnlQYXJzZXIiLCJhbGxvY1Vuc2FmZSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJpc0JFIiwibGUiLCJQYXJzZXIiLCJlbmRpYW5lc3MiLCJpbnQzMiIsInVpbnQxNiIsInVpbnQ2NCIsInVpbnQzMiIsInNraXAiLCJhcnJheSIsImxlbmd0aCIsInR5cGUiLCJkb3VibGUiLCJjaHJvbVRyZWVQYXJzZXIiLCJpc0xlYWZOb2RlIiwidWludDgiLCJyZWZzQnlOdW1iZXIiLCJyZWZzQnlOYW1lIiwiY2hyb21UcmVlT2Zmc2V0IiwidW56b29tZWREYXRhT2Zmc2V0IiwiZGF0YSIsInAiLCJsZWFmTm9kZVBhcnNlciIsInN0cmluZyIsInN0cmlwTnVsbCIsImtleVNpemUiLCJub25sZWFmTm9kZVBhcnNlciIsInJvb3ROb2RlT2Zmc2V0IiwiYnB0UmVhZE5vZGUiLCJjdXJyZW50T2Zmc2V0Iiwib2Zmc2V0IiwiY250IiwibiIsImxlYWZSZXQiLCJrZXkiLCJyZWZJZCIsInJlZlNpemUiLCJyZWZSZWMiLCJpZCIsIm5vbmxlYWZSZXQiLCJjaGlsZE9mZnNldCIsInNjYWxlIiwiem9vbUxldmVscyIsImZpbGVTaXplIiwidW5jb21wcmVzc0J1ZlNpemUiLCJiYXNlc1BlclB4IiwibWF4TGV2ZWwiLCJpIiwiemgiLCJyZWR1Y3Rpb25MZXZlbCIsImluZGV4TGVuZ3RoIiwiZGF0YU9mZnNldCIsImluZGV4T2Zmc2V0IiwiQmxvY2tWaWV3IiwiZ2V0VW56b29tZWRWaWV3IiwidW56b29tZWRJbmRleE9mZnNldCIsImNpckxlbiIsIm56bCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUEsSUFBTUEsYUFBYSxHQUFHLENBQUMsVUFBdkI7QUFDQSxJQUFNQyxhQUFhLEdBQUcsQ0FBQyxVQUF2Qjs7QUE4QkE7Ozs7SUFJTUMsZTs7Ozs7aURBQ2tFLElBQUlDLEdBQUosRTs7Ozs7cUNBR3BFQyxFLEVBQzZDO0FBQUEsVUFDckNDLEtBRHFDLEdBQzNCLElBRDJCLENBQ3JDQSxLQURxQztBQUU3QyxhQUFPLFNBQVNDLGtCQUFULENBQTRCQyxXQUE1QixFQUF1RDtBQUM1RCxZQUFJLENBQUNGLEtBQUssQ0FBQ0csR0FBTixDQUFVSixFQUFWLENBQUwsRUFBb0I7QUFDbEIsY0FBTUssUUFBUSxHQUFHTCxFQUFFLENBQUNHLFdBQUQsQ0FBbkI7QUFDQUYsVUFBQUEsS0FBSyxDQUFDSyxHQUFOLENBQVVOLEVBQVYsRUFBY0ssUUFBZDs7QUFDQSxjQUFJRixXQUFKLEVBQWlCO0FBQ2ZFLFlBQUFBLFFBQVEsQ0FBQ0UsS0FBVCxDQUFlLFlBQU07QUFDbkIsa0JBQUlKLFdBQVcsQ0FBQ0ssT0FBaEIsRUFBeUJQLEtBQUssQ0FBQ1EsTUFBTixDQUFhVCxFQUFiO0FBQzFCLGFBRkQ7QUFHRDs7QUFDRCxpQkFBT0MsS0FBSyxDQUFDUyxHQUFOLENBQVVWLEVBQVYsQ0FBUDtBQUNEOztBQUNELGVBQU9DLEtBQUssQ0FBQ1MsR0FBTixDQUFVVixFQUFWLEVBQWNPLEtBQWQsQ0FBb0IsVUFBQ0ksQ0FBRCxFQUFrQztBQUMzRCxjQUFJQSxDQUFDLENBQUNDLElBQUYsS0FBVyxhQUFYLElBQTRCRCxDQUFDLENBQUNFLElBQUYsS0FBVyxZQUEzQyxFQUF5RDtBQUN2RCxtQkFBT2IsRUFBRSxDQUFDRyxXQUFELENBQVQ7QUFDRDs7QUFDRCxnQkFBTVEsQ0FBTjtBQUNELFNBTE0sQ0FBUDtBQU1ELE9BakJEO0FBa0JEOzs7OztJQUcyQkcsTzs7O0FBTzVCLHFCQUEwQztBQUFBLFFBQXZCQyxPQUF1Qix1RUFBSixFQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFDaENDLFVBRGdDLEdBQ1NELE9BRFQsQ0FDaENDLFVBRGdDO0FBQUEsUUFDcEJDLGFBRG9CLEdBQ1NGLE9BRFQsQ0FDcEJFLGFBRG9CO0FBQUEsUUFDTEMsSUFESyxHQUNTSCxPQURULENBQ0xHLElBREs7QUFBQSxRQUNDQyxHQURELEdBQ1NKLE9BRFQsQ0FDQ0ksR0FERDs7QUFFeEMsU0FBS0YsYUFBTCxHQUFxQkEsYUFBYSxJQUFLLFVBQUNHLENBQUQ7QUFBQSxhQUF1QkEsQ0FBdkI7QUFBQSxLQUF2Qzs7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLElBQUl2QixlQUFKLEVBQW5CO0FBQ0EsU0FBS3dCLFFBQUwsR0FBZ0IsRUFBaEI7O0FBQ0EsUUFBSU4sVUFBSixFQUFnQjtBQUNkLFdBQUtPLEdBQUwsR0FBV1AsVUFBWDtBQUNELEtBRkQsTUFFTyxJQUFJRyxHQUFKLEVBQVM7QUFDZCxXQUFLSSxHQUFMLEdBQVcsSUFBSUMsNkJBQUosQ0FBZUwsR0FBZixDQUFYO0FBQ0QsS0FGTSxNQUVBLElBQUlELElBQUosRUFBVTtBQUNmLFdBQUtLLEdBQUwsR0FBVyxJQUFJRSw0QkFBSixDQUFjUCxJQUFkLENBQVg7QUFDRCxLQUZNLE1BRUE7QUFDTCxZQUFNLElBQUlRLEtBQUosQ0FBVSxlQUFWLENBQU47QUFDRDs7QUFDRCxTQUFLQyxTQUFMLEdBQWlCLEtBQUtOLFdBQUwsQ0FBaUJPLGdCQUFqQixDQUFrQyxLQUFLQyxVQUFMLENBQWdCQyxJQUFoQixDQUFxQixJQUFyQixDQUFsQyxDQUFqQjtBQUNEOzs7Ozs7O2lEQUV3QjNCLFc7Ozs7Ozs7dUJBQ0csS0FBSzRCLFdBQUwsQ0FBaUI1QixXQUFqQixDOzs7QUFBcEI0QixnQkFBQUEsVzs7dUJBQ2UsS0FBS0MsYUFBTCxDQUFtQjdCLFdBQW5CLEM7OztBQUFmOEIsZ0JBQUFBLE07O3VCQUNlLEtBQUtDLGFBQUwsQ0FBbUIvQixXQUFuQixDOzs7QUFBZmdDLGdCQUFBQSxNO2lGQUNNRixNLEVBQVdFLE07QUFBUUosa0JBQUFBLFdBQVcsRUFBWEE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0RBR0w1QixXOzs7Ozs7K0JBQ1IsSTs7dUJBQXNCLEtBQUs0QixXQUFMLEU7Ozs7O29DQUFqQkssVTs7O0FBQWpCQyxnQkFBQUEsRztBQUNBQyxnQkFBQUEsRyxHQUFNQyxNQUFNLENBQUNDLEtBQVAsQ0FBYSxJQUFiLEM7O3VCQUNOLEtBQUtqQixHQUFMLENBQVNrQixJQUFULENBQWNILEdBQWQsRUFBbUIsQ0FBbkIsRUFBc0IsSUFBdEIsRUFBNEIsQ0FBNUIsRUFBK0I7QUFBRUksa0JBQUFBLE1BQU0sRUFBRXZDO0FBQVYsaUJBQS9CLEM7OztBQUNBOEIsZ0JBQUFBLE0sR0FBU0ksR0FBRyxDQUFDTSxZQUFKLENBQWlCQyxLQUFqQixDQUF1Qk4sR0FBdkIsRUFBNEJPLE07QUFDM0MscUJBQUt2QixRQUFMLEdBQWdCVyxNQUFNLENBQUNhLEtBQVAsS0FBaUJqRCxhQUFqQixHQUFpQyxRQUFqQyxHQUE0QyxRQUE1RDs7QUFFQSxvQkFBSW9DLE1BQU0sQ0FBQ2MsUUFBWCxFQUFxQjtBQUNuQmQsa0JBQUFBLE1BQU0sQ0FBQ2UsT0FBUCxHQUFpQlYsR0FBRyxDQUFDVyxLQUFKLENBQVVoQixNQUFNLENBQUNjLFFBQWpCLEVBQTJCVCxHQUFHLENBQUNZLE9BQUosQ0FBWSxDQUFaLEVBQWVqQixNQUFNLENBQUNjLFFBQXRCLENBQTNCLEVBQTRESSxRQUE1RCxDQUFxRSxNQUFyRSxDQUFqQjtBQUNEOztBQUNELG9CQUFJbEIsTUFBTSxDQUFDbUIsa0JBQVgsRUFBK0I7QUFDdkJDLGtCQUFBQSxJQUR1QixHQUNoQmYsR0FBRyxDQUFDVyxLQUFKLENBQVVoQixNQUFNLENBQUNtQixrQkFBakIsQ0FEZ0I7QUFFN0JuQixrQkFBQUEsTUFBTSxDQUFDcUIsWUFBUCxHQUFzQmpCLEdBQUcsQ0FBQ2tCLGtCQUFKLENBQXVCWCxLQUF2QixDQUE2QlMsSUFBN0IsRUFBbUNSLE1BQXpEO0FBQ0Q7O2tEQUNNWixNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0RBR2lCOUIsVzs7Ozs7O0FBQ2xCbUMsZ0JBQUFBLEcsR0FBTUMsTUFBTSxDQUFDaUIsV0FBUCxDQUFtQixDQUFuQixDOzt1QkFDTixLQUFLakMsR0FBTCxDQUFTa0IsSUFBVCxDQUFjSCxHQUFkLEVBQW1CLENBQW5CLEVBQXNCLENBQXRCLEVBQXlCLENBQXpCLEVBQTRCO0FBQUVJLGtCQUFBQSxNQUFNLEVBQUV2QztBQUFWLGlCQUE1QixDOzs7QUFDRmtDLGdCQUFBQSxHLEdBQU1DLEdBQUcsQ0FBQ21CLFdBQUosQ0FBZ0IsQ0FBaEIsQzs7c0JBQ05wQixHQUFHLEtBQUt6QyxhQUFSLElBQXlCeUMsR0FBRyxLQUFLeEMsYTs7Ozs7a0RBQzVCLEs7OztBQUVUd0MsZ0JBQUFBLEdBQUcsR0FBR0MsR0FBRyxDQUFDb0IsV0FBSixDQUFnQixDQUFoQixDQUFOOztzQkFDSXJCLEdBQUcsS0FBS3pDLGFBQVIsSUFBeUJ5QyxHQUFHLEtBQUt4QyxhOzs7OztrREFDNUIsSTs7O3NCQUVILElBQUk2QixLQUFKLENBQVUsMEJBQVYsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OytCQUdXaUMsSSxFQUFvQjtBQUNyQyxVQUFNQyxFQUFFLEdBQUdELElBQUksR0FBRyxLQUFILEdBQVcsUUFBMUI7QUFDQSxVQUFNaEIsWUFBWSxHQUFHLElBQUlrQixvQkFBSixHQUNsQkMsU0FEa0IsQ0FDUkYsRUFEUSxFQUVsQkcsS0FGa0IsQ0FFWixPQUZZLEVBR2xCQyxNQUhrQixDQUdYLFNBSFcsRUFJbEJBLE1BSmtCLENBSVgsZUFKVyxFQUtsQkMsTUFMa0IsQ0FLWCxpQkFMVyxFQU1sQkEsTUFOa0IsQ0FNWCxvQkFOVyxFQU9sQkEsTUFQa0IsQ0FPWCxxQkFQVyxFQVFsQkQsTUFSa0IsQ0FRWCxZQVJXLEVBU2xCQSxNQVRrQixDQVNYLG1CQVRXLEVBVWxCQyxNQVZrQixDQVVYLFVBVlcsRUFXbEJBLE1BWGtCLENBV1gsb0JBWFcsRUFZbEJDLE1BWmtCLENBWVgsbUJBWlcsRUFhbEJDLElBYmtCLENBYWIsQ0FiYSxFQWFWO0FBYlUsT0FjbEJDLEtBZGtCLENBY1osWUFkWSxFQWNFO0FBQ25CQyxRQUFBQSxNQUFNLEVBQUUsZUFEVztBQUVuQkMsUUFBQUEsSUFBSSxFQUFFLElBQUlULG9CQUFKLEdBQ0hLLE1BREcsQ0FDSSxnQkFESixFQUVIQSxNQUZHLENBRUksVUFGSixFQUdIRCxNQUhHLENBR0ksWUFISixFQUlIQSxNQUpHLENBSUksYUFKSjtBQUZhLE9BZEYsQ0FBckI7QUF1QkEsVUFBTVYsa0JBQWtCLEdBQUcsSUFBSU0sb0JBQUosR0FDeEJDLFNBRHdCLENBQ2RGLEVBRGMsRUFFeEJLLE1BRndCLENBRWpCLGNBRmlCLEVBR3hCTSxNQUh3QixDQUdqQixVQUhpQixFQUl4QkEsTUFKd0IsQ0FJakIsVUFKaUIsRUFLeEJBLE1BTHdCLENBS2pCLFVBTGlCLEVBTXhCQSxNQU53QixDQU1qQixpQkFOaUIsQ0FBM0I7QUFRQSxVQUFNQyxlQUFlLEdBQUcsSUFBSVgsb0JBQUosR0FDckJDLFNBRHFCLENBQ1hGLEVBRFcsRUFFckJNLE1BRnFCLENBRWQsT0FGYyxFQUdyQkEsTUFIcUIsQ0FHZCxXQUhjLEVBSXJCQSxNQUpxQixDQUlkLFNBSmMsRUFLckJBLE1BTHFCLENBS2QsU0FMYyxFQU1yQkQsTUFOcUIsQ0FNZCxXQU5jLENBQXhCO0FBUUEsVUFBTVEsVUFBVSxHQUFHLElBQUlaLG9CQUFKLEdBQ2hCQyxTQURnQixDQUNORixFQURNLEVBRWhCYyxLQUZnQixDQUVWLFlBRlUsRUFHaEJQLElBSGdCLENBR1gsQ0FIVyxFQUloQkgsTUFKZ0IsQ0FJVCxLQUpTLENBQW5CO0FBTUEsYUFBTztBQUNMUSxRQUFBQSxlQUFlLEVBQWZBLGVBREs7QUFFTGpCLFFBQUFBLGtCQUFrQixFQUFsQkEsa0JBRks7QUFHTFosUUFBQUEsWUFBWSxFQUFaQSxZQUhLO0FBSUw4QixRQUFBQSxVQUFVLEVBQVZBO0FBSkssT0FBUDtBQU1ELEssQ0FFRDs7Ozs7OztrREFDNEJ0RSxXOzs7Ozs7Ozs7dUJBQ0wsS0FBSzZCLGFBQUwsQ0FBbUI3QixXQUFuQixDOzs7QUFBZjhCLGdCQUFBQSxNOzt1QkFDYSxLQUFLRixXQUFMLENBQWlCNUIsV0FBakIsQzs7O0FBQWJ3RCxnQkFBQUEsSTtBQUNBQyxnQkFBQUEsRSxHQUFLRCxJQUFJLEdBQUcsS0FBSCxHQUFXLFE7QUFDcEJnQixnQkFBQUEsWSxHQUFvQixFO0FBQ3BCQyxnQkFBQUEsVSxHQUFrQixFO0FBQ2hCQyxnQkFBQUEsZSxHQUFvQjVDLE0sQ0FBcEI0QyxlO0FBQ0ZDLGdCQUFBQSxrQixHQUF1QjdDLE0sQ0FBdkI2QyxrQjs7QUFFTix1QkFBT0Esa0JBQWtCLEdBQUcsQ0FBckIsS0FBMkIsQ0FBbEMsRUFBcUM7QUFDbkNBLGtCQUFBQSxrQkFBa0IsSUFBSSxDQUF0QjtBQUNEOztBQUVLQyxnQkFBQUEsSSxHQUFPeEMsTUFBTSxDQUFDQyxLQUFQLENBQWFzQyxrQkFBa0IsR0FBR0QsZUFBbEMsQzs7dUJBQ1AsS0FBS3RELEdBQUwsQ0FBU2tCLElBQVQsQ0FBY3NDLElBQWQsRUFBb0IsQ0FBcEIsRUFBdUJELGtCQUFrQixHQUFHRCxlQUE1QyxFQUE2REEsZUFBN0QsRUFBOEU7QUFBRW5DLGtCQUFBQSxNQUFNLEVBQUV2QztBQUFWLGlCQUE5RSxDOzs7O3VCQUVVLEtBQUtpQyxVQUFMLENBQWdCdUIsSUFBaEIsQzs7O0FBQVZxQixnQkFBQUEsQztBQUNBM0MsZ0JBQUFBLEcsR0FBTTJDLENBQUMsQ0FBQ1IsZUFBRixDQUFrQjVCLEtBQWxCLENBQXdCbUMsSUFBeEIsRUFBOEJsQyxNO0FBQ3BDb0MsZ0JBQUFBLGMsR0FBaUIsSUFBSXBCLG9CQUFKLEdBQ3BCQyxTQURvQixDQUNWRixFQURVLEVBRXBCc0IsTUFGb0IsQ0FFYixLQUZhLEVBRU47QUFBRUMsa0JBQUFBLFNBQVMsRUFBRSxJQUFiO0FBQW1CZCxrQkFBQUEsTUFBTSxFQUFFaEMsR0FBRyxDQUFDK0M7QUFBL0IsaUJBRk0sRUFHcEJsQixNQUhvQixDQUdiLE9BSGEsRUFJcEJBLE1BSm9CLENBSWIsU0FKYSxDO0FBS2pCbUIsZ0JBQUFBLGlCLEdBQW9CLElBQUl4QixvQkFBSixHQUN2QkMsU0FEdUIsQ0FDYkYsRUFEYSxFQUV2Qk8sSUFGdUIsQ0FFbEI5QixHQUFHLENBQUMrQyxPQUZjLEVBR3ZCbkIsTUFIdUIsQ0FHaEIsYUFIZ0IsQztBQUlwQnFCLGdCQUFBQSxjLEdBQWlCLEU7O0FBQ2pCQyxnQkFBQUEsVzs7Ozs7NENBQWMsa0JBQU9DLGFBQVA7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNkQyw0QkFBQUEsTUFEYyxHQUNMRCxhQURLOztBQUFBLGtDQUVkQyxNQUFNLElBQUlWLElBQUksQ0FBQ1YsTUFGRDtBQUFBO0FBQUE7QUFBQTs7QUFBQSxrQ0FFZSxJQUFJM0MsS0FBSixDQUFVLDhCQUFWLENBRmY7O0FBQUE7QUFHWlcsNEJBQUFBLEdBSFksR0FHTjJDLENBQUMsQ0FBQ1AsVUFBRixDQUFhN0IsS0FBYixDQUFtQm1DLElBQUksQ0FBQzlCLEtBQUwsQ0FBV3dDLE1BQVgsQ0FBbkIsQ0FITTtBQUFBLDBDQUlVcEQsR0FBRyxDQUFDUSxNQUpkLEVBSVY0QixVQUpVLGVBSVZBLFVBSlUsRUFJRWlCLEdBSkYsZUFJRUEsR0FKRjtBQUtsQkQsNEJBQUFBLE1BQU0sSUFBSXBELEdBQUcsQ0FBQ29ELE1BQWQ7QUFDU0UsNEJBQUFBLENBTlMsR0FNTCxDQU5LOztBQUFBO0FBQUEsa0NBTUZBLENBQUMsR0FBR0QsR0FORjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLG1DQU9WLDJCQUFnQnZGLFdBQWhCLENBUFU7O0FBQUE7QUFBQSxpQ0FRWnNFLFVBUlk7QUFBQTtBQUFBO0FBQUE7O0FBU1JtQiw0QkFBQUEsT0FUUSxHQVNFWCxjQUFjLENBQUNyQyxLQUFmLENBQXFCbUMsSUFBSSxDQUFDOUIsS0FBTCxDQUFXd0MsTUFBWCxDQUFyQixDQVRGO0FBVWRBLDRCQUFBQSxNQUFNLElBQUlHLE9BQU8sQ0FBQ0gsTUFBbEI7QUFWYyw4Q0FXa0JHLE9BQU8sQ0FBQy9DLE1BWDFCLEVBV05nRCxHQVhNLG1CQVdOQSxHQVhNLEVBV0RDLEtBWEMsbUJBV0RBLEtBWEMsRUFXTUMsT0FYTixtQkFXTUEsT0FYTjtBQVlSQyw0QkFBQUEsTUFaUSxHQVlDO0FBQUVuRiw4QkFBQUEsSUFBSSxFQUFFZ0YsR0FBUjtBQUFhSSw4QkFBQUEsRUFBRSxFQUFFSCxLQUFqQjtBQUF3QnpCLDhCQUFBQSxNQUFNLEVBQUUwQjtBQUFoQyw2QkFaRDtBQWFkbkIsNEJBQUFBLFVBQVUsQ0FBQyxLQUFJLENBQUMzRCxhQUFMLENBQW1CNEUsR0FBbkIsQ0FBRCxDQUFWLEdBQXNDQyxLQUF0QztBQUNBbkIsNEJBQUFBLFlBQVksQ0FBQ21CLEtBQUQsQ0FBWixHQUFzQkUsTUFBdEI7QUFkYztBQUFBOztBQUFBO0FBZ0JkO0FBQ01FLDRCQUFBQSxVQWpCUSxHQWlCS2IsaUJBQWlCLENBQUN6QyxLQUFsQixDQUF3Qm1DLElBQUksQ0FBQzlCLEtBQUwsQ0FBV3dDLE1BQVgsQ0FBeEIsQ0FqQkw7QUFrQlJVLDRCQUFBQSxXQWxCUSxHQWtCUUQsVUFBVSxDQUFDckQsTUFsQm5CLENBa0JSc0QsV0FsQlE7QUFtQmRWLDRCQUFBQSxNQUFNLElBQUlTLFVBQVUsQ0FBQ1QsTUFBckI7QUFDQVUsNEJBQUFBLFdBQVcsSUFBSXRCLGVBQWY7QUFwQmM7QUFBQSxtQ0FxQlJVLFdBQVcsQ0FBQ1ksV0FBRCxDQXJCSDs7QUFBQTtBQU1PUiw0QkFBQUEsQ0FBQyxJQUFJLENBTlo7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1COztrQ0FBZEosVzs7Ozs7O3VCQXlCQUEsV0FBVyxDQUFDRCxjQUFELEM7OztrREFDVjtBQUNMVixrQkFBQUEsVUFBVSxFQUFWQSxVQURLO0FBRUxELGtCQUFBQSxZQUFZLEVBQVpBO0FBRkssaUI7Ozs7Ozs7Ozs7Ozs7OztRQU1UOzs7Ozs7O2tEQUN3QnlCLEssRUFBZWpHLFc7Ozs7Ozs7O3VCQUM4QyxLQUFLd0IsU0FBTCxDQUFleEIsV0FBZixDOzs7O0FBQTNFa0csZ0JBQUFBLFUsU0FBQUEsVTtBQUFZekIsZ0JBQUFBLFUsU0FBQUEsVTtBQUFZMEIsZ0JBQUFBLFEsU0FBQUEsUTtBQUFVdkUsZ0JBQUFBLFcsU0FBQUEsVztBQUFhd0UsZ0JBQUFBLGlCLFNBQUFBLGlCO0FBQy9DaEYsZ0JBQUFBLEcsR0FBUSxJLENBQVJBLEc7QUFDRmlGLGdCQUFBQSxVLEdBQWEsSUFBSUosSztBQUNuQkssZ0JBQUFBLFEsR0FBV0osVUFBVSxDQUFDaEMsTTs7QUFDMUIsb0JBQUksQ0FBQ2lDLFFBQUwsRUFBZTtBQUNiO0FBQ0FHLGtCQUFBQSxRQUFRLElBQUksQ0FBWjtBQUNEOztBQUVRQyxnQkFBQUEsQyxHQUFJRCxROzs7c0JBQVVDLENBQUMsR0FBRyxDOzs7OztBQUNuQkMsZ0JBQUFBLEUsR0FBS04sVUFBVSxDQUFDSyxDQUFELEM7O3NCQUNqQkMsRUFBRSxJQUFJQSxFQUFFLENBQUNDLGNBQUgsSUFBcUIsSUFBSUosVTs7Ozs7QUFDM0JLLGdCQUFBQSxXLEdBQ0pILENBQUMsR0FBR0wsVUFBVSxDQUFDaEMsTUFBWCxHQUFvQixDQUF4QixHQUE0QmdDLFVBQVUsQ0FBQ0ssQ0FBQyxHQUFHLENBQUwsQ0FBVixDQUFrQkksVUFBbEIsR0FBK0JILEVBQUUsQ0FBQ0ksV0FBOUQsR0FBNEVULFFBQVEsR0FBRyxDQUFYLEdBQWVLLEVBQUUsQ0FBQ0ksVztrREFDekYsSUFBSUMsa0JBQUosQ0FDTHpGLEdBREssRUFFTHFELFVBRkssRUFHTCtCLEVBQUUsQ0FBQ0ksV0FIRSxFQUlMRixXQUpLLEVBS0w5RSxXQUxLLEVBTUx3RSxpQkFBaUIsR0FBRyxDQU5mLEVBT0wsU0FQSyxDOzs7QUFMbUJHLGdCQUFBQSxDQUFDLElBQUksQzs7Ozs7a0RBZ0I1QixLQUFLTyxlQUFMLENBQXFCOUcsV0FBckIsQzs7Ozs7Ozs7Ozs7Ozs7O1FBR1Q7Ozs7Ozs7a0RBQzhCQSxXOzs7Ozs7Ozt1QkFDa0UsS0FBS3dCLFNBQUwsQ0FDNUZ4QixXQUQ0RixDOzs7O0FBQXRGK0csZ0JBQUFBLG1CLFNBQUFBLG1CO0FBQXFCYixnQkFBQUEsVSxTQUFBQSxVO0FBQVl6QixnQkFBQUEsVSxTQUFBQSxVO0FBQVkyQixnQkFBQUEsaUIsU0FBQUEsaUI7QUFBbUJ4RSxnQkFBQUEsVyxTQUFBQSxXO0FBR2hFUixnQkFBQUEsRyxHQUFrQixJLENBQWxCQSxHLEVBQUtELFEsR0FBYSxJLENBQWJBLFE7QUFDVDZGLGdCQUFBQSxNLEdBQVMsSTtBQUNQQyxnQkFBQUEsRyxHQUFNZixVQUFVLENBQUMsQ0FBRCxDOztBQUN0QixvQkFBSWUsR0FBSixFQUFTO0FBQ1BELGtCQUFBQSxNQUFNLEdBQUdDLEdBQUcsQ0FBQ04sVUFBSixHQUFpQkksbUJBQTFCO0FBQ0Q7O2tEQUNNLElBQUlGLGtCQUFKLENBQWN6RixHQUFkLEVBQW1CcUQsVUFBbkIsRUFBK0JzQyxtQkFBL0IsRUFBb0RDLE1BQXBELEVBQTREcEYsV0FBNUQsRUFBeUV3RSxpQkFBaUIsR0FBRyxDQUE3RixFQUFnR2pGLFFBQWhHLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJzZXIgfSBmcm9tICdAZ21vZC9iaW5hcnktcGFyc2VyJ1xuaW1wb3J0IHsgTG9jYWxGaWxlLCBSZW1vdGVGaWxlIH0gZnJvbSAnZ2VuZXJpYy1maWxlaGFuZGxlJ1xuaW1wb3J0IHsgR2VuZXJpY0ZpbGVoYW5kbGUgfSBmcm9tICdnZW5lcmljLWZpbGVoYW5kbGUnXG5pbXBvcnQgQmxvY2tWaWV3IGZyb20gJy4vYmxvY2tWaWV3J1xuaW1wb3J0IHsgYWJvcnRCcmVha1BvaW50LCBBYm9ydEVycm9yIH0gZnJvbSAnLi91dGlsJ1xuXG5jb25zdCBCSUdfV0lHX01BR0lDID0gLTIwMDM4Mjk3MjJcbmNvbnN0IEJJR19CRURfTUFHSUMgPSAtMjAyMTAwMjUxN1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGZpbGVoYW5kbGU/OiBHZW5lcmljRmlsZWhhbmRsZVxuICBwYXRoPzogc3RyaW5nXG4gIHVybD86IHN0cmluZ1xuICByZW5hbWVSZWZTZXFzPzogKGE6IHN0cmluZykgPT4gc3RyaW5nXG59XG5cbmludGVyZmFjZSBTdGF0aXN0aWNzIHtcbiAgc2NvcmVTdW06IG51bWJlclxuICBiYXNlc0NvdmVyZWQ6IG51bWJlclxuICBzY29yZVN1bVNxdWFyZXM6IG51bWJlclxufVxuaW50ZXJmYWNlIEhlYWRlciB7XG4gIGF1dG9TcWw6IHN0cmluZ1xuICB0b3RhbFN1bW1hcnk6IFN0YXRpc3RpY3NcbiAgem9vbUxldmVsczogYW55XG4gIHVuem9vbWVkSW5kZXhPZmZzZXQ6IG51bWJlclxuICB1bnpvb21lZERhdGFPZmZzZXQ6IG51bWJlclxuICB1bmNvbXByZXNzQnVmU2l6ZTogbnVtYmVyXG4gIGNocm9tVHJlZU9mZnNldDogbnVtYmVyXG4gIGZpbGVTaXplOiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIENocm9tVHJlZSB7XG4gIHJlZnNCeU5hbWU6IGFueVxuICByZWZzQnlOdW1iZXI6IGFueVxufVxuXG4vKlxuICogVGFrZXMgYSBmdW5jdGlvbiB0aGF0IGhhcyBvbmUgYXJndW1lbnQsIGFib3J0U2lnbmFsLCB0aGF0IHJldHVybnMgYSBwcm9taXNlXG4gKiBhbmQgaXQgd29ya3MgYnkgcmV0cnlpbmcgdGhlIGZ1bmN0aW9uIGlmIGEgcHJldmlvdXMgYXR0ZW1wdCB0byBpbml0aWFsaXplIHRoZSBwYXJzZSBjYWNoZSB3YXMgYWJvcnRlZFxuICovXG5jbGFzcyBBYm9ydEF3YXJlQ2FjaGUge1xuICBwcml2YXRlIGNhY2hlOiBNYXA8KGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxhbnk+LCBhbnk+ID0gbmV3IE1hcCgpXG5cbiAgcHVibGljIGFib3J0YWJsZU1lbW9pemUoXG4gICAgZm46IChhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPGFueT4sXG4gICk6IChhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHsgY2FjaGUgfSA9IHRoaXNcbiAgICByZXR1cm4gZnVuY3Rpb24gYWJvcnRhYmxlTWVtb2l6ZUZuKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICAgIGlmICghY2FjaGUuaGFzKGZuKSkge1xuICAgICAgICBjb25zdCBmblJldHVybiA9IGZuKGFib3J0U2lnbmFsKVxuICAgICAgICBjYWNoZS5zZXQoZm4sIGZuUmV0dXJuKVxuICAgICAgICBpZiAoYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICBmblJldHVybi5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWJvcnRTaWduYWwuYWJvcnRlZCkgY2FjaGUuZGVsZXRlKGZuKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldChmbilcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWNoZS5nZXQoZm4pLmNhdGNoKChlOiBBYm9ydEVycm9yIHwgRE9NRXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChlLmNvZGUgPT09ICdFUlJfQUJPUlRFRCcgfHwgZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgICByZXR1cm4gZm4oYWJvcnRTaWduYWwpXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgQkJJRmlsZSB7XG4gIHByaXZhdGUgYmJpOiBHZW5lcmljRmlsZWhhbmRsZVxuICBwcml2YXRlIGZpbGVUeXBlOiBzdHJpbmdcbiAgcHJpdmF0ZSBoZWFkZXJDYWNoZTogQWJvcnRBd2FyZUNhY2hlXG4gIHByb3RlY3RlZCByZW5hbWVSZWZTZXFzOiAoYTogc3RyaW5nKSA9PiBzdHJpbmdcbiAgcHVibGljIGdldEhlYWRlcjogKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8YW55PlxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IGZpbGVoYW5kbGUsIHJlbmFtZVJlZlNlcXMsIHBhdGgsIHVybCB9ID0gb3B0aW9uc1xuICAgIHRoaXMucmVuYW1lUmVmU2VxcyA9IHJlbmFtZVJlZlNlcXMgfHwgKChzOiBzdHJpbmcpOiBzdHJpbmcgPT4gcylcbiAgICB0aGlzLmhlYWRlckNhY2hlID0gbmV3IEFib3J0QXdhcmVDYWNoZSgpXG4gICAgdGhpcy5maWxlVHlwZSA9ICcnXG4gICAgaWYgKGZpbGVoYW5kbGUpIHtcbiAgICAgIHRoaXMuYmJpID0gZmlsZWhhbmRsZVxuICAgIH0gZWxzZSBpZiAodXJsKSB7XG4gICAgICB0aGlzLmJiaSA9IG5ldyBSZW1vdGVGaWxlKHVybClcbiAgICB9IGVsc2UgaWYgKHBhdGgpIHtcbiAgICAgIHRoaXMuYmJpID0gbmV3IExvY2FsRmlsZShwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGZpbGUgZ2l2ZW4nKVxuICAgIH1cbiAgICB0aGlzLmdldEhlYWRlciA9IHRoaXMuaGVhZGVyQ2FjaGUuYWJvcnRhYmxlTWVtb2l6ZSh0aGlzLl9nZXRIZWFkZXIuYmluZCh0aGlzKSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2dldEhlYWRlcihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBpc0JpZ0VuZGlhbiA9IGF3YWl0IHRoaXMuaXNCaWdFbmRpYW4oYWJvcnRTaWduYWwpXG4gICAgY29uc3QgaGVhZGVyID0gYXdhaXQgdGhpcy5nZXRNYWluSGVhZGVyKGFib3J0U2lnbmFsKVxuICAgIGNvbnN0IGNocm9tcyA9IGF3YWl0IHRoaXMucmVhZENocm9tVHJlZShhYm9ydFNpZ25hbClcbiAgICByZXR1cm4geyAuLi5oZWFkZXIsIC4uLmNocm9tcywgaXNCaWdFbmRpYW4gfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRNYWluSGVhZGVyKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPEhlYWRlcj4ge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMuZ2V0UGFyc2Vycyhhd2FpdCB0aGlzLmlzQmlnRW5kaWFuKCkpXG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDIwMDApXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChidWYsIDAsIDIwMDAsIDAsIHsgc2lnbmFsOiBhYm9ydFNpZ25hbCB9KVxuICAgIGNvbnN0IGhlYWRlciA9IHJldC5oZWFkZXJQYXJzZXIucGFyc2UoYnVmKS5yZXN1bHRcbiAgICB0aGlzLmZpbGVUeXBlID0gaGVhZGVyLm1hZ2ljID09PSBCSUdfQkVEX01BR0lDID8gJ2JpZ2JlZCcgOiAnYmlnd2lnJ1xuXG4gICAgaWYgKGhlYWRlci5hc09mZnNldCkge1xuICAgICAgaGVhZGVyLmF1dG9TcWwgPSBidWYuc2xpY2UoaGVhZGVyLmFzT2Zmc2V0LCBidWYuaW5kZXhPZigwLCBoZWFkZXIuYXNPZmZzZXQpKS50b1N0cmluZygndXRmOCcpXG4gICAgfVxuICAgIGlmIChoZWFkZXIudG90YWxTdW1tYXJ5T2Zmc2V0KSB7XG4gICAgICBjb25zdCB0YWlsID0gYnVmLnNsaWNlKGhlYWRlci50b3RhbFN1bW1hcnlPZmZzZXQpXG4gICAgICBoZWFkZXIudG90YWxTdW1tYXJ5ID0gcmV0LnRvdGFsU3VtbWFyeVBhcnNlci5wYXJzZSh0YWlsKS5yZXN1bHRcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlclxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpc0JpZ0VuZGlhbihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChidWYsIDAsIDQsIDAsIHsgc2lnbmFsOiBhYm9ydFNpZ25hbCB9KVxuICAgIGxldCByZXQgPSBidWYucmVhZEludDMyTEUoMClcbiAgICBpZiAocmV0ID09PSBCSUdfV0lHX01BR0lDIHx8IHJldCA9PT0gQklHX0JFRF9NQUdJQykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldCA9IGJ1Zi5yZWFkSW50MzJCRSgwKVxuICAgIGlmIChyZXQgPT09IEJJR19XSUdfTUFHSUMgfHwgcmV0ID09PSBCSUdfQkVEX01BR0lDKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBhIEJpZ1dpZy9CaWdCZWQgZmlsZScpXG4gIH1cblxuICBwcml2YXRlIGdldFBhcnNlcnMoaXNCRTogYm9vbGVhbik6IGFueSB7XG4gICAgY29uc3QgbGUgPSBpc0JFID8gJ2JpZycgOiAnbGl0dGxlJ1xuICAgIGNvbnN0IGhlYWRlclBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC5pbnQzMignbWFnaWMnKVxuICAgICAgLnVpbnQxNigndmVyc2lvbicpXG4gICAgICAudWludDE2KCdudW1ab29tTGV2ZWxzJylcbiAgICAgIC51aW50NjQoJ2Nocm9tVHJlZU9mZnNldCcpXG4gICAgICAudWludDY0KCd1bnpvb21lZERhdGFPZmZzZXQnKVxuICAgICAgLnVpbnQ2NCgndW56b29tZWRJbmRleE9mZnNldCcpXG4gICAgICAudWludDE2KCdmaWVsZENvdW50JylcbiAgICAgIC51aW50MTYoJ2RlZmluZWRGaWVsZENvdW50JylcbiAgICAgIC51aW50NjQoJ2FzT2Zmc2V0JylcbiAgICAgIC51aW50NjQoJ3RvdGFsU3VtbWFyeU9mZnNldCcpXG4gICAgICAudWludDMyKCd1bmNvbXByZXNzQnVmU2l6ZScpXG4gICAgICAuc2tpcCg4KSAvLyByZXNlcnZlZFxuICAgICAgLmFycmF5KCd6b29tTGV2ZWxzJywge1xuICAgICAgICBsZW5ndGg6ICdudW1ab29tTGV2ZWxzJyxcbiAgICAgICAgdHlwZTogbmV3IFBhcnNlcigpXG4gICAgICAgICAgLnVpbnQzMigncmVkdWN0aW9uTGV2ZWwnKVxuICAgICAgICAgIC51aW50MzIoJ3Jlc2VydmVkJylcbiAgICAgICAgICAudWludDY0KCdkYXRhT2Zmc2V0JylcbiAgICAgICAgICAudWludDY0KCdpbmRleE9mZnNldCcpLFxuICAgICAgfSlcblxuICAgIGNvbnN0IHRvdGFsU3VtbWFyeVBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC51aW50NjQoJ2Jhc2VzQ292ZXJlZCcpXG4gICAgICAuZG91YmxlKCdzY29yZU1pbicpXG4gICAgICAuZG91YmxlKCdzY29yZU1heCcpXG4gICAgICAuZG91YmxlKCdzY29yZVN1bScpXG4gICAgICAuZG91YmxlKCdzY29yZVN1bVNxdWFyZXMnKVxuXG4gICAgY29uc3QgY2hyb21UcmVlUGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAgICAuZW5kaWFuZXNzKGxlKVxuICAgICAgLnVpbnQzMignbWFnaWMnKVxuICAgICAgLnVpbnQzMignYmxvY2tTaXplJylcbiAgICAgIC51aW50MzIoJ2tleVNpemUnKVxuICAgICAgLnVpbnQzMigndmFsU2l6ZScpXG4gICAgICAudWludDY0KCdpdGVtQ291bnQnKVxuXG4gICAgY29uc3QgaXNMZWFmTm9kZSA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC51aW50OCgnaXNMZWFmTm9kZScpXG4gICAgICAuc2tpcCgxKVxuICAgICAgLnVpbnQxNignY250JylcblxuICAgIHJldHVybiB7XG4gICAgICBjaHJvbVRyZWVQYXJzZXIsXG4gICAgICB0b3RhbFN1bW1hcnlQYXJzZXIsXG4gICAgICBoZWFkZXJQYXJzZXIsXG4gICAgICBpc0xlYWZOb2RlLFxuICAgIH1cbiAgfVxuXG4gIC8vIHRvZG86IGFkZCBwcm9ncmVzcyBpZiBsb25nIHJ1bm5pbmdcbiAgcHJpdmF0ZSBhc3luYyByZWFkQ2hyb21UcmVlKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPENocm9tVHJlZT4ge1xuICAgIGNvbnN0IGhlYWRlciA9IGF3YWl0IHRoaXMuZ2V0TWFpbkhlYWRlcihhYm9ydFNpZ25hbClcbiAgICBjb25zdCBpc0JFID0gYXdhaXQgdGhpcy5pc0JpZ0VuZGlhbihhYm9ydFNpZ25hbClcbiAgICBjb25zdCBsZSA9IGlzQkUgPyAnYmlnJyA6ICdsaXR0bGUnXG4gICAgY29uc3QgcmVmc0J5TnVtYmVyOiBhbnkgPSB7fVxuICAgIGNvbnN0IHJlZnNCeU5hbWU6IGFueSA9IHt9XG4gICAgY29uc3QgeyBjaHJvbVRyZWVPZmZzZXQgfSA9IGhlYWRlclxuICAgIGxldCB7IHVuem9vbWVkRGF0YU9mZnNldCB9ID0gaGVhZGVyXG5cbiAgICB3aGlsZSAodW56b29tZWREYXRhT2Zmc2V0ICUgNCAhPT0gMCkge1xuICAgICAgdW56b29tZWREYXRhT2Zmc2V0ICs9IDFcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKHVuem9vbWVkRGF0YU9mZnNldCAtIGNocm9tVHJlZU9mZnNldClcbiAgICBhd2FpdCB0aGlzLmJiaS5yZWFkKGRhdGEsIDAsIHVuem9vbWVkRGF0YU9mZnNldCAtIGNocm9tVHJlZU9mZnNldCwgY2hyb21UcmVlT2Zmc2V0LCB7IHNpZ25hbDogYWJvcnRTaWduYWwgfSlcblxuICAgIGNvbnN0IHAgPSBhd2FpdCB0aGlzLmdldFBhcnNlcnMoaXNCRSlcbiAgICBjb25zdCByZXQgPSBwLmNocm9tVHJlZVBhcnNlci5wYXJzZShkYXRhKS5yZXN1bHRcbiAgICBjb25zdCBsZWFmTm9kZVBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC5zdHJpbmcoJ2tleScsIHsgc3RyaXBOdWxsOiB0cnVlLCBsZW5ndGg6IHJldC5rZXlTaXplIH0pXG4gICAgICAudWludDMyKCdyZWZJZCcpXG4gICAgICAudWludDMyKCdyZWZTaXplJylcbiAgICBjb25zdCBub25sZWFmTm9kZVBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC5za2lwKHJldC5rZXlTaXplKVxuICAgICAgLnVpbnQ2NCgnY2hpbGRPZmZzZXQnKVxuICAgIGNvbnN0IHJvb3ROb2RlT2Zmc2V0ID0gMzJcbiAgICBjb25zdCBicHRSZWFkTm9kZSA9IGFzeW5jIChjdXJyZW50T2Zmc2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGxldCBvZmZzZXQgPSBjdXJyZW50T2Zmc2V0XG4gICAgICBpZiAob2Zmc2V0ID49IGRhdGEubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ3JlYWRpbmcgYmV5b25kIGVuZCBvZiBidWZmZXInKVxuICAgICAgY29uc3QgcmV0ID0gcC5pc0xlYWZOb2RlLnBhcnNlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIGNvbnN0IHsgaXNMZWFmTm9kZSwgY250IH0gPSByZXQucmVzdWx0XG4gICAgICBvZmZzZXQgKz0gcmV0Lm9mZnNldFxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjbnQ7IG4gKz0gMSkge1xuICAgICAgICBhd2FpdCBhYm9ydEJyZWFrUG9pbnQoYWJvcnRTaWduYWwpXG4gICAgICAgIGlmIChpc0xlYWZOb2RlKSB7XG4gICAgICAgICAgY29uc3QgbGVhZlJldCA9IGxlYWZOb2RlUGFyc2VyLnBhcnNlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgICAgICBvZmZzZXQgKz0gbGVhZlJldC5vZmZzZXRcbiAgICAgICAgICBjb25zdCB7IGtleSwgcmVmSWQsIHJlZlNpemUgfSA9IGxlYWZSZXQucmVzdWx0XG4gICAgICAgICAgY29uc3QgcmVmUmVjID0geyBuYW1lOiBrZXksIGlkOiByZWZJZCwgbGVuZ3RoOiByZWZTaXplIH1cbiAgICAgICAgICByZWZzQnlOYW1lW3RoaXMucmVuYW1lUmVmU2VxcyhrZXkpXSA9IHJlZklkXG4gICAgICAgICAgcmVmc0J5TnVtYmVyW3JlZklkXSA9IHJlZlJlY1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHBhcnNlIGluZGV4IG5vZGVcbiAgICAgICAgICBjb25zdCBub25sZWFmUmV0ID0gbm9ubGVhZk5vZGVQYXJzZXIucGFyc2UoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgICAgIGxldCB7IGNoaWxkT2Zmc2V0IH0gPSBub25sZWFmUmV0LnJlc3VsdFxuICAgICAgICAgIG9mZnNldCArPSBub25sZWFmUmV0Lm9mZnNldFxuICAgICAgICAgIGNoaWxkT2Zmc2V0IC09IGNocm9tVHJlZU9mZnNldFxuICAgICAgICAgIGF3YWl0IGJwdFJlYWROb2RlKGNoaWxkT2Zmc2V0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IGJwdFJlYWROb2RlKHJvb3ROb2RlT2Zmc2V0KVxuICAgIHJldHVybiB7XG4gICAgICByZWZzQnlOYW1lLFxuICAgICAgcmVmc0J5TnVtYmVyLFxuICAgIH1cbiAgfVxuXG4gIC8vdG9kbzogbWVtb2l6ZVxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VmlldyhzY2FsZTogbnVtYmVyLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxCbG9ja1ZpZXc+IHtcbiAgICBjb25zdCB7IHpvb21MZXZlbHMsIHJlZnNCeU5hbWUsIGZpbGVTaXplLCBpc0JpZ0VuZGlhbiwgdW5jb21wcmVzc0J1ZlNpemUgfSA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVyKGFib3J0U2lnbmFsKVxuICAgIGNvbnN0IHsgYmJpIH0gPSB0aGlzXG4gICAgY29uc3QgYmFzZXNQZXJQeCA9IDEgLyBzY2FsZVxuICAgIGxldCBtYXhMZXZlbCA9IHpvb21MZXZlbHMubGVuZ3RoXG4gICAgaWYgKCFmaWxlU2l6ZSkge1xuICAgICAgLy8gaWYgd2UgZG9uJ3Qga25vdyB0aGUgZmlsZSBzaXplLCB3ZSBjYW4ndCBmZXRjaCB0aGUgaGlnaGVzdCB6b29tIGxldmVsIDotKFxuICAgICAgbWF4TGV2ZWwgLT0gMVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBtYXhMZXZlbDsgaSA+IDA7IGkgLT0gMSkge1xuICAgICAgY29uc3QgemggPSB6b29tTGV2ZWxzW2ldXG4gICAgICBpZiAoemggJiYgemgucmVkdWN0aW9uTGV2ZWwgPD0gMiAqIGJhc2VzUGVyUHgpIHtcbiAgICAgICAgY29uc3QgaW5kZXhMZW5ndGggPVxuICAgICAgICAgIGkgPCB6b29tTGV2ZWxzLmxlbmd0aCAtIDEgPyB6b29tTGV2ZWxzW2kgKyAxXS5kYXRhT2Zmc2V0IC0gemguaW5kZXhPZmZzZXQgOiBmaWxlU2l6ZSAtIDQgLSB6aC5pbmRleE9mZnNldFxuICAgICAgICByZXR1cm4gbmV3IEJsb2NrVmlldyhcbiAgICAgICAgICBiYmksXG4gICAgICAgICAgcmVmc0J5TmFtZSxcbiAgICAgICAgICB6aC5pbmRleE9mZnNldCxcbiAgICAgICAgICBpbmRleExlbmd0aCxcbiAgICAgICAgICBpc0JpZ0VuZGlhbixcbiAgICAgICAgICB1bmNvbXByZXNzQnVmU2l6ZSA+IDAsXG4gICAgICAgICAgJ3N1bW1hcnknLFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFVuem9vbWVkVmlldyhhYm9ydFNpZ25hbClcbiAgfVxuXG4gIC8vdG9kbyBtZW1vaXplXG4gIHByaXZhdGUgYXN5bmMgZ2V0VW56b29tZWRWaWV3KGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPEJsb2NrVmlldz4ge1xuICAgIGNvbnN0IHsgdW56b29tZWRJbmRleE9mZnNldCwgem9vbUxldmVscywgcmVmc0J5TmFtZSwgdW5jb21wcmVzc0J1ZlNpemUsIGlzQmlnRW5kaWFuIH0gPSBhd2FpdCB0aGlzLmdldEhlYWRlcihcbiAgICAgIGFib3J0U2lnbmFsLFxuICAgIClcbiAgICBjb25zdCB7IGJiaSwgZmlsZVR5cGUgfSA9IHRoaXNcbiAgICBsZXQgY2lyTGVuID0gNDAwMFxuICAgIGNvbnN0IG56bCA9IHpvb21MZXZlbHNbMF1cbiAgICBpZiAobnpsKSB7XG4gICAgICBjaXJMZW4gPSBuemwuZGF0YU9mZnNldCAtIHVuem9vbWVkSW5kZXhPZmZzZXRcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBCbG9ja1ZpZXcoYmJpLCByZWZzQnlOYW1lLCB1bnpvb21lZEluZGV4T2Zmc2V0LCBjaXJMZW4sIGlzQmlnRW5kaWFuLCB1bmNvbXByZXNzQnVmU2l6ZSA+IDAsIGZpbGVUeXBlKVxuICB9XG59XG4iXX0= | ||
exports.BBI = BBI; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYmkudHMiXSwibmFtZXMiOlsiQklHX1dJR19NQUdJQyIsIkJJR19CRURfTUFHSUMiLCJBYm9ydEF3YXJlQ2FjaGUiLCJNYXAiLCJmbiIsImNhY2hlIiwiYWJvcnRhYmxlTWVtb2l6ZUZuIiwic2lnbmFsIiwiaGFzIiwiZm5SZXR1cm4iLCJzZXQiLCJjYXRjaCIsImFib3J0ZWQiLCJkZWxldGUiLCJnZXQiLCJlIiwiY29kZSIsIm5hbWUiLCJnZXRQYXJzZXJzIiwiaXNCRSIsImxlIiwiaGVhZGVyUGFyc2VyIiwiUGFyc2VyIiwiZW5kaWFuZXNzIiwiaW50MzIiLCJ1aW50MTYiLCJ1aW50NjQiLCJ1aW50MzIiLCJhcnJheSIsImxlbmd0aCIsInR5cGUiLCJ0b3RhbFN1bW1hcnlQYXJzZXIiLCJkb3VibGUiLCJjaHJvbVRyZWVQYXJzZXIiLCJpc0xlYWZOb2RlIiwidWludDgiLCJza2lwIiwiQkJJIiwib3B0aW9ucyIsImZpbGVoYW5kbGUiLCJyZW5hbWVSZWZTZXFzIiwicGF0aCIsInVybCIsInMiLCJoZWFkZXJDYWNoZSIsImJiaSIsIlJlbW90ZUZpbGUiLCJMb2NhbEZpbGUiLCJFcnJvciIsImdldEhlYWRlciIsImFib3J0YWJsZU1lbW9pemUiLCJfZ2V0SGVhZGVyIiwiYmluZCIsImFib3J0U2lnbmFsIiwiX2lzQmlnRW5kaWFuIiwiaXNCaWdFbmRpYW4iLCJfZ2V0TWFpbkhlYWRlciIsImhlYWRlciIsIl9yZWFkQ2hyb21UcmVlIiwiY2hyb21zIiwicmV0IiwiYnVmIiwiQnVmZmVyIiwiYWxsb2MiLCJyZWFkIiwicGFyc2UiLCJyZXN1bHQiLCJmaWxlVHlwZSIsIm1hZ2ljIiwiYXNPZmZzZXQiLCJhdXRvU3FsIiwic2xpY2UiLCJpbmRleE9mIiwidG9TdHJpbmciLCJ0b3RhbFN1bW1hcnlPZmZzZXQiLCJ0YWlsIiwidG90YWxTdW1tYXJ5IiwiYWxsb2NVbnNhZmUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVmc0J5TnVtYmVyIiwicmVmc0J5TmFtZSIsImNocm9tVHJlZU9mZnNldCIsInVuem9vbWVkRGF0YU9mZnNldCIsImRhdGEiLCJwIiwia2V5U2l6ZSIsImxlYWZOb2RlUGFyc2VyIiwic3RyaW5nIiwic3RyaXBOdWxsIiwibm9ubGVhZk5vZGVQYXJzZXIiLCJyb290Tm9kZU9mZnNldCIsImJwdFJlYWROb2RlIiwiY3VycmVudE9mZnNldCIsIm9mZnNldCIsImNudCIsIm4iLCJsZWFmUmV0Iiwia2V5IiwicmVmSWQiLCJyZWZTaXplIiwicmVmUmVjIiwiaWQiLCJub25sZWFmUmV0IiwiY2hpbGRPZmZzZXQiLCJ1bnpvb21lZEluZGV4T2Zmc2V0Iiwiem9vbUxldmVscyIsInVuY29tcHJlc3NCdWZTaXplIiwibnpsIiwiY2lyTGVuIiwiZGF0YU9mZnNldCIsIkJsb2NrVmlldyIsInJlZk5hbWUiLCJzdGFydCIsImVuZCIsIm9wdHMiLCJzY2FsZSIsImNock5hbWUiLCJiYXNlc1BlclNwYW4iLCJnZXRWaWV3IiwidmlldyIsIk9ic2VydmFibGUiLCJvYnNlcnZlciIsInJlYWRXaWdEYXRhIiwiZ2V0RmVhdHVyZVN0cmVhbSIsIm9iIiwicGlwZSIsImFjYyIsImN1cnIiLCJjb25jYXQiLCJ0b1Byb21pc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUVBLElBQU1BLGFBQWEsR0FBRyxDQUFDLFVBQXZCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLENBQUMsVUFBdkI7O0lBaURNQyxlOzs7OztpREFDeUMsSUFBSUMsR0FBSixFOzs7OztxQ0FFckJDLEUsRUFBb0Y7QUFBQSxVQUNsR0MsS0FEa0csR0FDeEYsSUFEd0YsQ0FDbEdBLEtBRGtHO0FBRTFHLGFBQU8sU0FBU0Msa0JBQVQsQ0FBNEJDLE1BQTVCLEVBQWdFO0FBQ3JFLFlBQUksQ0FBQ0YsS0FBSyxDQUFDRyxHQUFOLENBQVVKLEVBQVYsQ0FBTCxFQUFvQjtBQUNsQixjQUFNSyxRQUFRLEdB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LFVBQUNDLEdBQUQsRUFBaUJDLElBQWpCO0FBQUEseUJBQWdERCxHQUFHLENBQUNFLE1BQUosQ0FBV0QsSUFBWCxDQUFoRDtBQUFBLGlCQUFQLENBQVIsRUFBa0ZFLFNBQWxGLEU7OztBQUFadEUsZ0JBQUFBLEc7a0RBQ0NBLEdBQUcsSUFBSSxFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnQGdtb2QvYmluYXJ5LXBhcnNlcidcbmltcG9ydCB7IExvY2FsRmlsZSwgUmVtb3RlRmlsZSwgR2VuZXJpY0ZpbGVoYW5kbGUgfSBmcm9tICdnZW5lcmljLWZpbGVoYW5kbGUnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyByZWR1Y2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgQmxvY2tWaWV3IH0gZnJvbSAnLi9ibG9ja1ZpZXcnXG5pbXBvcnQgeyBhYm9ydEJyZWFrUG9pbnQsIEFib3J0RXJyb3IgfSBmcm9tICcuL3V0aWwnXG5cbmNvbnN0IEJJR19XSUdfTUFHSUMgPSAtMjAwMzgyOTcyMlxuY29uc3QgQklHX0JFRF9NQUdJQyA9IC0yMDIxMDAyNTE3XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZSB7XG4gIHN0YXJ0OiBudW1iZXJcbiAgZW5kOiBudW1iZXJcbiAgc2NvcmU6IG51bWJlclxuICByZXN0Pzogc3RyaW5nIC8vIGZvciBiaWdiZWQgbGluZVxuICBtaW5TY29yZT86IG51bWJlciAvLyBmb3Igc3VtbWFyeSBsaW5lXG4gIG1heFNjb3JlPzogbnVtYmVyIC8vIGZvciBzdW1tYXJ5IGxpbmVcbiAgc3VtbWFyeT86IGJvb2xlYW4gLy8gaXMgc3VtbWFyeSBsaW5lXG4gIHVuaXF1ZUlkPzogc3RyaW5nIC8vIGZvciBiaWdiZWQgY29udGFpbnMgdW5pcXVlSWQgY2FsY3VsYXRlZCBmcm9tIGZpbGUgb2Zmc2V0XG4gIGZpZWxkPzogbnVtYmVyIC8vIHVzZWQgaW4gYmlnYmVkIHNlYXJjaGluZ1xufVxuaW50ZXJmYWNlIFN0YXRpc3RpY3Mge1xuICBzY29yZVN1bTogbnVtYmVyXG4gIGJhc2VzQ292ZXJlZDogbnVtYmVyXG4gIHNjb3JlU3VtU3F1YXJlczogbnVtYmVyXG59XG5cbmludGVyZmFjZSBSZWZJbmZvIHtcbiAgbmFtZTogc3RyaW5nXG4gIGlkOiBudW1iZXJcbiAgbGVuZ3RoOiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyIHtcbiAgYXV0b1NxbDogc3RyaW5nXG4gIHRvdGFsU3VtbWFyeTogU3RhdGlzdGljc1xuICB6b29tTGV2ZWxzOiBhbnlcbiAgdW56b29tZWRJbmRleE9mZnNldDogbnVtYmVyXG4gIHVuem9vbWVkRGF0YU9mZnNldDogbnVtYmVyXG4gIHVuY29tcHJlc3NCdWZTaXplOiBudW1iZXJcbiAgY2hyb21UcmVlT2Zmc2V0OiBudW1iZXJcbiAgZmlsZVNpemU6IG51bWJlclxuICBleHRIZWFkZXJPZmZzZXQ6IG51bWJlclxuICBpc0JpZ0VuZGlhbjogYm9vbGVhblxuICBmaWxlVHlwZTogc3RyaW5nXG4gIHJlZnNCeU5hbWU6IE1hcDxzdHJpbmcsIG51bWJlcj5cbiAgcmVmc0J5TnVtYmVyOiBNYXA8bnVtYmVyLCBSZWZJbmZvPlxufVxuXG5pbnRlcmZhY2UgQ2hyb21UcmVlIHtcbiAgcmVmc0J5TmFtZTogTWFwPHN0cmluZywgbnVtYmVyPlxuICByZWZzQnlOdW1iZXI6IE1hcDxudW1iZXIsIFJlZkluZm8+XG59XG4vKlxuICogVGFrZXMgYSBmdW5jdGlvbiB0aGF0IGhhcyBvbmUgYXJndW1lbnQsIGFib3J0U2lnbmFsLCB0aGF0IHJldHVybnMgYSBwcm9taXNlXG4gKiBhbmQgaXQgd29ya3MgYnkgcmV0cnlpbmcgdGhlIGZ1bmN0aW9uIGlmIGEgcHJldmlvdXMgYXR0ZW1wdCB0byBpbml0aWFsaXplIHRoZSBwYXJzZSBjYWNoZSB3YXMgYWJvcnRlZFxuICovXG50eXBlIEFib3J0YWJsZUNhbGxiYWNrID0gKHNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2U8YW55PlxuY2xhc3MgQWJvcnRBd2FyZUNhY2hlIHtcbiAgcHJpdmF0ZSBjYWNoZTogTWFwPEFib3J0YWJsZUNhbGxiYWNrLCBhbnk+ID0gbmV3IE1hcCgpXG5cbiAgcHVibGljIGFib3J0YWJsZU1lbW9pemUoZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxhbnk+KTogKHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHsgY2FjaGUgfSA9IHRoaXNcbiAgICByZXR1cm4gZnVuY3Rpb24gYWJvcnRhYmxlTWVtb2l6ZUZuKHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIGlmICghY2FjaGUuaGFzKGZuKSkge1xuICAgICAgICBjb25zdCBmblJldHVybiA9IGZuKHNpZ25hbClcbiAgICAgICAgY2FjaGUuc2V0KGZuLCBmblJldHVybilcbiAgICAgICAgaWYgKHNpZ25hbCkge1xuICAgICAgICAgIGZuUmV0dXJuLmNhdGNoKFxuICAgICAgICAgICAgKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIGNhY2hlLmRlbGV0ZShmbilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoZm4pXG4gICAgICB9XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGZuKS5jYXRjaChcbiAgICAgICAgKGU6IEFib3J0RXJyb3IgfCBET01FeGNlcHRpb24pOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICAgIGlmIChlLmNvZGUgPT09ICdFUlJfQUJPUlRFRCcgfHwgZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBmbihzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UGFyc2Vycyhpc0JFOiBib29sZWFuKTogYW55IHtcbiAgY29uc3QgbGUgPSBpc0JFID8gJ2JpZycgOiAnbGl0dGxlJ1xuICBjb25zdCBoZWFkZXJQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC5pbnQzMignbWFnaWMnKVxuICAgIC51aW50MTYoJ3ZlcnNpb24nKVxuICAgIC51aW50MTYoJ251bVpvb21MZXZlbHMnKVxuICAgIC51aW50NjQoJ2Nocm9tVHJlZU9mZnNldCcpXG4gICAgLnVpbnQ2NCgndW56b29tZWREYXRhT2Zmc2V0JylcbiAgICAudWludDY0KCd1bnpvb21lZEluZGV4T2Zmc2V0JylcbiAgICAudWludDE2KCdmaWVsZENvdW50JylcbiAgICAudWludDE2KCdkZWZpbmVkRmllbGRDb3VudCcpXG4gICAgLnVpbnQ2NCgnYXNPZmZzZXQnKSAvLyBhdXRvU3FsIG9mZnNldCwgdXNlZCBpbiBiaWdiZWRcbiAgICAudWludDY0KCd0b3RhbFN1bW1hcnlPZmZzZXQnKVxuICAgIC51aW50MzIoJ3VuY29tcHJlc3NCdWZTaXplJylcbiAgICAudWludDY0KCdleHRIZWFkZXJPZmZzZXQnKSAvLyBuYW1lIGluZGV4IG9mZnNldCwgdXNlZCBpbiBiaWdiZWRcbiAgICAuYXJyYXkoJ3pvb21MZXZlbHMnLCB7XG4gICAgICBsZW5ndGg6ICdudW1ab29tTGV2ZWxzJyxcbiAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKVxuICAgICAgICAudWludDMyKCdyZWR1Y3Rpb25MZXZlbCcpXG4gICAgICAgIC51aW50MzIoJ3Jlc2VydmVkJylcbiAgICAgICAgLnVpbnQ2NCgnZGF0YU9mZnNldCcpXG4gICAgICAgIC51aW50NjQoJ2luZGV4T2Zmc2V0JyksXG4gICAgfSlcblxuICBjb25zdCB0b3RhbFN1bW1hcnlQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC51aW50NjQoJ2Jhc2VzQ292ZXJlZCcpXG4gICAgLmRvdWJsZSgnc2NvcmVNaW4nKVxuICAgIC5kb3VibGUoJ3Njb3JlTWF4JylcbiAgICAuZG91YmxlKCdzY29yZVN1bScpXG4gICAgLmRvdWJsZSgnc2NvcmVTdW1TcXVhcmVzJylcblxuICBjb25zdCBjaHJvbVRyZWVQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC51aW50MzIoJ21hZ2ljJylcbiAgICAudWludDMyKCdibG9ja1NpemUnKVxuICAgIC51aW50MzIoJ2tleVNpemUnKVxuICAgIC51aW50MzIoJ3ZhbFNpemUnKVxuICAgIC51aW50NjQoJ2l0ZW1Db3VudCcpXG5cbiAgY29uc3QgaXNMZWFmTm9kZSA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLnVpbnQ4KCdpc0xlYWZOb2RlJylcbiAgICAuc2tpcCgxKVxuICAgIC51aW50MTYoJ2NudCcpXG5cbiAgcmV0dXJuIHtcbiAgICBjaHJvbVRyZWVQYXJzZXIsXG4gICAgdG90YWxTdW1tYXJ5UGFyc2VyLFxuICAgIGhlYWRlclBhcnNlcixcbiAgICBpc0xlYWZOb2RlLFxuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCQkkge1xuICBwcm90ZWN0ZWQgYmJpOiBHZW5lcmljRmlsZWhhbmRsZVxuXG4gIHByb3RlY3RlZCBoZWFkZXJDYWNoZTogQWJvcnRBd2FyZUNhY2hlXG5cbiAgcHJvdGVjdGVkIHJlbmFtZVJlZlNlcXM6IChhOiBzdHJpbmcpID0+IHN0cmluZ1xuXG4gIC8qIGZldGNoIGFuZCBwYXJzZSBoZWFkZXIgaW5mb3JtYXRpb24gZnJvbSBhIGJpZ3dpZyBvciBiaWdiZWQgZmlsZVxuICAgKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBhYm9ydCB0aGUgb3BlcmF0aW9uLCBjYW4gYmUgbnVsbFxuICAgKiBAcmV0dXJuIGEgSGVhZGVyIG9iamVjdFxuICAgKi9cbiAgcHVibGljIGdldEhlYWRlcjogKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8SGVhZGVyPlxuXG4gIC8qXG4gICAqIEBwYXJhbSBmaWxlaGFuZGxlIC0gYSBmaWxlaGFuZGxlIGZyb20gZ2VuZXJpYy1maWxlaGFuZGxlIG9yIGltcGxlbWVudGluZyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgbm9kZTEwIGZzLnByb21pc2VzIEFQSVxuICAgKiBAcGFyYW0gcGF0aCAtIGEgTG9jYWwgZmlsZSBwYXRoIGFzIGEgc3RyaW5nXG4gICAqIEBwYXJhbSB1cmwgLSBhIFVSTCBzdHJpbmdcbiAgICogQHBhcmFtIHJlbmFtZVJlZlNlcXMgLSBhbiBvcHRpb25hbCBtZXRob2QgdG8gcmVuYW1lIHRoZSBpbnRlcm5hbCByZWZlcmVuY2Ugc2VxdWVuY2VzIHVzaW5nIGEgbWFwcGluZyBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGZpbGVoYW5kbGU/OiBHZW5lcmljRmlsZWhhbmRsZVxuICAgICAgcGF0aD86IHN0cmluZ1xuICAgICAgdXJsPzogc3RyaW5nXG4gICAgICByZW5hbWVSZWZTZXFzPzogKGE6IHN0cmluZykgPT4gc3RyaW5nXG4gICAgfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCB7IGZpbGVoYW5kbGUsIHJlbmFtZVJlZlNlcXMsIHBhdGgsIHVybCB9ID0gb3B0aW9uc1xuICAgIHRoaXMucmVuYW1lUmVmU2VxcyA9IHJlbmFtZVJlZlNlcXMgfHwgKChzOiBzdHJpbmcpOiBzdHJpbmcgPT4gcylcbiAgICB0aGlzLmhlYWRlckNhY2hlID0gbmV3IEFib3J0QXdhcmVDYWNoZSgpXG4gICAgaWYgKGZpbGVoYW5kbGUpIHtcbiAgICAgIHRoaXMuYmJpID0gZmlsZWhhbmRsZVxuICAgIH0gZWxzZSBpZiAodXJsKSB7XG4gICAgICB0aGlzLmJiaSA9IG5ldyBSZW1vdGVGaWxlKHVybClcbiAgICB9IGVsc2UgaWYgKHBhdGgpIHtcbiAgICAgIHRoaXMuYmJpID0gbmV3IExvY2FsRmlsZShwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGZpbGUgZ2l2ZW4nKVxuICAgIH1cbiAgICB0aGlzLmdldEhlYWRlciA9IHRoaXMuaGVhZGVyQ2FjaGUuYWJvcnRhYmxlTWVtb2l6ZSh0aGlzLl9nZXRIZWFkZXIuYmluZCh0aGlzKSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2dldEhlYWRlcihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxIZWFkZXI+IHtcbiAgICBjb25zdCBpc0JpZ0VuZGlhbiA9IGF3YWl0IHRoaXMuX2lzQmlnRW5kaWFuKGFib3J0U2lnbmFsKVxuICAgIGNvbnN0IGhlYWRlciA9IGF3YWl0IHRoaXMuX2dldE1haW5IZWFkZXIoYWJvcnRTaWduYWwpXG4gICAgY29uc3QgY2hyb21zID0gYXdhaXQgdGhpcy5fcmVhZENocm9tVHJlZShhYm9ydFNpZ25hbClcbiAgICByZXR1cm4geyAuLi5oZWFkZXIsIC4uLmNocm9tcywgaXNCaWdFbmRpYW4gfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZ2V0TWFpbkhlYWRlcihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxIZWFkZXI+IHtcbiAgICBjb25zdCByZXQgPSBnZXRQYXJzZXJzKGF3YWl0IHRoaXMuX2lzQmlnRW5kaWFuKCkpXG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDIwMDApXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChidWYsIDAsIDIwMDAsIDAsIHsgc2lnbmFsOiBhYm9ydFNpZ25hbCB9KVxuICAgIGNvbnN0IGhlYWRlciA9IHJldC5oZWFkZXJQYXJzZXIucGFyc2UoYnVmKS5yZXN1bHRcbiAgICBoZWFkZXIuZmlsZVR5cGUgPSBoZWFkZXIubWFnaWMgPT09IEJJR19CRURfTUFHSUMgPyAnYmlnYmVkJyA6ICdiaWd3aWcnXG5cbiAgICBpZiAoaGVhZGVyLmFzT2Zmc2V0KSB7XG4gICAgICBoZWFkZXIuYXV0b1NxbCA9IGJ1Zi5zbGljZShoZWFkZXIuYXNPZmZzZXQsIGJ1Zi5pbmRleE9mKDAsIGhlYWRlci5hc09mZnNldCkpLnRvU3RyaW5nKCd1dGY4JylcbiAgICB9XG4gICAgaWYgKGhlYWRlci50b3RhbFN1bW1hcnlPZmZzZXQpIHtcbiAgICAgIGNvbnN0IHRhaWwgPSBidWYuc2xpY2UoaGVhZGVyLnRvdGFsU3VtbWFyeU9mZnNldClcbiAgICAgIGhlYWRlci50b3RhbFN1bW1hcnkgPSByZXQudG90YWxTdW1tYXJ5UGFyc2VyLnBhcnNlKHRhaWwpLnJlc3VsdFxuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9pc0JpZ0VuZGlhbihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChidWYsIDAsIDQsIDAsIHsgc2lnbmFsOiBhYm9ydFNpZ25hbCB9KVxuICAgIGxldCByZXQgPSBidWYucmVhZEludDMyTEUoMClcbiAgICBpZiAocmV0ID09PSBCSUdfV0lHX01BR0lDIHx8IHJldCA9PT0gQklHX0JFRF9NQUdJQykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldCA9IGJ1Zi5yZWFkSW50MzJCRSgwKVxuICAgIGlmIChyZXQgPT09IEJJR19XSUdfTUFHSUMgfHwgcmV0ID09PSBCSUdfQkVEX01BR0lDKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBhIEJpZ1dpZy9CaWdCZWQgZmlsZScpXG4gIH1cblxuICAvLyB0b2RvOiBhZGQgcHJvZ3Jlc3MgaWYgbG9uZyBydW5uaW5nXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRDaHJvbVRyZWUoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q2hyb21UcmVlPiB7XG4gICAgY29uc3QgaGVhZGVyID0gYXdhaXQgdGhpcy5fZ2V0TWFpbkhlYWRlcihhYm9ydFNpZ25hbClcbiAgICBjb25zdCBpc0JFID0gYXdhaXQgdGhpcy5faXNCaWdFbmRpYW4oYWJvcnRTaWduYWwpXG4gICAgY29uc3QgbGUgPSBpc0JFID8gJ2JpZycgOiAnbGl0dGxlJ1xuICAgIGNvbnN0IHJlZnNCeU51bWJlcjogYW55ID0ge31cbiAgICBjb25zdCByZWZzQnlOYW1lOiBhbnkgPSB7fVxuICAgIGNvbnN0IHsgY2hyb21UcmVlT2Zmc2V0IH0gPSBoZWFkZXJcbiAgICBsZXQgeyB1bnpvb21lZERhdGFPZmZzZXQgfSA9IGhlYWRlclxuXG4gICAgd2hpbGUgKHVuem9vbWVkRGF0YU9mZnNldCAlIDQgIT09IDApIHtcbiAgICAgIHVuem9vbWVkRGF0YU9mZnNldCArPSAxXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyh1bnpvb21lZERhdGFPZmZzZXQgLSBjaHJvbVRyZWVPZmZzZXQpXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChkYXRhLCAwLCB1bnpvb21lZERhdGFPZmZzZXQgLSBjaHJvbVRyZWVPZmZzZXQsIGNocm9tVHJlZU9mZnNldCwgeyBzaWduYWw6IGFib3J0U2lnbmFsIH0pXG5cbiAgICBjb25zdCBwID0gZ2V0UGFyc2Vycyhpc0JFKVxuICAgIGNvbnN0IHsga2V5U2l6ZSB9ID0gcC5jaHJvbVRyZWVQYXJzZXIucGFyc2UoZGF0YSkucmVzdWx0XG4gICAgY29uc3QgbGVhZk5vZGVQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAgIC5lbmRpYW5lc3MobGUpXG4gICAgICAuc3RyaW5nKCdrZXknLCB7IHN0cmlwTnVsbDogdHJ1ZSwgbGVuZ3RoOiBrZXlTaXplIH0pXG4gICAgICAudWludDMyKCdyZWZJZCcpXG4gICAgICAudWludDMyKCdyZWZTaXplJylcbiAgICBjb25zdCBub25sZWFmTm9kZVBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC5za2lwKGtleVNpemUpXG4gICAgICAudWludDY0KCdjaGlsZE9mZnNldCcpXG4gICAgY29uc3Qgcm9vdE5vZGVPZmZzZXQgPSAzMlxuICAgIGNvbnN0IGJwdFJlYWROb2RlID0gYXN5bmMgKGN1cnJlbnRPZmZzZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgbGV0IG9mZnNldCA9IGN1cnJlbnRPZmZzZXRcbiAgICAgIGlmIChvZmZzZXQgPj0gZGF0YS5sZW5ndGgpIHRocm93IG5ldyBFcnJvcigncmVhZGluZyBiZXlvbmQgZW5kIG9mIGJ1ZmZlcicpXG4gICAgICBjb25zdCByZXQgPSBwLmlzTGVhZk5vZGUucGFyc2UoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgY29uc3QgeyBpc0xlYWZOb2RlLCBjbnQgfSA9IHJldC5yZXN1bHRcbiAgICAgIG9mZnNldCArPSByZXQub2Zmc2V0XG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGNudDsgbiArPSAxKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGF3YWl0IGFib3J0QnJlYWtQb2ludChhYm9ydFNpZ25hbClcbiAgICAgICAgaWYgKGlzTGVhZk5vZGUpIHtcbiAgICAgICAgICBjb25zdCBsZWFmUmV0ID0gbGVhZk5vZGVQYXJzZXIucGFyc2UoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgICAgIG9mZnNldCArPSBsZWFmUmV0Lm9mZnNldFxuICAgICAgICAgIGNvbnN0IHsga2V5LCByZWZJZCwgcmVmU2l6ZSB9ID0gbGVhZlJldC5yZXN1bHRcbiAgICAgICAgICBjb25zdCByZWZSZWMgPSB7IG5hbWU6IGtleSwgaWQ6IHJlZklkLCBsZW5ndGg6IHJlZlNpemUgfVxuICAgICAgICAgIHJlZnNCeU5hbWVbdGhpcy5yZW5hbWVSZWZTZXFzKGtleSldID0gcmVmSWRcbiAgICAgICAgICByZWZzQnlOdW1iZXJbcmVmSWRdID0gcmVmUmVjXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcGFyc2UgaW5kZXggbm9kZVxuICAgICAgICAgIGNvbnN0IG5vbmxlYWZSZXQgPSBub25sZWFmTm9kZVBhcnNlci5wYXJzZShkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICAgICAgbGV0IHsgY2hpbGRPZmZzZXQgfSA9IG5vbmxlYWZSZXQucmVzdWx0XG4gICAgICAgICAgb2Zmc2V0ICs9IG5vbmxlYWZSZXQub2Zmc2V0XG4gICAgICAgICAgY2hpbGRPZmZzZXQgLT0gY2hyb21UcmVlT2Zmc2V0XG4gICAgICAgICAgYnB0UmVhZE5vZGUoY2hpbGRPZmZzZXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgYnB0UmVhZE5vZGUocm9vdE5vZGVPZmZzZXQpXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZnNCeU5hbWUsXG4gICAgICByZWZzQnlOdW1iZXIsXG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogZmV0Y2hlcyB0aGUgXCJ1bnpvb21lZFwiIHZpZXcgb2YgdGhlIGJpZ3dpZyBkYXRhLiB0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBiaWdiZWRcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gYSBzaWduYWwgdG8gb3B0aW9uYWxseSBhYm9ydCB0aGlzIG9wZXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFVuem9vbWVkVmlldyhhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxCbG9ja1ZpZXc+IHtcbiAgICBjb25zdCB7XG4gICAgICB1bnpvb21lZEluZGV4T2Zmc2V0LFxuICAgICAgem9vbUxldmVscyxcbiAgICAgIHJlZnNCeU5hbWUsXG4gICAgICB1bmNvbXByZXNzQnVmU2l6ZSxcbiAgICAgIGlzQmlnRW5kaWFuLFxuICAgICAgZmlsZVR5cGUsXG4gICAgfSA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVyKGFib3J0U2lnbmFsKVxuICAgIGNvbnN0IG56bCA9IHpvb21MZXZlbHNbMF1cbiAgICBjb25zdCBjaXJMZW4gPSBuemwgPyBuemwuZGF0YU9mZnNldCAtIHVuem9vbWVkSW5kZXhPZmZzZXQgOiA0MDAwXG4gICAgcmV0dXJuIG5ldyBCbG9ja1ZpZXcoXG4gICAgICB0aGlzLmJiaSxcbiAgICAgIHJlZnNCeU5hbWUsXG4gICAgICB1bnpvb21lZEluZGV4T2Zmc2V0LFxuICAgICAgY2lyTGVuLFxuICAgICAgaXNCaWdFbmRpYW4sXG4gICAgICB1bmNvbXByZXNzQnVmU2l6ZSA+IDAsXG4gICAgICBmaWxlVHlwZSxcbiAgICApXG4gIH1cblxuICAvKlxuICAgKiBhYnN0cmFjdCBtZXRob2QgLSBnZXQgdGhlIHZpZXcgZm9yIGEgZ2l2ZW4gc2NhbGVcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhc3luYyBnZXRWaWV3KHNjYWxlOiBudW1iZXIsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPEJsb2NrVmlldz5cblxuICAvKipcbiAgICogR2V0cyBmZWF0dXJlcyBmcm9tIGEgQmlnV2lnIGZpbGVcbiAgICpcbiAgICogQHBhcmFtIHJlZk5hbWUgLSBUaGUgY2hyb21vc29tZSBuYW1lXG4gICAqIEBwYXJhbSBzdGFydCAtIFRoZSBzdGFydCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gZW5kIC0gVGhlIGVuZCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gb3B0cyAtIEFuIG9iamVjdCBjb250YWluaW5nIGJhc2VzUGVyU3BhbiAoZS5nLiBwaXhlbHMgcGVyIGJhc2VwYWlyKSBvciBzY2FsZSB1c2VkIHRvIGluZmVyIHRoZSB6b29tTGV2ZWwgdG8gdXNlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RmVhdHVyZVN0cmVhbShcbiAgICByZWZOYW1lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlcixcbiAgICBvcHRzOiB7IGJhc2VzUGVyU3Bhbj86IG51bWJlcjsgc2NhbGU/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7IHNjYWxlOiAxIH0sXG4gICk6IFByb21pc2U8T2JzZXJ2YWJsZTxGZWF0dXJlW10+PiB7XG4gICAgYXdhaXQgdGhpcy5nZXRIZWFkZXIob3B0cy5zaWduYWwpXG4gICAgY29uc3QgY2hyTmFtZSA9IHRoaXMucmVuYW1lUmVmU2VxcyhyZWZOYW1lKVxuICAgIGxldCB2aWV3OiBCbG9ja1ZpZXdcblxuICAgIGlmIChvcHRzLmJhc2VzUGVyU3Bhbikge1xuICAgICAgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldygxIC8gb3B0cy5iYXNlc1BlclNwYW4sIG9wdHMuc2lnbmFsKVxuICAgIH0gZWxzZSBpZiAob3B0cy5zY2FsZSkge1xuICAgICAgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldyhvcHRzLnNjYWxlLCBvcHRzLnNpZ25hbClcbiAgICB9IGVsc2Uge1xuICAgICAgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldygxLCBvcHRzLnNpZ25hbClcbiAgICB9XG5cbiAgICBpZiAoIXZpZXcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGdldCBibG9jayB2aWV3IGZvciBkYXRhJylcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKFxuICAgICAgKG9ic2VydmVyOiBPYnNlcnZlcjxGZWF0dXJlW10+KTogdm9pZCA9PiB7XG4gICAgICAgIHZpZXcucmVhZFdpZ0RhdGEoY2hyTmFtZSwgc3RhcnQsIGVuZCwgb2JzZXJ2ZXIsIG9wdHMpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlcyhcbiAgICByZWZOYW1lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlcixcbiAgICBvcHRzOiB7IGJhc2VzUGVyU3Bhbj86IG51bWJlcjsgc2NhbGU/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7IHNjYWxlOiAxIH0sXG4gICk6IFByb21pc2U8RmVhdHVyZVtdPiB7XG4gICAgY29uc3Qgb2IgPSBhd2FpdCB0aGlzLmdldEZlYXR1cmVTdHJlYW0ocmVmTmFtZSwgc3RhcnQsIGVuZCwgb3B0cylcbiAgICBjb25zdCByZXQgPSBhd2FpdCBvYi5waXBlKHJlZHVjZSgoYWNjOiBGZWF0dXJlW10sIGN1cnI6IEZlYXR1cmVbXSk6IEZlYXR1cmVbXSA9PiBhY2MuY29uY2F0KGN1cnIpKSkudG9Qcm9taXNlKClcbiAgICByZXR1cm4gcmV0IHx8IFtdXG4gIH1cbn1cbiJdfQ== |
@@ -1,14 +0,21 @@ | ||
import BBI from './bbi'; | ||
import { Observable } from 'rxjs'; | ||
export default class BigBed extends BBI { | ||
/** | ||
* Gets features from a BigWig file | ||
* | ||
* @param refName - The chromosome name | ||
* @param start - The start of a region | ||
* @param end - The end of a region | ||
* @return Promise with an Observable of array of features | ||
*/ | ||
getFeatureStream(refName: string, start: number, end: number, opts?: Options): Promise<Observable<Feature[]>>; | ||
getFeatures(refName: string, start: number, end: number, opts?: Options): Promise<Feature[]>; | ||
import { BBI, Feature } from './bbi'; | ||
import { BlockView } from './blockView'; | ||
interface SearchOptions { | ||
signal?: AbortSignal; | ||
} | ||
interface Index { | ||
type: number; | ||
fieldcount: number; | ||
offset: number; | ||
field: number; | ||
} | ||
export declare function filterUndef<T>(ts: (T | undefined)[]): T[]; | ||
export declare class BigBed extends BBI { | ||
readIndices: (abortSignal?: AbortSignal) => Promise<Index[]>; | ||
constructor(opts: any); | ||
protected getView(scale: number, abortSignal: AbortSignal): Promise<BlockView>; | ||
_readIndices(abortSignal?: AbortSignal): Promise<Index[]>; | ||
private searchExtraIndexBlocks; | ||
searchExtraIndex(name: string, opts?: SearchOptions): Promise<Feature[]>; | ||
} | ||
export {}; |
@@ -8,4 +8,9 @@ "use strict"; | ||
}); | ||
exports.default = void 0; | ||
exports.filterUndef = filterUndef; | ||
exports.BigBed = void 0; | ||
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); | ||
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread")); | ||
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); | ||
@@ -23,8 +28,22 @@ | ||
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); | ||
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); | ||
var _bbi = _interopRequireDefault(require("./bbi")); | ||
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); | ||
var _binaryParser = require("@gmod/binary-parser"); | ||
var _rxjs = require("rxjs"); | ||
var _operators = require("rxjs/operators"); | ||
var _bbi = require("./bbi"); | ||
function filterUndef(ts) { | ||
return ts.filter(function (t) { | ||
return !!t; | ||
}); | ||
} | ||
var BigBed = | ||
@@ -35,121 +54,427 @@ /*#__PURE__*/ | ||
function BigBed() { | ||
function BigBed(opts) { | ||
var _this; | ||
(0, _classCallCheck2.default)(this, BigBed); | ||
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BigBed).apply(this, arguments)); | ||
_this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BigBed).call(this, opts)); | ||
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "readIndices", void 0); | ||
_this.readIndices = _this.headerCache.abortableMemoize(_this._readIndices.bind((0, _assertThisInitialized2.default)(_this))); | ||
return _this; | ||
} | ||
/* | ||
* retrieve unzoomed view for any scale | ||
* @param scale - unused | ||
* @param abortSignal - an optional AbortSignal to kill operation | ||
* @return promise for a BlockView | ||
*/ | ||
(0, _createClass2.default)(BigBed, [{ | ||
key: "getFeatureStream", | ||
key: "getView", | ||
value: function () { | ||
var _getView = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee(scale, abortSignal) { | ||
return _regenerator.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
return _context.abrupt("return", this.getUnzoomedView(abortSignal)); | ||
/** | ||
* Gets features from a BigWig file | ||
case 1: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function getView(_x, _x2) { | ||
return _getView.apply(this, arguments); | ||
} | ||
return getView; | ||
}() | ||
/* | ||
* parse the bigbed extraIndex fields | ||
* @param abortSignal to abort operation | ||
* @return a Promise for an array of Index data structure since there can be multiple extraIndexes in a bigbed, see bedToBigBed documentation | ||
*/ | ||
}, { | ||
key: "_readIndices", | ||
value: function () { | ||
var _readIndices2 = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee2(abortSignal) { | ||
var _ref, extHeaderOffset, isBigEndian, data, le, ret, count, offset, blocklen, len, buf, extParser, indices, i; | ||
return _regenerator.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
_context2.next = 2; | ||
return this.getHeader(abortSignal); | ||
case 2: | ||
_ref = _context2.sent; | ||
extHeaderOffset = _ref.extHeaderOffset; | ||
isBigEndian = _ref.isBigEndian; | ||
data = Buffer.alloc(64); | ||
_context2.next = 8; | ||
return this.bbi.read(data, 0, 64, extHeaderOffset); | ||
case 8: | ||
le = isBigEndian ? 'big' : 'little'; | ||
ret = new _binaryParser.Parser().endianess(le).uint16('size').uint16('count').uint64('offset').parse(data).result; | ||
count = ret.count, offset = ret.offset; // no extra index is defined if count==0 | ||
if (!(count === 0)) { | ||
_context2.next = 13; | ||
break; | ||
} | ||
return _context2.abrupt("return", []); | ||
case 13: | ||
blocklen = 20; | ||
len = blocklen * count; | ||
buf = Buffer.alloc(len); | ||
_context2.next = 18; | ||
return this.bbi.read(buf, 0, len, offset); | ||
case 18: | ||
extParser = new _binaryParser.Parser().endianess(le).int16('type').int16('fieldcount').uint64('offset').skip(4).int16('field'); | ||
indices = []; | ||
for (i = 0; i < count; i += 1) { | ||
indices.push(extParser.parse(buf.slice(i * blocklen)).result); | ||
} | ||
return _context2.abrupt("return", indices); | ||
case 22: | ||
case "end": | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2, this); | ||
})); | ||
function _readIndices(_x3) { | ||
return _readIndices2.apply(this, arguments); | ||
} | ||
return _readIndices; | ||
}() | ||
/* | ||
* perform a search in the bigbed extraIndex to find which blocks in the bigbed data to look for the | ||
* actual feature data | ||
* | ||
* @param refName - The chromosome name | ||
* @param start - The start of a region | ||
* @param end - The end of a region | ||
* @return Promise with an Observable of array of features | ||
* @param name - the name to search for | ||
* @param opts - a SearchOptions argument with optional signal | ||
* @return a Promise for an array of bigbed block Loc entries | ||
*/ | ||
}, { | ||
key: "searchExtraIndexBlocks", | ||
value: function () { | ||
var _getFeatureStream = (0, _asyncToGenerator2.default)( | ||
var _searchExtraIndexBlocks = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee(refName, start, end) { | ||
_regenerator.default.mark(function _callee5(name) { | ||
var _this2 = this; | ||
var opts, | ||
chrName, | ||
view, | ||
_args = arguments; | ||
return _regenerator.default.wrap(function _callee$(_context) { | ||
signal, | ||
_ref2, | ||
isBigEndian, | ||
indices, | ||
locs, | ||
_args5 = arguments; | ||
return _regenerator.default.wrap(function _callee5$(_context5) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
switch (_context5.prev = _context5.next) { | ||
case 0: | ||
opts = _args.length > 3 && _args[3] !== undefined ? _args[3] : {}; | ||
_context.next = 3; | ||
return this.getHeader(opts.signal); | ||
opts = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : {}; | ||
signal = opts.signal; | ||
_context5.next = 4; | ||
return this.getHeader(signal); | ||
case 3: | ||
chrName = this.renameRefSeqs(refName); | ||
_context.next = 6; | ||
return this.getView(1); | ||
case 4: | ||
_ref2 = _context5.sent; | ||
isBigEndian = _ref2.isBigEndian; | ||
_context5.next = 8; | ||
return this.readIndices(signal); | ||
case 6: | ||
view = _context.sent; | ||
case 8: | ||
indices = _context5.sent; | ||
if (view) { | ||
_context.next = 9; | ||
if (indices.length) { | ||
_context5.next = 11; | ||
break; | ||
} | ||
throw new Error('unable to get block view for data'); | ||
return _context5.abrupt("return", []); | ||
case 9: | ||
return _context.abrupt("return", new _rxjs.Observable(function (observer) { | ||
view.readWigData(chrName, start, end, observer, opts.signal); | ||
})); | ||
case 11: | ||
locs = indices.map( | ||
/*#__PURE__*/ | ||
function () { | ||
var _ref3 = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee4(index) { | ||
var offset, field, data, p, _p$parse$result, blockSize, keySize, valSize, bpt, bptReadNode, rootNodeOffset; | ||
case 10: | ||
return _regenerator.default.wrap(function _callee4$(_context4) { | ||
while (1) { | ||
switch (_context4.prev = _context4.next) { | ||
case 0: | ||
offset = index.offset, field = index.field; | ||
data = Buffer.alloc(32); | ||
_context4.next = 4; | ||
return _this2.bbi.read(data, 0, 32, offset, { | ||
signal: signal | ||
}); | ||
case 4: | ||
p = new _binaryParser.Parser().endianess(isBigEndian ? 'big' : 'little').int32('magic').int32('blockSize').int32('keySize').int32('valSize').uint64('itemCount'); | ||
_p$parse$result = p.parse(data).result, blockSize = _p$parse$result.blockSize, keySize = _p$parse$result.keySize, valSize = _p$parse$result.valSize; | ||
bpt = new _binaryParser.Parser().endianess(isBigEndian ? 'big' : 'little').int8('nodeType').skip(1).int16('cnt').choice({ | ||
tag: 'nodeType', | ||
choices: { | ||
0: new _binaryParser.Parser().array('leafkeys', { | ||
length: 'cnt', | ||
type: new _binaryParser.Parser().string('key', { | ||
length: keySize, | ||
stripNull: true | ||
}).uint64('offset') | ||
}), | ||
1: new _binaryParser.Parser().array('keys', { | ||
length: 'cnt', | ||
type: new _binaryParser.Parser().string('key', { | ||
length: keySize, | ||
stripNull: true | ||
}).uint64('offset').uint32('length').uint32('reserved') | ||
}) | ||
} | ||
}); | ||
bptReadNode = | ||
/*#__PURE__*/ | ||
function () { | ||
var _ref4 = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee3(nodeOffset) { | ||
var len, buf, node, lastOffset, i, key, _i; | ||
return _regenerator.default.wrap(function _callee3$(_context3) { | ||
while (1) { | ||
switch (_context3.prev = _context3.next) { | ||
case 0: | ||
len = 4 + blockSize * (keySize + valSize); | ||
buf = Buffer.alloc(len); | ||
_context3.next = 4; | ||
return _this2.bbi.read(buf, 0, len, nodeOffset, { | ||
signal: signal | ||
}); | ||
case 4: | ||
node = bpt.parse(buf).result; | ||
if (!node.leafkeys) { | ||
_context3.next = 16; | ||
break; | ||
} | ||
i = 0; | ||
case 7: | ||
if (!(i < node.leafkeys.length)) { | ||
_context3.next = 15; | ||
break; | ||
} | ||
key = node.leafkeys[i].key; | ||
if (!(name.localeCompare(key) < 0 && lastOffset)) { | ||
_context3.next = 11; | ||
break; | ||
} | ||
return _context3.abrupt("return", bptReadNode(lastOffset)); | ||
case 11: | ||
lastOffset = node.leafkeys[i].offset; | ||
case 12: | ||
i += 1; | ||
_context3.next = 7; | ||
break; | ||
case 15: | ||
return _context3.abrupt("return", bptReadNode(lastOffset)); | ||
case 16: | ||
_i = 0; | ||
case 17: | ||
if (!(_i < node.keys.length)) { | ||
_context3.next = 23; | ||
break; | ||
} | ||
if (!(node.keys[_i].key === name)) { | ||
_context3.next = 20; | ||
break; | ||
} | ||
return _context3.abrupt("return", (0, _objectSpread2.default)({}, node.keys[_i], { | ||
field: field | ||
})); | ||
case 20: | ||
_i += 1; | ||
_context3.next = 17; | ||
break; | ||
case 23: | ||
return _context3.abrupt("return", undefined); | ||
case 24: | ||
case "end": | ||
return _context3.stop(); | ||
} | ||
} | ||
}, _callee3); | ||
})); | ||
return function bptReadNode(_x6) { | ||
return _ref4.apply(this, arguments); | ||
}; | ||
}(); | ||
rootNodeOffset = 32; | ||
return _context4.abrupt("return", bptReadNode(offset + rootNodeOffset)); | ||
case 10: | ||
case "end": | ||
return _context4.stop(); | ||
} | ||
} | ||
}, _callee4); | ||
})); | ||
return function (_x5) { | ||
return _ref3.apply(this, arguments); | ||
}; | ||
}()); | ||
_context5.t0 = filterUndef; | ||
_context5.next = 15; | ||
return Promise.all(locs); | ||
case 15: | ||
_context5.t1 = _context5.sent; | ||
return _context5.abrupt("return", (0, _context5.t0)(_context5.t1)); | ||
case 17: | ||
case "end": | ||
return _context.stop(); | ||
return _context5.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
}, _callee5, this); | ||
})); | ||
function getFeatureStream(_x, _x2, _x3) { | ||
return _getFeatureStream.apply(this, arguments); | ||
function searchExtraIndexBlocks(_x4) { | ||
return _searchExtraIndexBlocks.apply(this, arguments); | ||
} | ||
return getFeatureStream; | ||
return searchExtraIndexBlocks; | ||
}() | ||
/* | ||
* retrieve the features from the bigbed data that were found through the lookup of the extraIndex | ||
* note that there can be multiple extraIndex, see the BigBed specification and the -extraIndex argument to bedToBigBed | ||
* | ||
* @param name - the name to search for | ||
* @param opts - a SearchOptions argument with optional signal | ||
* @return a Promise for an array of Feature | ||
*/ | ||
}, { | ||
key: "getFeatures", | ||
key: "searchExtraIndex", | ||
value: function () { | ||
var _getFeatures = (0, _asyncToGenerator2.default)( | ||
var _searchExtraIndex = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee2(refName, start, end) { | ||
_regenerator.default.mark(function _callee6(name) { | ||
var opts, | ||
features, | ||
ob, | ||
_args2 = arguments; | ||
return _regenerator.default.wrap(function _callee2$(_context2) { | ||
blocks, | ||
view, | ||
res, | ||
ret, | ||
_args6 = arguments; | ||
return _regenerator.default.wrap(function _callee6$(_context6) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
switch (_context6.prev = _context6.next) { | ||
case 0: | ||
opts = _args2.length > 3 && _args2[3] !== undefined ? _args2[3] : { | ||
scale: 1 | ||
}; | ||
features = []; | ||
_context2.next = 4; | ||
return this.getFeatureStream(refName, start, end, opts); | ||
opts = _args6.length > 1 && _args6[1] !== undefined ? _args6[1] : {}; | ||
_context6.next = 3; | ||
return this.searchExtraIndexBlocks(name, opts); | ||
case 4: | ||
ob = _context2.sent; | ||
return _context2.abrupt("return", new Promise(function (resolve, reject) { | ||
// prettier-ignore | ||
ob.subscribe(function (feats) { | ||
return features = features.concat(feats); | ||
}, function (error) { | ||
return reject(error); | ||
}, function () { | ||
resolve(features); | ||
}); | ||
case 3: | ||
blocks = _context6.sent; | ||
if (blocks.length) { | ||
_context6.next = 6; | ||
break; | ||
} | ||
return _context6.abrupt("return", []); | ||
case 6: | ||
_context6.next = 8; | ||
return this.getUnzoomedView(); | ||
case 8: | ||
view = _context6.sent; | ||
res = blocks.map(function (block) { | ||
return new _rxjs.Observable(function (observer) { | ||
view.readFeatures(observer, [block], opts); | ||
}).pipe((0, _operators.reduce)(function (acc, curr) { | ||
return acc.concat(curr); | ||
}), (0, _operators.map)(function (x) { | ||
for (var i = 0; i < x.length; i += 1) { | ||
x[i].field = block.field; // eslint-disable-line | ||
} | ||
return x; | ||
})); | ||
}); | ||
_context6.next = 12; | ||
return _rxjs.merge.apply(void 0, (0, _toConsumableArray2.default)(res)).toPromise(); | ||
case 12: | ||
ret = _context6.sent; | ||
return _context6.abrupt("return", ret.filter(function (f) { | ||
return f.rest.split('\t')[f.field - 3] === name; | ||
})); | ||
case 6: | ||
case 14: | ||
case "end": | ||
return _context2.stop(); | ||
return _context6.stop(); | ||
} | ||
} | ||
}, _callee2, this); | ||
}, _callee6, this); | ||
})); | ||
function getFeatures(_x4, _x5, _x6) { | ||
return _getFeatures.apply(this, arguments); | ||
function searchExtraIndex(_x7) { | ||
return _searchExtraIndex.apply(this, arguments); | ||
} | ||
return getFeatures; | ||
return searchExtraIndex; | ||
}() | ||
}]); | ||
return BigBed; | ||
}(_bbi.default); | ||
}(_bbi.BBI); | ||
exports.default = BigBed; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iaWdiZWQudHMiXSwibmFtZXMiOlsiQmlnQmVkIiwicmVmTmFtZSIsInN0YXJ0IiwiZW5kIiwib3B0cyIsImdldEhlYWRlciIsInNpZ25hbCIsImNock5hbWUiLCJyZW5hbWVSZWZTZXFzIiwiZ2V0VmlldyIsInZpZXciLCJFcnJvciIsIk9ic2VydmFibGUiLCJvYnNlcnZlciIsInJlYWRXaWdEYXRhIiwic2NhbGUiLCJmZWF0dXJlcyIsImdldEZlYXR1cmVTdHJlYW0iLCJvYiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic3Vic2NyaWJlIiwiZmVhdHMiLCJjb25jYXQiLCJlcnJvciIsIkJCSSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7SUFFcUJBLE07Ozs7Ozs7Ozs7Ozs7QUFDbkI7Ozs7Ozs7Ozs7O2lEQVNFQyxPLEVBQ0FDLEssRUFDQUMsRzs7Ozs7Ozs7O0FBQ0FDLGdCQUFBQSxJLDJEQUFnQixFOzt1QkFFVixLQUFLQyxTQUFMLENBQWVELElBQUksQ0FBQ0UsTUFBcEIsQzs7O0FBQ0FDLGdCQUFBQSxPLEdBQVUsS0FBS0MsYUFBTCxDQUFtQlAsT0FBbkIsQzs7dUJBRUcsS0FBS1EsT0FBTCxDQUFhLENBQWIsQzs7O0FBQWJDLGdCQUFBQSxJOztvQkFDREEsSTs7Ozs7c0JBQ0csSUFBSUMsS0FBSixDQUFVLG1DQUFWLEM7OztpREFFRCxJQUFJQyxnQkFBSixDQUFlLFVBQUNDLFFBQUQsRUFBbUM7QUFDdkRILGtCQUFBQSxJQUFJLENBQUNJLFdBQUwsQ0FBaUJQLE9BQWpCLEVBQTBCTCxLQUExQixFQUFpQ0MsR0FBakMsRUFBc0NVLFFBQXRDLEVBQWdEVCxJQUFJLENBQUNFLE1BQXJEO0FBQ0QsaUJBRk0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tEQU1QTCxPLEVBQ0FDLEssRUFDQUMsRzs7Ozs7Ozs7O0FBQ0FDLGdCQUFBQSxJLDhEQUFnQjtBQUFFVyxrQkFBQUEsS0FBSyxFQUFFO0FBQVQsaUI7QUFFWkMsZ0JBQUFBLFEsR0FBc0IsRTs7dUJBQ1QsS0FBS0MsZ0JBQUwsQ0FBc0JoQixPQUF0QixFQUErQkMsS0FBL0IsRUFBc0NDLEdBQXRDLEVBQTJDQyxJQUEzQyxDOzs7QUFBWGMsZ0JBQUFBLEU7a0RBQ0MsSUFBSUMsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUN0QztBQUNBSCxrQkFBQUEsRUFBRSxDQUFDSSxTQUFILENBQ0UsVUFBQUMsS0FBSztBQUFBLDJCQUFJUCxRQUFRLEdBQUdBLFFBQVEsQ0FBQ1EsTUFBVCxDQUFnQkQsS0FBaEIsQ0FBZjtBQUFBLG1CQURQLEVBRUUsVUFBQUUsS0FBSztBQUFBLDJCQUFJSixNQUFNLENBQUNJLEtBQUQsQ0FBVjtBQUFBLG1CQUZQLEVBR0UsWUFBTTtBQUNKTCxvQkFBQUEsT0FBTyxDQUFDSixRQUFELENBQVA7QUFDRCxtQkFMSDtBQU9ELGlCQVRNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW5DeUJVLFkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQkJJIGZyb20gJy4vYmJpJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaWdCZWQgZXh0ZW5kcyBCQkkge1xuICAvKipcbiAgICogR2V0cyBmZWF0dXJlcyBmcm9tIGEgQmlnV2lnIGZpbGVcbiAgICpcbiAgICogQHBhcmFtIHJlZk5hbWUgLSBUaGUgY2hyb21vc29tZSBuYW1lXG4gICAqIEBwYXJhbSBzdGFydCAtIFRoZSBzdGFydCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gZW5kIC0gVGhlIGVuZCBvZiBhIHJlZ2lvblxuICAgKiBAcmV0dXJuIFByb21pc2Ugd2l0aCBhbiBPYnNlcnZhYmxlIG9mIGFycmF5IG9mIGZlYXR1cmVzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RmVhdHVyZVN0cmVhbShcbiAgICByZWZOYW1lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlcixcbiAgICBvcHRzOiBPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8T2JzZXJ2YWJsZTxGZWF0dXJlW10+PiB7XG4gICAgYXdhaXQgdGhpcy5nZXRIZWFkZXIob3B0cy5zaWduYWwpXG4gICAgY29uc3QgY2hyTmFtZSA9IHRoaXMucmVuYW1lUmVmU2VxcyhyZWZOYW1lKVxuXG4gICAgY29uc3QgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldygxKVxuICAgIGlmICghdmlldykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gZ2V0IGJsb2NrIHZpZXcgZm9yIGRhdGEnKVxuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxGZWF0dXJlW10+KSA9PiB7XG4gICAgICB2aWV3LnJlYWRXaWdEYXRhKGNock5hbWUsIHN0YXJ0LCBlbmQsIG9ic2VydmVyLCBvcHRzLnNpZ25hbClcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEZlYXR1cmVzKFxuICAgIHJlZk5hbWU6IHN0cmluZyxcbiAgICBzdGFydDogbnVtYmVyLFxuICAgIGVuZDogbnVtYmVyLFxuICAgIG9wdHM6IE9wdGlvbnMgPSB7IHNjYWxlOiAxIH0sXG4gICk6IFByb21pc2U8RmVhdHVyZVtdPiB7XG4gICAgbGV0IGZlYXR1cmVzOiBGZWF0dXJlW10gPSBbXVxuICAgIGNvbnN0IG9iID0gYXdhaXQgdGhpcy5nZXRGZWF0dXJlU3RyZWFtKHJlZk5hbWUsIHN0YXJ0LCBlbmQsIG9wdHMpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgb2Iuc3Vic2NyaWJlKFxuICAgICAgICBmZWF0cyA9PiBmZWF0dXJlcyA9IGZlYXR1cmVzLmNvbmNhdChmZWF0cyksXG4gICAgICAgIGVycm9yID0+IHJlamVjdChlcnJvciksXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKGZlYXR1cmVzKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSlcbiAgfVxufVxuIl19 | ||
exports.BigBed = BigBed; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iaWdiZWQudHMiXSwibmFtZXMiOlsiZmlsdGVyVW5kZWYiLCJ0cyIsImZpbHRlciIsInQiLCJCaWdCZWQiLCJvcHRzIiwicmVhZEluZGljZXMiLCJoZWFkZXJDYWNoZSIsImFib3J0YWJsZU1lbW9pemUiLCJfcmVhZEluZGljZXMiLCJiaW5kIiwic2NhbGUiLCJhYm9ydFNpZ25hbCIsImdldFVuem9vbWVkVmlldyIsImdldEhlYWRlciIsImV4dEhlYWRlck9mZnNldCIsImlzQmlnRW5kaWFuIiwiZGF0YSIsIkJ1ZmZlciIsImFsbG9jIiwiYmJpIiwicmVhZCIsImxlIiwicmV0IiwiUGFyc2VyIiwiZW5kaWFuZXNzIiwidWludDE2IiwidWludDY0IiwicGFyc2UiLCJyZXN1bHQiLCJjb3VudCIsIm9mZnNldCIsImJsb2NrbGVuIiwibGVuIiwiYnVmIiwiZXh0UGFyc2VyIiwiaW50MTYiLCJza2lwIiwiaW5kaWNlcyIsImkiLCJwdXNoIiwic2xpY2UiLCJuYW1lIiwic2lnbmFsIiwibGVuZ3RoIiwibG9jcyIsIm1hcCIsImluZGV4IiwiZmllbGQiLCJwIiwiaW50MzIiLCJibG9ja1NpemUiLCJrZXlTaXplIiwidmFsU2l6ZSIsImJwdCIsImludDgiLCJjaG9pY2UiLCJ0YWciLCJjaG9pY2VzIiwiYXJyYXkiLCJ0eXBlIiwic3RyaW5nIiwic3RyaXBOdWxsIiwidWludDMyIiwiYnB0UmVhZE5vZGUiLCJub2RlT2Zmc2V0Iiwibm9kZSIsImxlYWZrZXlzIiwia2V5IiwibG9jYWxlQ29tcGFyZSIsImxhc3RPZmZzZXQiLCJrZXlzIiwidW5kZWZpbmVkIiwicm9vdE5vZGVPZmZzZXQiLCJQcm9taXNlIiwiYWxsIiwic2VhcmNoRXh0cmFJbmRleEJsb2NrcyIsImJsb2NrcyIsInZpZXciLCJyZXMiLCJibG9jayIsIk9ic2VydmFibGUiLCJvYnNlcnZlciIsInJlYWRGZWF0dXJlcyIsInBpcGUiLCJhY2MiLCJjdXJyIiwiY29uY2F0IiwieCIsIm1lcmdl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SUFBTjtBQUFBLDJCQUFlRCxHQUFHLENBQUNFLE1BQUosQ0FBV0QsSUFBWCxDQUFmO0FBQUEsbUJBQVAsQ0FISyxFQUlMLG9CQUFJLFVBQUFFLENBQUMsRUFBSTtBQUNQLHlCQUFLLElBQUlqRCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHaUQsQ0FBQyxDQUFDNUMsTUFBdEIsRUFBOEJMLENBQUMsSUFBSSxDQUFuQyxFQUFzQztBQUNuQ2lELHNCQUFBQSxDQUFDLENBQUNqRCxDQUFELENBQUQsQ0FBS1MsS0FBTCxHQUFhZ0MsS0FBSyxDQUFDaEMsS0FBbkIsQ0FEbUMsQ0FDVjtBQUMzQjs7QUFDRCwyQkFBT3dDLENBQVA7QUFDRCxtQkFMRCxDQUpLLENBQVA7QUFXRCxpQkFaVyxDOzt1QkFhTUMsMkRBQVNWLEdBQVQsR0FBY1csU0FBZCxFOzs7QUFBWm5FLGdCQUFBQSxHO2tEQUNDQSxHQUFHLENBQUNyQixNQUFKLENBQVcsVUFBQ3lGLENBQUQsRUFBWTtBQUM1Qix5QkFBT0EsQ0FBQyxDQUFDQyxJQUFGLENBQU9DLEtBQVAsQ0FBYSxJQUFiLEVBQW1CRixDQUFDLENBQUMzQyxLQUFGLEdBQVUsQ0FBN0IsTUFBb0NOLElBQTNDO0FBQ0QsaUJBRk0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMUtpQm9ELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJzZXIgfSBmcm9tICdAZ21vZC9iaW5hcnktcGFyc2VyJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIG1lcmdlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IG1hcCwgcmVkdWNlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IEJCSSwgRmVhdHVyZSB9IGZyb20gJy4vYmJpJ1xuaW1wb3J0IHsgQmxvY2tWaWV3IH0gZnJvbSAnLi9ibG9ja1ZpZXcnXG5cbmludGVyZmFjZSBMb2Mge1xuICBrZXk6IHN0cmluZ1xuICBvZmZzZXQ6IG51bWJlclxuICBsZW5ndGg6IG51bWJlclxuICBmaWVsZD86IG51bWJlclxufVxuaW50ZXJmYWNlIFNlYXJjaE9wdGlvbnMge1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbFxufVxuaW50ZXJmYWNlIEluZGV4IHtcbiAgdHlwZTogbnVtYmVyXG4gIGZpZWxkY291bnQ6IG51bWJlclxuICBvZmZzZXQ6IG51bWJlclxuICBmaWVsZDogbnVtYmVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJVbmRlZjxUPih0czogKFQgfCB1bmRlZmluZWQpW10pOiBUW10ge1xuICByZXR1cm4gdHMuZmlsdGVyKCh0OiBUIHwgdW5kZWZpbmVkKTogdCBpcyBUID0+ICEhdClcbn1cblxuZXhwb3J0IGNsYXNzIEJpZ0JlZCBleHRlbmRzIEJCSSB7XG4gIHB1YmxpYyByZWFkSW5kaWNlczogKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8SW5kZXhbXT5cblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0czogYW55KSB7XG4gICAgc3VwZXIob3B0cylcbiAgICB0aGlzLnJlYWRJbmRpY2VzID0gdGhpcy5oZWFkZXJDYWNoZS5hYm9ydGFibGVNZW1vaXplKHRoaXMuX3JlYWRJbmRpY2VzLmJpbmQodGhpcykpXG4gIH1cblxuICAvKlxuICAgKiByZXRyaWV2ZSB1bnpvb21lZCB2aWV3IGZvciBhbnkgc2NhbGVcbiAgICogQHBhcmFtIHNjYWxlIC0gdW51c2VkXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIGFuIG9wdGlvbmFsIEFib3J0U2lnbmFsIHRvIGtpbGwgb3BlcmF0aW9uXG4gICAqIEByZXR1cm4gcHJvbWlzZSBmb3IgYSBCbG9ja1ZpZXdcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRWaWV3KHNjYWxlOiBudW1iZXIsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8QmxvY2tWaWV3PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VW56b29tZWRWaWV3KGFib3J0U2lnbmFsKVxuICB9XG5cbiAgLypcbiAgICogcGFyc2UgdGhlIGJpZ2JlZCBleHRyYUluZGV4IGZpZWxkc1xuICAgKiBAcGFyYW0gYWJvcnRTaWduYWwgdG8gYWJvcnQgb3BlcmF0aW9uXG4gICAqIEByZXR1cm4gYSBQcm9taXNlIGZvciBhbiBhcnJheSBvZiBJbmRleCBkYXRhIHN0cnVjdHVyZSBzaW5jZSB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgZXh0cmFJbmRleGVzIGluIGEgYmlnYmVkLCBzZWUgYmVkVG9CaWdCZWQgZG9jdW1lbnRhdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIF9yZWFkSW5kaWNlcyhhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxJbmRleFtdPiB7XG4gICAgY29uc3QgeyBleHRIZWFkZXJPZmZzZXQsIGlzQmlnRW5kaWFuIH0gPSBhd2FpdCB0aGlzLmdldEhlYWRlcihhYm9ydFNpZ25hbClcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDY0KVxuICAgIGF3YWl0IHRoaXMuYmJpLnJlYWQoZGF0YSwgMCwgNjQsIGV4dEhlYWRlck9mZnNldClcbiAgICBjb25zdCBsZSA9IGlzQmlnRW5kaWFuID8gJ2JpZycgOiAnbGl0dGxlJ1xuICAgIGNvbnN0IHJldCA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC51aW50MTYoJ3NpemUnKVxuICAgICAgLnVpbnQxNignY291bnQnKVxuICAgICAgLnVpbnQ2NCgnb2Zmc2V0JylcbiAgICAgIC5wYXJzZShkYXRhKS5yZXN1bHRcbiAgICBjb25zdCB7IGNvdW50LCBvZmZzZXQgfSA9IHJldFxuXG4gICAgLy8gbm8gZXh0cmEgaW5kZXggaXMgZGVmaW5lZCBpZiBjb3VudD09MFxuICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgY29uc3QgYmxvY2tsZW4gPSAyMFxuICAgIGNvbnN0IGxlbiA9IGJsb2NrbGVuICogY291bnRcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MobGVuKVxuICAgIGF3YWl0IHRoaXMuYmJpLnJlYWQoYnVmLCAwLCBsZW4sIG9mZnNldClcbiAgICBjb25zdCBleHRQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAgIC5lbmRpYW5lc3MobGUpXG4gICAgICAuaW50MTYoJ3R5cGUnKVxuICAgICAgLmludDE2KCdmaWVsZGNvdW50JylcbiAgICAgIC51aW50NjQoJ29mZnNldCcpXG4gICAgICAuc2tpcCg0KVxuICAgICAgLmludDE2KCdmaWVsZCcpXG4gICAgY29uc3QgaW5kaWNlcyA9IFtdXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpICs9IDEpIHtcbiAgICAgIGluZGljZXMucHVzaChleHRQYXJzZXIucGFyc2UoYnVmLnNsaWNlKGkgKiBibG9ja2xlbikpLnJlc3VsdClcbiAgICB9XG4gICAgcmV0dXJuIGluZGljZXNcbiAgfVxuXG4gIC8qXG4gICAqIHBlcmZvcm0gYSBzZWFyY2ggaW4gdGhlIGJpZ2JlZCBleHRyYUluZGV4IHRvIGZpbmQgd2hpY2ggYmxvY2tzIGluIHRoZSBiaWdiZWQgZGF0YSB0byBsb29rIGZvciB0aGVcbiAgICogYWN0dWFsIGZlYXR1cmUgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIHRvIHNlYXJjaCBmb3JcbiAgICogQHBhcmFtIG9wdHMgLSBhIFNlYXJjaE9wdGlvbnMgYXJndW1lbnQgd2l0aCBvcHRpb25hbCBzaWduYWxcbiAgICogQHJldHVybiBhIFByb21pc2UgZm9yIGFuIGFycmF5IG9mIGJpZ2JlZCBibG9jayBMb2MgZW50cmllc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZWFyY2hFeHRyYUluZGV4QmxvY2tzKG5hbWU6IHN0cmluZywgb3B0czogU2VhcmNoT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxMb2NbXT4ge1xuICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBvcHRzXG4gICAgY29uc3QgeyBpc0JpZ0VuZGlhbiB9ID0gYXdhaXQgdGhpcy5nZXRIZWFkZXIoc2lnbmFsKVxuICAgIGNvbnN0IGluZGljZXMgPSBhd2FpdCB0aGlzLnJlYWRJbmRpY2VzKHNpZ25hbClcbiAgICBpZiAoIWluZGljZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gICAgY29uc3QgbG9jcyA9IGluZGljZXMubWFwKFxuICAgICAgYXN5bmMgKGluZGV4KTogUHJvbWlzZTxMb2MgfCB1bmRlZmluZWQ+ID0+IHtcbiAgICAgICAgY29uc3QgeyBvZmZzZXQsIGZpZWxkIH0gPSBpbmRleFxuICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDMyKVxuXG4gICAgICAgIGF3YWl0IHRoaXMuYmJpLnJlYWQoZGF0YSwgMCwgMzIsIG9mZnNldCwgeyBzaWduYWwgfSlcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQYXJzZXIoKVxuICAgICAgICAgIC5lbmRpYW5lc3MoaXNCaWdFbmRpYW4gPyAnYmlnJyA6ICdsaXR0bGUnKVxuICAgICAgICAgIC5pbnQzMignbWFnaWMnKVxuICAgICAgICAgIC5pbnQzMignYmxvY2tTaXplJylcbiAgICAgICAgICAuaW50MzIoJ2tleVNpemUnKVxuICAgICAgICAgIC5pbnQzMigndmFsU2l6ZScpXG4gICAgICAgICAgLnVpbnQ2NCgnaXRlbUNvdW50JylcblxuICAgICAgICBjb25zdCB7IGJsb2NrU2l6ZSwga2V5U2l6ZSwgdmFsU2l6ZSB9ID0gcC5wYXJzZShkYXRhKS5yZXN1bHRcbiAgICAgICAgY29uc3QgYnB0ID0gbmV3IFBhcnNlcigpXG4gICAgICAgICAgLmVuZGlhbmVzcyhpc0JpZ0VuZGlhbiA/ICdiaWcnIDogJ2xpdHRsZScpXG4gICAgICAgICAgLmludDgoJ25vZGVUeXBlJylcbiAgICAgICAgICAuc2tpcCgxKVxuICAgICAgICAgIC5pbnQxNignY250JylcbiAgICAgICAgICAuY2hvaWNlKHtcbiAgICAgICAgICAgIHRhZzogJ25vZGVUeXBlJyxcbiAgICAgICAgICAgIGNob2ljZXM6IHtcbiAgICAgICAgICAgICAgMDogbmV3IFBhcnNlcigpLmFycmF5KCdsZWFma2V5cycsIHtcbiAgICAgICAgICAgICAgICBsZW5ndGg6ICdjbnQnLFxuICAgICAgICAgICAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKS5zdHJpbmcoJ2tleScsIHsgbGVuZ3RoOiBrZXlTaXplLCBzdHJpcE51bGw6IHRydWUgfSkudWludDY0KCdvZmZzZXQnKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIDE6IG5ldyBQYXJzZXIoKS5hcnJheSgna2V5cycsIHtcbiAgICAgICAgICAgICAgICBsZW5ndGg6ICdjbnQnLFxuICAgICAgICAgICAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKVxuICAgICAgICAgICAgICAgICAgLnN0cmluZygna2V5JywgeyBsZW5ndGg6IGtleVNpemUsIHN0cmlwTnVsbDogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgLnVpbnQ2NCgnb2Zmc2V0JylcbiAgICAgICAgICAgICAgICAgIC51aW50MzIoJ2xlbmd0aCcpXG4gICAgICAgICAgICAgICAgICAudWludDMyKCdyZXNlcnZlZCcpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBicHRSZWFkTm9kZSA9IGFzeW5jIChub2RlT2Zmc2V0OiBudW1iZXIpOiBQcm9taXNlPExvYyB8IHVuZGVmaW5lZD4gPT4ge1xuICAgICAgICAgIGNvbnN0IGxlbiA9IDQgKyBibG9ja1NpemUgKiAoa2V5U2l6ZSArIHZhbFNpemUpXG4gICAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGxlbilcbiAgICAgICAgICBhd2FpdCB0aGlzLmJiaS5yZWFkKGJ1ZiwgMCwgbGVuLCBub2RlT2Zmc2V0LCB7IHNpZ25hbCB9KVxuICAgICAgICAgIGNvbnN0IG5vZGUgPSBicHQucGFyc2UoYnVmKS5yZXN1bHRcbiAgICAgICAgICBpZiAobm9kZS5sZWFma2V5cykge1xuICAgICAgICAgICAgbGV0IGxhc3RPZmZzZXRcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5sZWFma2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGtleSB9ID0gbm9kZS5sZWFma2V5c1tpXVxuICAgICAgICAgICAgICBpZiAobmFtZS5sb2NhbGVDb21wYXJlKGtleSkgPCAwICYmIGxhc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYnB0UmVhZE5vZGUobGFzdE9mZnNldClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYXN0T2Zmc2V0ID0gbm9kZS5sZWFma2V5c1tpXS5vZmZzZXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBicHRSZWFkTm9kZShsYXN0T2Zmc2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUua2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKG5vZGUua2V5c1tpXS5rZXkgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ubm9kZS5rZXlzW2ldLCBmaWVsZCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlT2Zmc2V0ID0gMzJcbiAgICAgICAgcmV0dXJuIGJwdFJlYWROb2RlKG9mZnNldCArIHJvb3ROb2RlT2Zmc2V0KVxuICAgICAgfSxcbiAgICApXG4gICAgcmV0dXJuIGZpbHRlclVuZGVmKGF3YWl0IFByb21pc2UuYWxsKGxvY3MpKVxuICB9XG5cbiAgLypcbiAgICogcmV0cmlldmUgdGhlIGZlYXR1cmVzIGZyb20gdGhlIGJpZ2JlZCBkYXRhIHRoYXQgd2VyZSBmb3VuZCB0aHJvdWdoIHRoZSBsb29rdXAgb2YgdGhlIGV4dHJhSW5kZXhcbiAgICogbm90ZSB0aGF0IHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBleHRyYUluZGV4LCBzZWUgdGhlIEJpZ0JlZCBzcGVjaWZpY2F0aW9uIGFuZCB0aGUgLWV4dHJhSW5kZXggYXJndW1lbnQgdG8gYmVkVG9CaWdCZWRcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSB0byBzZWFyY2ggZm9yXG4gICAqIEBwYXJhbSBvcHRzIC0gYSBTZWFyY2hPcHRpb25zIGFyZ3VtZW50IHdpdGggb3B0aW9uYWwgc2lnbmFsXG4gICAqIEByZXR1cm4gYSBQcm9taXNlIGZvciBhbiBhcnJheSBvZiBGZWF0dXJlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VhcmNoRXh0cmFJbmRleChuYW1lOiBzdHJpbmcsIG9wdHM6IFNlYXJjaE9wdGlvbnMgPSB7fSk6IFByb21pc2U8RmVhdHVyZVtdPiB7XG4gICAgY29uc3QgYmxvY2tzID0gYXdhaXQgdGhpcy5zZWFyY2hFeHRyYUluZGV4QmxvY2tzKG5hbWUsIG9wdHMpXG4gICAgaWYgKCFibG9ja3MubGVuZ3RoKSByZXR1cm4gW11cbiAgICBjb25zdCB2aWV3ID0gYXdhaXQgdGhpcy5nZXRVbnpvb21lZFZpZXcoKVxuICAgIGNvbnN0IHJlcyA9IGJsb2Nrcy5tYXAoYmxvY2sgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8RmVhdHVyZVtdPikgPT4ge1xuICAgICAgICB2aWV3LnJlYWRGZWF0dXJlcyhvYnNlcnZlciwgW2Jsb2NrXSwgb3B0cylcbiAgICAgIH0pLnBpcGUoXG4gICAgICAgIHJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MuY29uY2F0KGN1cnIpKSxcbiAgICAgICAgbWFwKHggPT4ge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgIHhbaV0uZmllbGQgPSBibG9jay5maWVsZCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB4XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIH0pXG4gICAgY29uc3QgcmV0ID0gYXdhaXQgbWVyZ2UoLi4ucmVzKS50b1Byb21pc2UoKVxuICAgIHJldHVybiByZXQuZmlsdGVyKChmOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmLnJlc3Quc3BsaXQoJ1xcdCcpW2YuZmllbGQgLSAzXSA9PT0gbmFtZVxuICAgIH0pXG4gIH1cbn1cbiJdfQ== |
@@ -1,6 +0,6 @@ | ||
import BBI from './bbi'; | ||
import { Observable } from 'rxjs'; | ||
export default class BigWig extends BBI { | ||
import { BlockView } from './blockView'; | ||
import { BBI } from './bbi'; | ||
export declare class BigWig extends BBI { | ||
/** | ||
* Gets features from a BigWig file | ||
* Retrieves a BlockView of a specific zoomLevel | ||
* | ||
@@ -12,4 +12,3 @@ * @param refName - The chromosome name | ||
*/ | ||
getFeatureStream(refName: string, start: number, end: number, opts?: Options): Promise<Observable<Feature[]>>; | ||
getFeatures(refName: string, start: number, end: number, opts?: Options): Promise<Feature[]>; | ||
protected getView(scale: number, abortSignal?: AbortSignal): Promise<BlockView>; | ||
} |
@@ -8,3 +8,3 @@ "use strict"; | ||
}); | ||
exports.default = void 0; | ||
exports.BigWig = void 0; | ||
@@ -25,5 +25,5 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); | ||
var _bbi = _interopRequireDefault(require("./bbi")); | ||
var _blockView = require("./blockView"); | ||
var _rxjs = require("rxjs"); | ||
var _bbi = require("./bbi"); | ||
@@ -41,6 +41,6 @@ var BigWig = | ||
(0, _createClass2.default)(BigWig, [{ | ||
key: "getFeatureStream", | ||
key: "getView", | ||
/** | ||
* Gets features from a BigWig file | ||
* Retrieves a BlockView of a specific zoomLevel | ||
* | ||
@@ -53,9 +53,7 @@ * @param refName - The chromosome name | ||
value: function () { | ||
var _getFeatureStream = (0, _asyncToGenerator2.default)( | ||
var _getView = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee(refName, start, end) { | ||
var opts, | ||
chrName, | ||
view, | ||
_args = arguments; | ||
_regenerator.default.mark(function _callee(scale, abortSignal) { | ||
var _ref, zoomLevels, refsByName, fileSize, isBigEndian, uncompressBufSize, basesPerPx, maxLevel, i, zh, indexLength; | ||
return _regenerator.default.wrap(function _callee$(_context) { | ||
@@ -65,59 +63,47 @@ while (1) { | ||
case 0: | ||
opts = _args.length > 3 && _args[3] !== undefined ? _args[3] : { | ||
scale: 1 | ||
}; | ||
_context.next = 3; | ||
return this.getHeader(opts.signal); | ||
_context.next = 2; | ||
return this.getHeader(abortSignal); | ||
case 3: | ||
chrName = this.renameRefSeqs(refName); | ||
case 2: | ||
_ref = _context.sent; | ||
zoomLevels = _ref.zoomLevels; | ||
refsByName = _ref.refsByName; | ||
fileSize = _ref.fileSize; | ||
isBigEndian = _ref.isBigEndian; | ||
uncompressBufSize = _ref.uncompressBufSize; | ||
basesPerPx = 1 / scale; | ||
maxLevel = zoomLevels.length; | ||
if (!opts.basesPerSpan) { | ||
_context.next = 10; | ||
if (!fileSize) { | ||
// if we don't know the file size, we can't fetch the highest zoom level :-( | ||
maxLevel -= 1; | ||
} | ||
i = maxLevel; | ||
case 12: | ||
if (!(i > 0)) { | ||
_context.next = 20; | ||
break; | ||
} | ||
_context.next = 7; | ||
return this.getView(1 / opts.basesPerSpan, opts.signal); | ||
zh = zoomLevels[i]; | ||
case 7: | ||
view = _context.sent; | ||
_context.next = 19; | ||
break; | ||
case 10: | ||
if (!opts.scale) { | ||
_context.next = 16; | ||
if (!(zh && zh.reductionLevel <= 2 * basesPerPx)) { | ||
_context.next = 17; | ||
break; | ||
} | ||
_context.next = 13; | ||
return this.getView(opts.scale, opts.signal); | ||
indexLength = i < zoomLevels.length - 1 ? zoomLevels[i + 1].dataOffset - zh.indexOffset : fileSize - 4 - zh.indexOffset; | ||
return _context.abrupt("return", new _blockView.BlockView(this.bbi, refsByName, zh.indexOffset, indexLength, isBigEndian, uncompressBufSize > 0, 'summary')); | ||
case 13: | ||
view = _context.sent; | ||
_context.next = 19; | ||
case 17: | ||
i -= 1; | ||
_context.next = 12; | ||
break; | ||
case 16: | ||
_context.next = 18; | ||
return this.getView(1, opts.signal); | ||
case 20: | ||
return _context.abrupt("return", this.getUnzoomedView(abortSignal)); | ||
case 18: | ||
view = _context.sent; | ||
case 19: | ||
if (view) { | ||
_context.next = 21; | ||
break; | ||
} | ||
throw new Error('unable to get block view for data'); | ||
case 21: | ||
return _context.abrupt("return", new _rxjs.Observable(function (observer) { | ||
view.readWigData(chrName, start, end, observer, opts.signal); | ||
})); | ||
case 22: | ||
case "end": | ||
@@ -130,61 +116,13 @@ return _context.stop(); | ||
function getFeatureStream(_x, _x2, _x3) { | ||
return _getFeatureStream.apply(this, arguments); | ||
function getView(_x, _x2) { | ||
return _getView.apply(this, arguments); | ||
} | ||
return getFeatureStream; | ||
return getView; | ||
}() | ||
}, { | ||
key: "getFeatures", | ||
value: function () { | ||
var _getFeatures = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee2(refName, start, end) { | ||
var opts, | ||
features, | ||
ob, | ||
_args2 = arguments; | ||
return _regenerator.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
opts = _args2.length > 3 && _args2[3] !== undefined ? _args2[3] : { | ||
scale: 1 | ||
}; | ||
features = []; | ||
_context2.next = 4; | ||
return this.getFeatureStream(refName, start, end, opts); | ||
case 4: | ||
ob = _context2.sent; | ||
return _context2.abrupt("return", new Promise(function (resolve, reject) { | ||
// prettier-ignore | ||
ob.subscribe(function (feats) { | ||
return features = features.concat(feats); | ||
}, function (error) { | ||
return reject(error); | ||
}, function () { | ||
resolve(features); | ||
}); | ||
})); | ||
case 6: | ||
case "end": | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2, this); | ||
})); | ||
function getFeatures(_x4, _x5, _x6) { | ||
return _getFeatures.apply(this, arguments); | ||
} | ||
return getFeatures; | ||
}() | ||
}]); | ||
return BigWig; | ||
}(_bbi.default); | ||
}(_bbi.BBI); | ||
exports.default = BigWig; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iaWd3aWcudHMiXSwibmFtZXMiOlsiQmlnV2lnIiwicmVmTmFtZSIsInN0YXJ0IiwiZW5kIiwib3B0cyIsInNjYWxlIiwiZ2V0SGVhZGVyIiwic2lnbmFsIiwiY2hyTmFtZSIsInJlbmFtZVJlZlNlcXMiLCJiYXNlc1BlclNwYW4iLCJnZXRWaWV3IiwidmlldyIsIkVycm9yIiwiT2JzZXJ2YWJsZSIsIm9ic2VydmVyIiwicmVhZFdpZ0RhdGEiLCJmZWF0dXJlcyIsImdldEZlYXR1cmVTdHJlYW0iLCJvYiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic3Vic2NyaWJlIiwiZmVhdHMiLCJjb25jYXQiLCJlcnJvciIsIkJCSSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7SUFHcUJBLE07Ozs7Ozs7Ozs7Ozs7QUFDbkI7Ozs7Ozs7Ozs7O2lEQVNFQyxPLEVBQ0FDLEssRUFDQUMsRzs7Ozs7Ozs7O0FBQ0FDLGdCQUFBQSxJLDJEQUFnQjtBQUFFQyxrQkFBQUEsS0FBSyxFQUFFO0FBQVQsaUI7O3VCQUVWLEtBQUtDLFNBQUwsQ0FBZUYsSUFBSSxDQUFDRyxNQUFwQixDOzs7QUFDQUMsZ0JBQUFBLE8sR0FBVSxLQUFLQyxhQUFMLENBQW1CUixPQUFuQixDOztxQkFHWkcsSUFBSSxDQUFDTSxZOzs7Ozs7dUJBQ00sS0FBS0MsT0FBTCxDQUFhLElBQUlQLElBQUksQ0FBQ00sWUFBdEIsRUFBb0NOLElBQUksQ0FBQ0csTUFBekMsQzs7O0FBQWJLLGdCQUFBQSxJOzs7OztxQkFDU1IsSUFBSSxDQUFDQyxLOzs7Ozs7dUJBQ0QsS0FBS00sT0FBTCxDQUFhUCxJQUFJLENBQUNDLEtBQWxCLEVBQXlCRCxJQUFJLENBQUNHLE1BQTlCLEM7OztBQUFiSyxnQkFBQUEsSTs7Ozs7O3VCQUVhLEtBQUtELE9BQUwsQ0FBYSxDQUFiLEVBQWdCUCxJQUFJLENBQUNHLE1BQXJCLEM7OztBQUFiSyxnQkFBQUEsSTs7O29CQUdHQSxJOzs7OztzQkFDRyxJQUFJQyxLQUFKLENBQVUsbUNBQVYsQzs7O2lEQUVELElBQUlDLGdCQUFKLENBQWUsVUFBQ0MsUUFBRCxFQUFtQztBQUN2REgsa0JBQUFBLElBQUksQ0FBQ0ksV0FBTCxDQUFpQlIsT0FBakIsRUFBMEJOLEtBQTFCLEVBQWlDQyxHQUFqQyxFQUFzQ1ksUUFBdEMsRUFBZ0RYLElBQUksQ0FBQ0csTUFBckQ7QUFDRCxpQkFGTSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0RBTVBOLE8sRUFDQUMsSyxFQUNBQyxHOzs7Ozs7Ozs7QUFDQUMsZ0JBQUFBLEksOERBQWdCO0FBQUVDLGtCQUFBQSxLQUFLLEVBQUU7QUFBVCxpQjtBQUVaWSxnQkFBQUEsUSxHQUFzQixFOzt1QkFDVCxLQUFLQyxnQkFBTCxDQUFzQmpCLE9BQXRCLEVBQStCQyxLQUEvQixFQUFzQ0MsR0FBdEMsRUFBMkNDLElBQTNDLEM7OztBQUFYZSxnQkFBQUEsRTtrREFDQyxJQUFJQyxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQXFCO0FBQ3RDO0FBQ0FILGtCQUFBQSxFQUFFLENBQUNJLFNBQUgsQ0FDRSxVQUFBQyxLQUFLO0FBQUEsMkJBQUlQLFFBQVEsR0FBR0EsUUFBUSxDQUFDUSxNQUFULENBQWdCRCxLQUFoQixDQUFmO0FBQUEsbUJBRFAsRUFFRSxVQUFBRSxLQUFLO0FBQUEsMkJBQUlKLE1BQU0sQ0FBQ0ksS0FBRCxDQUFWO0FBQUEsbUJBRlAsRUFHRSxZQUFNO0FBQ0pMLG9CQUFBQSxPQUFPLENBQUNKLFFBQUQsQ0FBUDtBQUNELG1CQUxIO0FBT0QsaUJBVE0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBM0N5QlUsWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCQkkgZnJvbSAnLi9iYmknXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnXG5pbXBvcnQgQmxvY2tWaWV3IGZyb20gJy4vYmxvY2tWaWV3J1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaWdXaWcgZXh0ZW5kcyBCQkkge1xuICAvKipcbiAgICogR2V0cyBmZWF0dXJlcyBmcm9tIGEgQmlnV2lnIGZpbGVcbiAgICpcbiAgICogQHBhcmFtIHJlZk5hbWUgLSBUaGUgY2hyb21vc29tZSBuYW1lXG4gICAqIEBwYXJhbSBzdGFydCAtIFRoZSBzdGFydCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gZW5kIC0gVGhlIGVuZCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gb3B0cyAtIEFuIG9iamVjdCBjb250YWluaW5nIGJhc2VzUGVyU3BhbiAoZS5nLiBwaXhlbHMgcGVyIGJhc2VwYWlyKSBvciBzY2FsZSB1c2VkIHRvIGluZmVyIHRoZSB6b29tTGV2ZWwgdG8gdXNlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RmVhdHVyZVN0cmVhbShcbiAgICByZWZOYW1lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlcixcbiAgICBvcHRzOiBPcHRpb25zID0geyBzY2FsZTogMSB9LFxuICApOiBQcm9taXNlPE9ic2VydmFibGU8RmVhdHVyZVtdPj4ge1xuICAgIGF3YWl0IHRoaXMuZ2V0SGVhZGVyKG9wdHMuc2lnbmFsKVxuICAgIGNvbnN0IGNock5hbWUgPSB0aGlzLnJlbmFtZVJlZlNlcXMocmVmTmFtZSlcbiAgICBsZXQgdmlldzogQmxvY2tWaWV3XG5cbiAgICBpZiAob3B0cy5iYXNlc1BlclNwYW4pIHtcbiAgICAgIHZpZXcgPSBhd2FpdCB0aGlzLmdldFZpZXcoMSAvIG9wdHMuYmFzZXNQZXJTcGFuLCBvcHRzLnNpZ25hbClcbiAgICB9IGVsc2UgaWYgKG9wdHMuc2NhbGUpIHtcbiAgICAgIHZpZXcgPSBhd2FpdCB0aGlzLmdldFZpZXcob3B0cy5zY2FsZSwgb3B0cy5zaWduYWwpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZpZXcgPSBhd2FpdCB0aGlzLmdldFZpZXcoMSwgb3B0cy5zaWduYWwpXG4gICAgfVxuXG4gICAgaWYgKCF2aWV3KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSB0byBnZXQgYmxvY2sgdmlldyBmb3IgZGF0YScpXG4gICAgfVxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEZlYXR1cmVbXT4pID0+IHtcbiAgICAgIHZpZXcucmVhZFdpZ0RhdGEoY2hyTmFtZSwgc3RhcnQsIGVuZCwgb2JzZXJ2ZXIsIG9wdHMuc2lnbmFsKVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RmVhdHVyZXMoXG4gICAgcmVmTmFtZTogc3RyaW5nLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXIsXG4gICAgb3B0czogT3B0aW9ucyA9IHsgc2NhbGU6IDEgfSxcbiAgKTogUHJvbWlzZTxGZWF0dXJlW10+IHtcbiAgICBsZXQgZmVhdHVyZXM6IEZlYXR1cmVbXSA9IFtdXG4gICAgY29uc3Qgb2IgPSBhd2FpdCB0aGlzLmdldEZlYXR1cmVTdHJlYW0ocmVmTmFtZSwgc3RhcnQsIGVuZCwgb3B0cylcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICBvYi5zdWJzY3JpYmUoXG4gICAgICAgIGZlYXRzID0+IGZlYXR1cmVzID0gZmVhdHVyZXMuY29uY2F0KGZlYXRzKSxcbiAgICAgICAgZXJyb3IgPT4gcmVqZWN0KGVycm9yKSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoZmVhdHVyZXMpXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9KVxuICB9XG59XG4iXX0= | ||
exports.BigWig = BigWig; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iaWd3aWcudHMiXSwibmFtZXMiOlsiQmlnV2lnIiwic2NhbGUiLCJhYm9ydFNpZ25hbCIsImdldEhlYWRlciIsInpvb21MZXZlbHMiLCJyZWZzQnlOYW1lIiwiZmlsZVNpemUiLCJpc0JpZ0VuZGlhbiIsInVuY29tcHJlc3NCdWZTaXplIiwiYmFzZXNQZXJQeCIsIm1heExldmVsIiwibGVuZ3RoIiwiaSIsInpoIiwicmVkdWN0aW9uTGV2ZWwiLCJpbmRleExlbmd0aCIsImRhdGFPZmZzZXQiLCJpbmRleE9mZnNldCIsIkJsb2NrVmlldyIsImJiaSIsImdldFVuem9vbWVkVmlldyIsIkJCSSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7SUFFYUEsTTs7Ozs7Ozs7Ozs7OztBQUNYOzs7Ozs7Ozs7OztpREFRd0JDLEssRUFBZUMsVzs7Ozs7Ozs7dUJBQzhDLEtBQUtDLFNBQUwsQ0FBZUQsV0FBZixDOzs7O0FBQTNFRSxnQkFBQUEsVSxRQUFBQSxVO0FBQVlDLGdCQUFBQSxVLFFBQUFBLFU7QUFBWUMsZ0JBQUFBLFEsUUFBQUEsUTtBQUFVQyxnQkFBQUEsVyxRQUFBQSxXO0FBQWFDLGdCQUFBQSxpQixRQUFBQSxpQjtBQUNqREMsZ0JBQUFBLFUsR0FBYSxJQUFJUixLO0FBQ25CUyxnQkFBQUEsUSxHQUFXTixVQUFVLENBQUNPLE07O0FBQzFCLG9CQUFJLENBQUNMLFFBQUwsRUFBZTtBQUNiO0FBQ0FJLGtCQUFBQSxRQUFRLElBQUksQ0FBWjtBQUNEOztBQUVRRSxnQkFBQUEsQyxHQUFJRixROzs7c0JBQVVFLENBQUMsR0FBRyxDOzs7OztBQUNuQkMsZ0JBQUFBLEUsR0FBS1QsVUFBVSxDQUFDUSxDQUFELEM7O3NCQUNqQkMsRUFBRSxJQUFJQSxFQUFFLENBQUNDLGNBQUgsSUFBcUIsSUFBSUwsVTs7Ozs7QUFDM0JNLGdCQUFBQSxXLEdBQ0pILENBQUMsR0FBR1IsVUFBVSxDQUFDTyxNQUFYLEdBQW9CLENBQXhCLEdBQTRCUCxVQUFVLENBQUNRLENBQUMsR0FBRyxDQUFMLENBQVYsQ0FBa0JJLFVBQWxCLEdBQStCSCxFQUFFLENBQUNJLFdBQTlELEdBQTRFWCxRQUFRLEdBQUcsQ0FBWCxHQUFlTyxFQUFFLENBQUNJLFc7aURBQ3pGLElBQUlDLG9CQUFKLENBQ0wsS0FBS0MsR0FEQSxFQUVMZCxVQUZLLEVBR0xRLEVBQUUsQ0FBQ0ksV0FIRSxFQUlMRixXQUpLLEVBS0xSLFdBTEssRUFNTEMsaUJBQWlCLEdBQUcsQ0FOZixFQU9MLFNBUEssQzs7O0FBTG1CSSxnQkFBQUEsQ0FBQyxJQUFJLEM7Ozs7O2lEQWdCNUIsS0FBS1EsZUFBTCxDQUFxQmxCLFdBQXJCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWxDaUJtQixRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmxvY2tWaWV3IH0gZnJvbSAnLi9ibG9ja1ZpZXcnXG5pbXBvcnQgeyBCQkkgfSBmcm9tICcuL2JiaSdcblxuZXhwb3J0IGNsYXNzIEJpZ1dpZyBleHRlbmRzIEJCSSB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBCbG9ja1ZpZXcgb2YgYSBzcGVjaWZpYyB6b29tTGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHJlZk5hbWUgLSBUaGUgY2hyb21vc29tZSBuYW1lXG4gICAqIEBwYXJhbSBzdGFydCAtIFRoZSBzdGFydCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gZW5kIC0gVGhlIGVuZCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gb3B0cyAtIEFuIG9iamVjdCBjb250YWluaW5nIGJhc2VzUGVyU3BhbiAoZS5nLiBwaXhlbHMgcGVyIGJhc2VwYWlyKSBvciBzY2FsZSB1c2VkIHRvIGluZmVyIHRoZSB6b29tTGV2ZWwgdG8gdXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VmlldyhzY2FsZTogbnVtYmVyLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxCbG9ja1ZpZXc+IHtcbiAgICBjb25zdCB7IHpvb21MZXZlbHMsIHJlZnNCeU5hbWUsIGZpbGVTaXplLCBpc0JpZ0VuZGlhbiwgdW5jb21wcmVzc0J1ZlNpemUgfSA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVyKGFib3J0U2lnbmFsKVxuICAgIGNvbnN0IGJhc2VzUGVyUHggPSAxIC8gc2NhbGVcbiAgICBsZXQgbWF4TGV2ZWwgPSB6b29tTGV2ZWxzLmxlbmd0aFxuICAgIGlmICghZmlsZVNpemUpIHtcbiAgICAgIC8vIGlmIHdlIGRvbid0IGtub3cgdGhlIGZpbGUgc2l6ZSwgd2UgY2FuJ3QgZmV0Y2ggdGhlIGhpZ2hlc3Qgem9vbSBsZXZlbCA6LShcbiAgICAgIG1heExldmVsIC09IDFcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbWF4TGV2ZWw7IGkgPiAwOyBpIC09IDEpIHtcbiAgICAgIGNvbnN0IHpoID0gem9vbUxldmVsc1tpXVxuICAgICAgaWYgKHpoICYmIHpoLnJlZHVjdGlvbkxldmVsIDw9IDIgKiBiYXNlc1BlclB4KSB7XG4gICAgICAgIGNvbnN0IGluZGV4TGVuZ3RoID1cbiAgICAgICAgICBpIDwgem9vbUxldmVscy5sZW5ndGggLSAxID8gem9vbUxldmVsc1tpICsgMV0uZGF0YU9mZnNldCAtIHpoLmluZGV4T2Zmc2V0IDogZmlsZVNpemUgLSA0IC0gemguaW5kZXhPZmZzZXRcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja1ZpZXcoXG4gICAgICAgICAgdGhpcy5iYmksXG4gICAgICAgICAgcmVmc0J5TmFtZSxcbiAgICAgICAgICB6aC5pbmRleE9mZnNldCxcbiAgICAgICAgICBpbmRleExlbmd0aCxcbiAgICAgICAgICBpc0JpZ0VuZGlhbixcbiAgICAgICAgICB1bmNvbXByZXNzQnVmU2l6ZSA+IDAsXG4gICAgICAgICAgJ3N1bW1hcnknLFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFVuem9vbWVkVmlldyhhYm9ydFNpZ25hbClcbiAgfVxufVxuIl19 |
import { Observer } from 'rxjs'; | ||
import { Feature } from './bbi'; | ||
interface CoordRequest { | ||
chrId: number; | ||
start: number; | ||
end: number; | ||
} | ||
interface Options { | ||
signal?: AbortSignal; | ||
request?: CoordRequest; | ||
} | ||
/** | ||
@@ -9,3 +19,3 @@ * View into a subset of the data in a BigWig file. | ||
*/ | ||
export default class BlockView { | ||
export declare class BlockView { | ||
private cirTreeOffset; | ||
@@ -20,4 +30,15 @@ private cirTreeLength; | ||
private cirTreePromise?; | ||
private featureCache; | ||
private leafParser; | ||
private bigWigParser; | ||
private bigBedParser; | ||
private summaryParser; | ||
constructor(bbi: any, refsByName: any, cirTreeOffset: number, cirTreeLength: number, isBigEndian: boolean, isCompressed: boolean, blockType: string); | ||
readWigData(chrName: string, min: number, max: number, observer: Observer<Feature[]>, abortSignal?: AbortSignal): Promise<void>; | ||
readWigData(chrName: string, start: number, end: number, observer: Observer<Feature[]>, opts: Options): Promise<void>; | ||
private parseSummaryBlock; | ||
private parseBigBedBlock; | ||
private parseBigWigBlock; | ||
private static coordFilter; | ||
readFeatures(observer: Observer<Feature[]>, blocks: any, opts?: Options): Promise<void>; | ||
} | ||
export {}; |
"use strict"; | ||
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
@@ -8,4 +10,6 @@ | ||
}); | ||
exports.default = void 0; | ||
exports.BlockView = void 0; | ||
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread")); | ||
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); | ||
@@ -21,4 +25,60 @@ | ||
var _requestWorker = _interopRequireDefault(require("./requestWorker")); | ||
var _binaryParser = require("@gmod/binary-parser"); | ||
var _abortablePromiseCache = _interopRequireDefault(require("abortable-promise-cache")); | ||
var zlib = _interopRequireWildcard(require("zlib")); | ||
var _quickLru = _interopRequireDefault(require("quick-lru")); | ||
var _range = _interopRequireDefault(require("./range")); | ||
var _util = require("./util"); | ||
/* eslint no-bitwise: ["error", { "allow": ["|"] }] */ | ||
var BIG_WIG_TYPE_GRAPH = 1; | ||
var BIG_WIG_TYPE_VSTEP = 2; | ||
var BIG_WIG_TYPE_FSTEP = 3; | ||
function getParsers(isBigEndian) { | ||
var _choices; | ||
var le = isBigEndian ? 'big' : 'little'; | ||
var summaryParser = new _binaryParser.Parser().endianess(le).uint32('chromId').uint32('start').uint32('end').uint32('validCnt').float('minScore').float('maxScore').float('sumData').float('sumSqData'); | ||
var leafParser = new _binaryParser.Parser().endianess(le).uint8('isLeaf').skip(1).uint16('cnt').choice({ | ||
tag: 'isLeaf', | ||
choices: { | ||
1: new _binaryParser.Parser().array('blocksToFetch', { | ||
length: 'cnt', | ||
type: new _binaryParser.Parser().uint32('startChrom').uint32('startBase').uint32('endChrom').uint32('endBase').uint64('blockOffset').uint64('blockSize') | ||
}), | ||
0: new _binaryParser.Parser().array('recurOffsets', { | ||
length: 'cnt', | ||
type: new _binaryParser.Parser().uint32('startChrom').uint32('startBase').uint32('endChrom').uint32('endBase').uint64('blockOffset') | ||
}) | ||
} | ||
}); | ||
var bigBedParser = new _binaryParser.Parser().endianess(le).uint32('chromId').int32('start').int32('end').string('rest', { | ||
zeroTerminated: true | ||
}); | ||
var bigWigParser = new _binaryParser.Parser().endianess(le).skip(4).int32('blockStart').skip(4).uint32('itemStep').uint32('itemSpan').uint8('blockType').skip(1).uint16('itemCount').choice({ | ||
tag: 'blockType', | ||
choices: (_choices = {}, (0, _defineProperty2.default)(_choices, BIG_WIG_TYPE_FSTEP, new _binaryParser.Parser().array('items', { | ||
length: 'itemCount', | ||
type: new _binaryParser.Parser().float('score') | ||
})), (0, _defineProperty2.default)(_choices, BIG_WIG_TYPE_VSTEP, new _binaryParser.Parser().array('items', { | ||
length: 'itemCount', | ||
type: new _binaryParser.Parser().int32('start').float('score') | ||
})), (0, _defineProperty2.default)(_choices, BIG_WIG_TYPE_GRAPH, new _binaryParser.Parser().array('items', { | ||
length: 'itemCount', | ||
type: new _binaryParser.Parser().int32('start').int32('end').float('score') | ||
})), _choices) | ||
}); | ||
return { | ||
bigWigParser: bigWigParser, | ||
bigBedParser: bigBedParser, | ||
summaryParser: summaryParser, | ||
leafParser: leafParser | ||
}; | ||
} | ||
/** | ||
@@ -31,2 +91,4 @@ * View into a subset of the data in a BigWig file. | ||
*/ | ||
var BlockView = | ||
@@ -46,2 +108,7 @@ /*#__PURE__*/ | ||
(0, _defineProperty2.default)(this, "cirTreePromise", void 0); | ||
(0, _defineProperty2.default)(this, "featureCache", void 0); | ||
(0, _defineProperty2.default)(this, "leafParser", void 0); | ||
(0, _defineProperty2.default)(this, "bigWigParser", void 0); | ||
(0, _defineProperty2.default)(this, "bigBedParser", void 0); | ||
(0, _defineProperty2.default)(this, "summaryParser", void 0); | ||
if (!(cirTreeOffset >= 0)) throw new Error('invalid cirTreeOffset!'); | ||
@@ -57,5 +124,43 @@ if (!(cirTreeLength > 0)) throw new Error('invalid cirTreeLength!'); | ||
this.cirTreeBuffer = Buffer.alloc(48); | ||
} // todo:memoize/lru | ||
Object.assign(this, getParsers(isBigEndian)); | ||
this.featureCache = new _abortablePromiseCache.default({ | ||
cache: new _quickLru.default({ | ||
maxSize: 1000 | ||
}), | ||
fill: function () { | ||
var _fill = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee(requestData, signal) { | ||
var length, offset, resultBuffer; | ||
return _regenerator.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
length = requestData.length, offset = requestData.offset; | ||
resultBuffer = Buffer.alloc(length); | ||
_context.next = 4; | ||
return bbi.read(resultBuffer, 0, length, offset, { | ||
signal: signal | ||
}); | ||
case 4: | ||
return _context.abrupt("return", resultBuffer); | ||
case 5: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee); | ||
})); | ||
function fill(_x, _x2) { | ||
return _fill.apply(this, arguments); | ||
} | ||
return fill; | ||
}() | ||
}); | ||
} | ||
(0, _createClass2.default)(BlockView, [{ | ||
@@ -66,57 +171,162 @@ key: "readWigData", | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee(chrName, min, max, observer, abortSignal) { | ||
var refsByName, bbi, cirTreeOffset, isBigEndian, isCompressed, blockType, chr, buffer, cirBlockSize, worker; | ||
return _regenerator.default.wrap(function _callee$(_context) { | ||
_regenerator.default.mark(function _callee3(chrName, start, end, observer, opts) { | ||
var _this = this; | ||
var refsByName, bbi, cirTreeOffset, isBigEndian, signal, chrId, request, buffer, cirBlockSize, blocksToFetch, outstanding, cirFobRecur2, filterFeats, cirFobStartFetch, cirFobRecur; | ||
return _regenerator.default.wrap(function _callee3$(_context3) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
switch (_context3.prev = _context3.next) { | ||
case 0: | ||
refsByName = this.refsByName, bbi = this.bbi, cirTreeOffset = this.cirTreeOffset, isBigEndian = this.isBigEndian, isCompressed = this.isCompressed, blockType = this.blockType; | ||
chr = refsByName[chrName]; | ||
refsByName = this.refsByName, bbi = this.bbi, cirTreeOffset = this.cirTreeOffset, isBigEndian = this.isBigEndian; | ||
signal = opts.signal; | ||
chrId = refsByName[chrName]; | ||
if (chr === undefined) { | ||
if (chrId === undefined) { | ||
observer.complete(); | ||
} | ||
request = { | ||
chrId: chrId, | ||
start: start, | ||
end: end | ||
}; | ||
if (!this.cirTreePromise) { | ||
_context.next = 8; | ||
_context3.next = 10; | ||
break; | ||
} | ||
_context.next = 6; | ||
_context3.next = 8; | ||
return this.cirTreePromise; | ||
case 6: | ||
_context.next = 11; | ||
case 8: | ||
_context3.next = 13; | ||
break; | ||
case 8: | ||
_context.next = 10; | ||
case 10: | ||
_context3.next = 12; | ||
return bbi.read(this.cirTreeBuffer, 0, 48, cirTreeOffset, { | ||
signal: abortSignal | ||
signal: signal | ||
}); | ||
case 10: | ||
this.cirTreePromise = _context.sent; | ||
case 12: | ||
this.cirTreePromise = _context3.sent; | ||
case 11: | ||
case 13: | ||
buffer = this.cirTreeBuffer; | ||
cirBlockSize = isBigEndian ? buffer.readUInt32BE(4) : buffer.readUInt32LE(4); | ||
worker = new _requestWorker.default(bbi, chr, min, max, observer, { | ||
isBigEndian: isBigEndian, | ||
isCompressed: isCompressed, | ||
cirBlockSize: cirBlockSize, | ||
blockType: blockType, | ||
abortSignal: abortSignal | ||
}); | ||
worker.cirFobRecur([cirTreeOffset + 48], 1); | ||
blocksToFetch = []; | ||
outstanding = 0; | ||
case 15: | ||
filterFeats = function filterFeats(b) { | ||
return (b.startChrom < chrId || b.startChrom === chrId && b.startBase <= end) && (b.endChrom > chrId || b.endChrom === chrId && b.endBase >= start); | ||
}; | ||
cirFobStartFetch = | ||
/*#__PURE__*/ | ||
function () { | ||
var _ref = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee2(off, fr, level) { | ||
var length, offset, resultBuffer, i; | ||
return _regenerator.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
length = fr.max() - fr.min(); | ||
offset = fr.min(); | ||
_context2.next = 4; | ||
return _this.featureCache.get("".concat(length, "_").concat(offset), { | ||
length: length, | ||
offset: offset | ||
}, signal); | ||
case 4: | ||
resultBuffer = _context2.sent; | ||
for (i = 0; i < off.length; i += 1) { | ||
if (fr.contains(off[i])) { | ||
cirFobRecur2(resultBuffer, off[i] - offset, level, observer, opts); | ||
outstanding -= 1; | ||
if (outstanding === 0) { | ||
_this.readFeatures(observer, blocksToFetch, (0, _objectSpread2.default)({}, opts, { | ||
request: request | ||
})); | ||
} | ||
} | ||
} | ||
if (!(outstanding !== 0)) { | ||
_context2.next = 8; | ||
break; | ||
} | ||
throw new Error('did not complete'); | ||
case 8: | ||
case "end": | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2); | ||
})); | ||
return function cirFobStartFetch(_x8, _x9, _x10) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}(); | ||
cirFobRecur = function cirFobRecur(offset, level) { | ||
outstanding += offset.length; | ||
var maxCirBlockSpan = 4 + cirBlockSize * 32; // Upper bound on size, based on a completely full leaf node. | ||
var spans = new _range.default(offset[0], offset[0] + maxCirBlockSpan); | ||
for (var i = 1; i < offset.length; i += 1) { | ||
var blockSpan = new _range.default(offset[i], offset[i] + maxCirBlockSpan); | ||
spans = spans.union(blockSpan); | ||
} | ||
spans.getRanges().map(function (fr) { | ||
return cirFobStartFetch(offset, fr, level); | ||
}); | ||
}; | ||
cirFobRecur2 = function cirFobRecur2(cirBlockData, offset, level) { | ||
var data = cirBlockData.slice(offset); | ||
var p = _this.leafParser.parse(data).result; | ||
if (p.blocksToFetch) { | ||
blocksToFetch = blocksToFetch.concat(p.blocksToFetch.filter(filterFeats).map(function (l) { | ||
return { | ||
offset: l.blockOffset, | ||
length: l.blockSize | ||
}; | ||
})); | ||
} | ||
if (p.recurOffsets) { | ||
var recurOffsets = p.recurOffsets.filter(filterFeats).map(function (l) { | ||
return l.blockOffset; | ||
}); | ||
if (recurOffsets.length > 0) { | ||
cirFobRecur(recurOffsets, level + 1); | ||
} | ||
} | ||
}; | ||
cirFobRecur([cirTreeOffset + 48], 1); | ||
case 22: | ||
case "end": | ||
return _context.stop(); | ||
return _context3.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
}, _callee3, this); | ||
})); | ||
function readWigData(_x, _x2, _x3, _x4, _x5) { | ||
function readWigData(_x3, _x4, _x5, _x6, _x7) { | ||
return _readWigData.apply(this, arguments); | ||
@@ -127,2 +337,177 @@ } | ||
}() | ||
}, { | ||
key: "parseSummaryBlock", | ||
value: function parseSummaryBlock(data, startOffset, request) { | ||
var features = []; | ||
var currOffset = startOffset; | ||
while (currOffset < data.byteLength) { | ||
var res = this.summaryParser.parse(data.slice(currOffset)); | ||
features.push(res.result); | ||
currOffset += res.offset; | ||
} | ||
var items = features; | ||
if (request) items = items.filter(function (elt) { | ||
return elt.chromId === request.chrId; | ||
}); | ||
items = items.map(function (elt) { | ||
return { | ||
start: elt.start, | ||
end: elt.end, | ||
maxScore: elt.maxScore, | ||
minScore: elt.minScore, | ||
score: elt.sumData / (elt.validCnt || 1), | ||
summary: true | ||
}; | ||
}); | ||
return request ? items.filter(function (f) { | ||
return BlockView.coordFilter(f, request); | ||
}) : items; | ||
} | ||
}, { | ||
key: "parseBigBedBlock", | ||
value: function parseBigBedBlock(data, startOffset, request) { | ||
var items = []; | ||
var currOffset = startOffset; | ||
while (currOffset < data.byteLength) { | ||
var res = this.bigBedParser.parse(data.slice(currOffset)); | ||
res.result.uniqueId = "bb-".concat(startOffset + currOffset); | ||
items.push(res.result); | ||
currOffset += res.offset; | ||
} | ||
return request ? items.filter(function (f) { | ||
return BlockView.coordFilter(f, request); | ||
}) : items; | ||
} | ||
}, { | ||
key: "parseBigWigBlock", | ||
value: function parseBigWigBlock(bytes, startOffset, request) { | ||
var data = bytes.slice(startOffset); | ||
var results = this.bigWigParser.parse(data).result; | ||
var items = results.items; | ||
if (results.blockType === BIG_WIG_TYPE_FSTEP) { | ||
var step = results.itemStep, | ||
span = results.itemSpan; | ||
items = items.map(function (feature, index) { | ||
return (0, _objectSpread2.default)({}, feature, { | ||
start: index * step, | ||
end: index * step + span | ||
}); | ||
}); | ||
} else if (results.blockType === BIG_WIG_TYPE_VSTEP) { | ||
var _span = results.itemSpan; | ||
items = items.map(function (feature) { | ||
return (0, _objectSpread2.default)({}, feature, { | ||
end: feature.start + _span | ||
}); | ||
}); | ||
} | ||
return request ? items.filter(function (f) { | ||
return BlockView.coordFilter(f, request); | ||
}) : items; | ||
} | ||
}, { | ||
key: "readFeatures", | ||
value: function () { | ||
var _readFeatures = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee5(observer, blocks) { | ||
var _this2 = this; | ||
var opts, | ||
blockType, | ||
isCompressed, | ||
signal, | ||
request, | ||
blockGroupsToFetch, | ||
_args5 = arguments; | ||
return _regenerator.default.wrap(function _callee5$(_context5) { | ||
while (1) { | ||
switch (_context5.prev = _context5.next) { | ||
case 0: | ||
opts = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : {}; | ||
blockType = this.blockType, isCompressed = this.isCompressed; | ||
signal = opts.signal, request = opts.request; | ||
blockGroupsToFetch = (0, _util.groupBlocks)(blocks); | ||
_context5.next = 6; | ||
return Promise.all(blockGroupsToFetch.map( | ||
/*#__PURE__*/ | ||
function () { | ||
var _ref2 = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee4(blockGroup) { | ||
var length, offset, data; | ||
return _regenerator.default.wrap(function _callee4$(_context4) { | ||
while (1) { | ||
switch (_context4.prev = _context4.next) { | ||
case 0: | ||
length = blockGroup.length, offset = blockGroup.offset; | ||
_context4.next = 3; | ||
return _this2.featureCache.get("".concat(length, "_").concat(offset), blockGroup, signal); | ||
case 3: | ||
data = _context4.sent; | ||
blockGroup.blocks.forEach(function (block) { | ||
var blockOffset = block.offset - blockGroup.offset; | ||
var resultData = isCompressed ? zlib.inflateSync(data.slice(blockOffset)) : data; | ||
blockOffset = isCompressed ? 0 : offset; | ||
switch (blockType) { | ||
case 'summary': | ||
observer.next(_this2.parseSummaryBlock(resultData, blockOffset, request)); | ||
break; | ||
case 'bigwig': | ||
observer.next(_this2.parseBigWigBlock(resultData, blockOffset, request)); | ||
break; | ||
case 'bigbed': | ||
observer.next(_this2.parseBigBedBlock(resultData, blockOffset, request)); | ||
break; | ||
default: | ||
console.warn("Don't know what to do with ".concat(blockType)); | ||
} | ||
}); | ||
case 5: | ||
case "end": | ||
return _context4.stop(); | ||
} | ||
} | ||
}, _callee4); | ||
})); | ||
return function (_x13) { | ||
return _ref2.apply(this, arguments); | ||
}; | ||
}())); | ||
case 6: | ||
observer.complete(); | ||
case 7: | ||
case "end": | ||
return _context5.stop(); | ||
} | ||
} | ||
}, _callee5, this); | ||
})); | ||
function readFeatures(_x11, _x12) { | ||
return _readFeatures.apply(this, arguments); | ||
} | ||
return readFeatures; | ||
}() | ||
}], [{ | ||
key: "coordFilter", | ||
value: function coordFilter(f, range) { | ||
return f.start < range.end && f.end >= range.start; | ||
} | ||
}]); | ||
@@ -132,3 +517,3 @@ return BlockView; | ||
exports.default = BlockView; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ibG9ja1ZpZXcudHMiXSwibmFtZXMiOlsiQmxvY2tWaWV3IiwiYmJpIiwicmVmc0J5TmFtZSIsImNpclRyZWVPZmZzZXQiLCJjaXJUcmVlTGVuZ3RoIiwiaXNCaWdFbmRpYW4iLCJpc0NvbXByZXNzZWQiLCJibG9ja1R5cGUiLCJFcnJvciIsImNpclRyZWVCdWZmZXIiLCJCdWZmZXIiLCJhbGxvYyIsImNock5hbWUiLCJtaW4iLCJtYXgiLCJvYnNlcnZlciIsImFib3J0U2lnbmFsIiwiY2hyIiwidW5kZWZpbmVkIiwiY29tcGxldGUiLCJjaXJUcmVlUHJvbWlzZSIsInJlYWQiLCJzaWduYWwiLCJidWZmZXIiLCJjaXJCbG9ja1NpemUiLCJyZWFkVUludDMyQkUiLCJyZWFkVUludDMyTEUiLCJ3b3JrZXIiLCJSZXF1ZXN0V29ya2VyIiwiY2lyRm9iUmVjdXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7Ozs7OztJQVFxQkEsUzs7O0FBV25CLHFCQUNFQyxHQURGLEVBRUVDLFVBRkYsRUFHRUMsYUFIRixFQUlFQyxhQUpGLEVBS0VDLFdBTEYsRUFNRUMsWUFORixFQU9FQyxTQVBGLEVBUUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFFBQUksRUFBRUosYUFBYSxJQUFJLENBQW5CLENBQUosRUFBMkIsTUFBTSxJQUFJSyxLQUFKLENBQVUsd0JBQVYsQ0FBTjtBQUMzQixRQUFJLEVBQUVKLGFBQWEsR0FBRyxDQUFsQixDQUFKLEVBQTBCLE1BQU0sSUFBSUksS0FBSixDQUFVLHdCQUFWLENBQU47QUFFMUIsU0FBS0wsYUFBTCxHQUFxQkEsYUFBckI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCQSxhQUFyQjtBQUNBLFNBQUtFLFlBQUwsR0FBb0JBLFlBQXBCO0FBQ0EsU0FBS0osVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxTQUFLRyxXQUFMLEdBQW1CQSxXQUFuQjtBQUNBLFNBQUtKLEdBQUwsR0FBV0EsR0FBWDtBQUNBLFNBQUtNLFNBQUwsR0FBaUJBLFNBQWpCO0FBQ0EsU0FBS0UsYUFBTCxHQUFxQkMsTUFBTSxDQUFDQyxLQUFQLENBQWEsRUFBYixDQUFyQjtBQUNELEcsQ0FFRDs7Ozs7Ozs7aURBRUVDLE8sRUFDQUMsRyxFQUNBQyxHLEVBQ0FDLFEsRUFDQUMsVzs7Ozs7O0FBRVFkLGdCQUFBQSxVLEdBQXlFLEksQ0FBekVBLFUsRUFBWUQsRyxHQUE2RCxJLENBQTdEQSxHLEVBQUtFLGEsR0FBd0QsSSxDQUF4REEsYSxFQUFlRSxXLEdBQXlDLEksQ0FBekNBLFcsRUFBYUMsWSxHQUE0QixJLENBQTVCQSxZLEVBQWNDLFMsR0FBYyxJLENBQWRBLFM7QUFDN0RVLGdCQUFBQSxHLEdBQU1mLFVBQVUsQ0FBQ1UsT0FBRCxDOztBQUN0QixvQkFBSUssR0FBRyxLQUFLQyxTQUFaLEVBQXVCO0FBQ3JCSCxrQkFBQUEsUUFBUSxDQUFDSSxRQUFUO0FBQ0Q7O3FCQUNHLEtBQUtDLGM7Ozs7Ozt1QkFDRCxLQUFLQSxjOzs7Ozs7Ozt1QkFFaUJuQixHQUFHLENBQUNvQixJQUFKLENBQVMsS0FBS1osYUFBZCxFQUE2QixDQUE3QixFQUFnQyxFQUFoQyxFQUFvQ04sYUFBcEMsRUFBbUQ7QUFBRW1CLGtCQUFBQSxNQUFNLEVBQUVOO0FBQVYsaUJBQW5ELEM7OztBQUE1QixxQkFBS0ksYzs7O0FBRURHLGdCQUFBQSxNLEdBQVMsS0FBS2QsYTtBQUNkZSxnQkFBQUEsWSxHQUFlbkIsV0FBVyxHQUFHa0IsTUFBTSxDQUFDRSxZQUFQLENBQW9CLENBQXBCLENBQUgsR0FBNEJGLE1BQU0sQ0FBQ0csWUFBUCxDQUFvQixDQUFwQixDO0FBRXREQyxnQkFBQUEsTSxHQUFTLElBQUlDLHNCQUFKLENBQWtCM0IsR0FBbEIsRUFBdUJnQixHQUF2QixFQUE0QkosR0FBNUIsRUFBaUNDLEdBQWpDLEVBQXNDQyxRQUF0QyxFQUFnRDtBQUM3RFYsa0JBQUFBLFdBQVcsRUFBWEEsV0FENkQ7QUFFN0RDLGtCQUFBQSxZQUFZLEVBQVpBLFlBRjZEO0FBRzdEa0Isa0JBQUFBLFlBQVksRUFBWkEsWUFINkQ7QUFJN0RqQixrQkFBQUEsU0FBUyxFQUFUQSxTQUo2RDtBQUs3RFMsa0JBQUFBLFdBQVcsRUFBWEE7QUFMNkQsaUJBQWhELEM7QUFRZlcsZ0JBQUFBLE1BQU0sQ0FBQ0UsV0FBUCxDQUFtQixDQUFDMUIsYUFBYSxHQUFHLEVBQWpCLENBQW5CLEVBQXlDLENBQXpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlcXVlc3RXb3JrZXIgZnJvbSAnLi9yZXF1ZXN0V29ya2VyJ1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJ1xuLyoqXG4gKiBWaWV3IGludG8gYSBzdWJzZXQgb2YgdGhlIGRhdGEgaW4gYSBCaWdXaWcgZmlsZS5cbiAqXG4gKiBBZGFwdGVkIGJ5IFJvYmVydCBCdWVscyBhbmQgQ29saW4gRGllc2ggZnJvbSBiaWd3aWcuanMgaW4gdGhlIERhbGxpYW5jZSBHZW5vbWVcbiAqIEV4cGxvcmVyIGJ5IFRob21hcyBEb3duLlxuICogQGNvbnN0cnVjdHNcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCbG9ja1ZpZXcge1xuICBwcml2YXRlIGNpclRyZWVPZmZzZXQ6IG51bWJlclxuICBwcml2YXRlIGNpclRyZWVMZW5ndGg6IG51bWJlclxuICBwcml2YXRlIGJiaTogYW55XG4gIHByaXZhdGUgaXNDb21wcmVzc2VkOiBib29sZWFuXG4gIHByaXZhdGUgaXNCaWdFbmRpYW46IGJvb2xlYW5cbiAgcHJpdmF0ZSByZWZzQnlOYW1lOiBhbnlcbiAgcHJpdmF0ZSBibG9ja1R5cGU6IHN0cmluZ1xuICBwcml2YXRlIGNpclRyZWVCdWZmZXI6IEJ1ZmZlclxuICBwcml2YXRlIGNpclRyZWVQcm9taXNlPzogUHJvbWlzZTx2b2lkPlxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBiYmk6IGFueSxcbiAgICByZWZzQnlOYW1lOiBhbnksXG4gICAgY2lyVHJlZU9mZnNldDogbnVtYmVyLFxuICAgIGNpclRyZWVMZW5ndGg6IG51bWJlcixcbiAgICBpc0JpZ0VuZGlhbjogYm9vbGVhbixcbiAgICBpc0NvbXByZXNzZWQ6IGJvb2xlYW4sXG4gICAgYmxvY2tUeXBlOiBzdHJpbmcsXG4gICkge1xuICAgIGlmICghKGNpclRyZWVPZmZzZXQgPj0gMCkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjaXJUcmVlT2Zmc2V0IScpXG4gICAgaWYgKCEoY2lyVHJlZUxlbmd0aCA+IDApKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2lyVHJlZUxlbmd0aCEnKVxuXG4gICAgdGhpcy5jaXJUcmVlT2Zmc2V0ID0gY2lyVHJlZU9mZnNldFxuICAgIHRoaXMuY2lyVHJlZUxlbmd0aCA9IGNpclRyZWVMZW5ndGhcbiAgICB0aGlzLmlzQ29tcHJlc3NlZCA9IGlzQ29tcHJlc3NlZFxuICAgIHRoaXMucmVmc0J5TmFtZSA9IHJlZnNCeU5hbWVcbiAgICB0aGlzLmlzQmlnRW5kaWFuID0gaXNCaWdFbmRpYW5cbiAgICB0aGlzLmJiaSA9IGJiaVxuICAgIHRoaXMuYmxvY2tUeXBlID0gYmxvY2tUeXBlXG4gICAgdGhpcy5jaXJUcmVlQnVmZmVyID0gQnVmZmVyLmFsbG9jKDQ4KVxuICB9XG5cbiAgLy8gdG9kbzptZW1vaXplL2xydVxuICBwdWJsaWMgYXN5bmMgcmVhZFdpZ0RhdGEoXG4gICAgY2hyTmFtZTogc3RyaW5nLFxuICAgIG1pbjogbnVtYmVyLFxuICAgIG1heDogbnVtYmVyLFxuICAgIG9ic2VydmVyOiBPYnNlcnZlcjxGZWF0dXJlW10+LFxuICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgcmVmc0J5TmFtZSwgYmJpLCBjaXJUcmVlT2Zmc2V0LCBpc0JpZ0VuZGlhbiwgaXNDb21wcmVzc2VkLCBibG9ja1R5cGUgfSA9IHRoaXNcbiAgICBjb25zdCBjaHIgPSByZWZzQnlOYW1lW2Nock5hbWVdXG4gICAgaWYgKGNociA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYnNlcnZlci5jb21wbGV0ZSgpXG4gICAgfVxuICAgIGlmICh0aGlzLmNpclRyZWVQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNpclRyZWVQcm9taXNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2lyVHJlZVByb21pc2UgPSBhd2FpdCBiYmkucmVhZCh0aGlzLmNpclRyZWVCdWZmZXIsIDAsIDQ4LCBjaXJUcmVlT2Zmc2V0LCB7IHNpZ25hbDogYWJvcnRTaWduYWwgfSlcbiAgICB9XG4gICAgY29uc3QgYnVmZmVyID0gdGhpcy5jaXJUcmVlQnVmZmVyXG4gICAgY29uc3QgY2lyQmxvY2tTaXplID0gaXNCaWdFbmRpYW4gPyBidWZmZXIucmVhZFVJbnQzMkJFKDQpIDogYnVmZmVyLnJlYWRVSW50MzJMRSg0KVxuXG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFJlcXVlc3RXb3JrZXIoYmJpLCBjaHIsIG1pbiwgbWF4LCBvYnNlcnZlciwge1xuICAgICAgaXNCaWdFbmRpYW4sXG4gICAgICBpc0NvbXByZXNzZWQsXG4gICAgICBjaXJCbG9ja1NpemUsXG4gICAgICBibG9ja1R5cGUsXG4gICAgICBhYm9ydFNpZ25hbCxcbiAgICB9KVxuXG4gICAgd29ya2VyLmNpckZvYlJlY3VyKFtjaXJUcmVlT2Zmc2V0ICsgNDhdLCAxKVxuICB9XG59XG4iXX0= | ||
exports.BlockView = BlockView; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ibG9ja1ZpZXcudHMiXSwibmFtZXMiOlsiQklHX1dJR19UWVBFX0dSQVBIIiwiQklHX1dJR19UWVBFX1ZTVEVQIiwiQklHX1dJR19UWVBFX0ZTVEVQIiwiZ2V0UGFyc2VycyIsImlzQmlnRW5kaWFuIiwibGUiLCJzdW1tYXJ5UGFyc2VyIiwiUGFyc2VyIiwiZW5kaWFuZXNzIiwidWludDMyIiwiZmxvYXQiLCJsZWFmUGFyc2VyIiwidWludDgiLCJza2lwIiwidWludDE2IiwiY2hvaWNlIiwidGFnIiwiY2hvaWNlcyIsImFycmF5IiwibGVuZ3RoIiwidHlwZSIsInVpbnQ2NCIsImJpZ0JlZFBhcnNlciIsImludDMyIiwic3RyaW5nIiwiemVyb1Rlcm1pbmF0ZWQiLCJiaWdXaWdQYXJzZXIiLCJCbG9ja1ZpZXciLCJiYmkiLCJyZWZzQnlOYW1lIiwiY2lyVHJlZU9mZnNldCIsImNpclRyZWVMZW5ndGgiLCJpc0NvbXByZXNzZWQiLCJibG9ja1R5cGUiLCJFcnJvciIsImNpclRyZWVCdWZmZXIiLCJCdWZmZXIiLCJhbGxvYyIsIk9iamVjdCIsImFzc2lnbiIsImZlYXR1cmVDYWNoZSIsIkFib3J0YWJsZVByb21pc2VDYWNoZSIsImNhY2hlIiwiUXVpY2tMUlUiLCJtYXhTaXplIiwiZmlsbCIsInJlcXVlc3REYXRhIiwic2lnbmFsIiwib2Zmc2V0IiwicmVzdWx0QnVmZmVyIiwicmVhZCIsImNock5hbWUiLCJzdGFydCIsImVuZCIsIm9ic2VydmVyIiwib3B0cyIsImNocklkIiwidW5kZWZpbmVkIiwiY29tcGxldGUiLCJyZXF1ZXN0IiwiY2lyVHJlZVByb21pc2UiLCJidWZmZXIiLCJjaXJCbG9ja1NpemUiLCJyZWFkVUludDMyQkUiLCJyZWFkVUludDMyTEUiLCJibG9ja3NUb0ZldGNoIiwib3V0c3RhbmRpbmciLCJmaWx0ZXJGZWF0cyIsImIiLCJzdGFydENocm9tIiwic3RhcnRCYXNlIiwiZW5kQ2hyb20iLCJlbmRCYXNlIiwiY2lyRm9iU3RhcnRGZXRjaCIsIm9mZiIsImZyIiwibGV2ZWwiLCJtYXgiLCJtaW4iLCJnZXQiLCJpIiwiY29udGFpbnMiLCJjaXJGb2JSZWN1cjIiLCJyZWFkRmVhdHVyZXMiLCJjaXJGb2JSZWN1ciIsIm1heENpckJsb2NrU3BhbiIsInNwYW5zIiwiUmFuZ2UiLCJibG9ja1NwYW4iLCJ1bmlvbiIsImdldFJhbmdlcyIsIm1hcCIsImNpckJsb2NrRGF0YSIsImRhdGEiLCJzbGljZSIsInAiLCJwYXJzZSIsInJlc3VsdCIsImNvbmNhdCIsImZpbHRlciIsImwiLCJibG9ja09mZnNldCIsImJsb2NrU2l6ZSIsInJlY3VyT2Zmc2V0cyIsInN0YXJ0T2Zmc2V0IiwiZmVhdHVyZXMiLCJjdXJyT2Zmc2V0IiwiYnl0ZUxlbmd0aCIsInJlcyIsInB1c2giLCJpdGVtcyIsImVsdCIsImNocm9tSWQiLCJtYXhTY29yZSIsIm1pblNjb3JlIiwic2NvcmUiLCJzdW1EYXRhIiwidmFsaWRDbnQiLCJzdW1tYXJ5IiwiZiIsImNvb3JkRmlsdGVyIiwidW5pcXVlSWQiLCJieXRlcyIsInJlc3VsdHMiLCJzdGVwIiwiaXRlbVN0ZXAiLCJzcGFuIiwiaXRlbVNwYW4iLCJmZWF0dXJlIiwiaW5kZXgiLCJibG9ja3MiLCJibG9ja0dyb3Vwc1RvRmV0Y2giLCJQcm9taXNlIiwiYWxsIiwiYmxvY2tHcm91cCIsImZvckVhY2giLCJibG9jayIsInJlc3VsdERhdGEiLCJ6bGliIiwiaW5mbGF0ZVN5bmMiLCJuZXh0IiwicGFyc2VTdW1tYXJ5QmxvY2siLCJwYXJzZUJpZ1dpZ0Jsb2NrIiwicGFyc2VCaWdCZWRCbG9jayIsImNvbnNvbGUiLCJ3YXJuIiwicmFuZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBUkE7QUE4Q0EsSUFBTUEsa0JBQWtCLEdBQUcsQ0FBM0I7QUFDQSxJQUFNQyxrQkFBa0IsR0FBRyxDQUEzQjtBQUNBLElBQU1DLGtCQUFrQixHQUFH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Q0FBSyxRQUFMO0FBQ0VMLGtDQUFBQSxRQUFRLENBQUNzRixJQUFULENBQWMsTUFBSSxDQUFDRyxnQkFBTCxDQUFzQk4sVUFBdEIsRUFBa0NwQyxXQUFsQyxFQUErQzFDLE9BQS9DLENBQWQ7QUFDQTs7QUFDRjtBQUNFcUYsa0NBQUFBLE9BQU8sQ0FBQ0MsSUFBUixzQ0FBMkNoSCxTQUEzQztBQVhKO0FBYUQsNkJBbEJEOztBQUhxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBdkI7O0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBREksQzs7O0FBeUJOcUIsZ0JBQUFBLFFBQVEsQ0FBQ0ksUUFBVDs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dDQWpDeUI2RCxDLEVBQVkyQixLLEVBQThCO0FBQ25FLGFBQU8zQixDQUFDLENBQUNuRSxLQUFGLEdBQVU4RixLQUFLLENBQUM3RixHQUFoQixJQUF1QmtFLENBQUMsQ0FBQ2xFLEdBQUYsSUFBUzZGLEtBQUssQ0FBQzlGLEtBQTdDO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tYml0d2lzZTogW1wiZXJyb3JcIiwgeyBcImFsbG93XCI6IFtcInxcIl0gfV0gKi9cbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gJ0BnbW9kL2JpbmFyeS1wYXJzZXInXG5pbXBvcnQgQWJvcnRhYmxlUHJvbWlzZUNhY2hlIGZyb20gJ2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlJ1xuaW1wb3J0ICogYXMgemxpYiBmcm9tICd6bGliJ1xuaW1wb3J0IFF1aWNrTFJVIGZyb20gJ3F1aWNrLWxydSdcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuL2JiaSdcbmltcG9ydCBSYW5nZSBmcm9tICcuL3JhbmdlJ1xuaW1wb3J0IHsgZ3JvdXBCbG9ja3MgfSBmcm9tICcuL3V0aWwnXG5cbmludGVyZmFjZSBDb29yZFJlcXVlc3Qge1xuICBjaHJJZDogbnVtYmVyXG4gIHN0YXJ0OiBudW1iZXJcbiAgZW5kOiBudW1iZXJcbn1cbmludGVyZmFjZSBEYXRhQmxvY2sge1xuICBzdGFydENocm9tOiBudW1iZXJcbiAgZW5kQ2hyb206IG51bWJlclxuICBzdGFydEJhc2U6IG51bWJlclxuICBlbmRCYXNlOiBudW1iZXJcbiAgdmFsaWRDbnQ6IG51bWJlclxuICBtaW5WYWw6IG51bWJlclxuICBtYXhWYWw6IG51bWJlclxuICBzdW1EYXRhOiBudW1iZXJcbiAgc3VtU3FEYXRhOiBudW1iZXJcbn1cbmludGVyZmFjZSBSZWFkRGF0YSB7XG4gIG9mZnNldDogbnVtYmVyXG4gIGxlbmd0aDogbnVtYmVyXG59XG5cbmludGVyZmFjZSBTdW1tYXJ5QmxvY2sge1xuICBjaHJvbUlkOiBudW1iZXJcbiAgc3RhcnQ6IG51bWJlclxuICBlbmQ6IG51bWJlclxuICB2YWxpZENudDogbnVtYmVyXG4gIG1pblNjb3JlOiBudW1iZXJcbiAgbWF4U2NvcmU6IG51bWJlclxuICBzdW1EYXRhOiBudW1iZXJcbiAgc3VtU3FEYXRhOiBudW1iZXJcbn1cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgcmVxdWVzdD86IENvb3JkUmVxdWVzdFxufVxuXG5jb25zdCBCSUdfV0lHX1RZUEVfR1JBUEggPSAxXG5jb25zdCBCSUdfV0lHX1RZUEVfVlNURVAgPSAyXG5jb25zdCBCSUdfV0lHX1RZUEVfRlNURVAgPSAzXG5cbmZ1bmN0aW9uIGdldFBhcnNlcnMoaXNCaWdFbmRpYW46IGJvb2xlYW4pOiBhbnkge1xuICBjb25zdCBsZSA9IGlzQmlnRW5kaWFuID8gJ2JpZycgOiAnbGl0dGxlJ1xuICBjb25zdCBzdW1tYXJ5UGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAgLmVuZGlhbmVzcyhsZSlcbiAgICAudWludDMyKCdjaHJvbUlkJylcbiAgICAudWludDMyKCdzdGFydCcpXG4gICAgLnVpbnQzMignZW5kJylcbiAgICAudWludDMyKCd2YWxpZENudCcpXG4gICAgLmZsb2F0KCdtaW5TY29yZScpXG4gICAgLmZsb2F0KCdtYXhTY29yZScpXG4gICAgLmZsb2F0KCdzdW1EYXRhJylcbiAgICAuZmxvYXQoJ3N1bVNxRGF0YScpXG5cbiAgY29uc3QgbGVhZlBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLnVpbnQ4KCdpc0xlYWYnKVxuICAgIC5za2lwKDEpXG4gICAgLnVpbnQxNignY250JylcbiAgICAuY2hvaWNlKHtcbiAgICAgIHRhZzogJ2lzTGVhZicsXG4gICAgICBjaG9pY2VzOiB7XG4gICAgICAgIDE6IG5ldyBQYXJzZXIoKS5hcnJheSgnYmxvY2tzVG9GZXRjaCcsIHtcbiAgICAgICAgICBsZW5ndGg6ICdjbnQnLFxuICAgICAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKVxuICAgICAgICAgICAgLnVpbnQzMignc3RhcnRDaHJvbScpXG4gICAgICAgICAgICAudWludDMyKCdzdGFydEJhc2UnKVxuICAgICAgICAgICAgLnVpbnQzMignZW5kQ2hyb20nKVxuICAgICAgICAgICAgLnVpbnQzMignZW5kQmFzZScpXG4gICAgICAgICAgICAudWludDY0KCdibG9ja09mZnNldCcpXG4gICAgICAgICAgICAudWludDY0KCdibG9ja1NpemUnKSxcbiAgICAgICAgfSksXG4gICAgICAgIDA6IG5ldyBQYXJzZXIoKS5hcnJheSgncmVjdXJPZmZzZXRzJywge1xuICAgICAgICAgIGxlbmd0aDogJ2NudCcsXG4gICAgICAgICAgdHlwZTogbmV3IFBhcnNlcigpXG4gICAgICAgICAgICAudWludDMyKCdzdGFydENocm9tJylcbiAgICAgICAgICAgIC51aW50MzIoJ3N0YXJ0QmFzZScpXG4gICAgICAgICAgICAudWludDMyKCdlbmRDaHJvbScpXG4gICAgICAgICAgICAudWludDMyKCdlbmRCYXNlJylcbiAgICAgICAgICAgIC51aW50NjQoJ2Jsb2NrT2Zmc2V0JyksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KVxuICBjb25zdCBiaWdCZWRQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC51aW50MzIoJ2Nocm9tSWQnKVxuICAgIC5pbnQzMignc3RhcnQnKVxuICAgIC5pbnQzMignZW5kJylcbiAgICAuc3RyaW5nKCdyZXN0Jywge1xuICAgICAgemVyb1Rlcm1pbmF0ZWQ6IHRydWUsXG4gICAgfSlcblxuICBjb25zdCBiaWdXaWdQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC5za2lwKDQpXG4gICAgLmludDMyKCdibG9ja1N0YXJ0JylcbiAgICAuc2tpcCg0KVxuICAgIC51aW50MzIoJ2l0ZW1TdGVwJylcbiAgICAudWludDMyKCdpdGVtU3BhbicpXG4gICAgLnVpbnQ4KCdibG9ja1R5cGUnKVxuICAgIC5za2lwKDEpXG4gICAgLnVpbnQxNignaXRlbUNvdW50JylcbiAgICAuY2hvaWNlKHtcbiAgICAgIHRhZzogJ2Jsb2NrVHlwZScsXG4gICAgICBjaG9pY2VzOiB7XG4gICAgICAgIFtCSUdfV0lHX1RZUEVfRlNURVBdOiBuZXcgUGFyc2VyKCkuYXJyYXkoJ2l0ZW1zJywge1xuICAgICAgICAgIGxlbmd0aDogJ2l0ZW1Db3VudCcsXG4gICAgICAgICAgdHlwZTogbmV3IFBhcnNlcigpLmZsb2F0KCdzY29yZScpLFxuICAgICAgICB9KSxcbiAgICAgICAgW0JJR19XSUdfVFlQRV9WU1RFUF06IG5ldyBQYXJzZXIoKS5hcnJheSgnaXRlbXMnLCB7XG4gICAgICAgICAgbGVuZ3RoOiAnaXRlbUNvdW50JyxcbiAgICAgICAgICB0eXBlOiBuZXcgUGFyc2VyKCkuaW50MzIoJ3N0YXJ0JykuZmxvYXQoJ3Njb3JlJyksXG4gICAgICAgIH0pLFxuICAgICAgICBbQklHX1dJR19UWVBFX0dSQVBIXTogbmV3IFBhcnNlcigpLmFycmF5KCdpdGVtcycsIHtcbiAgICAgICAgICBsZW5ndGg6ICdpdGVtQ291bnQnLFxuICAgICAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKVxuICAgICAgICAgICAgLmludDMyKCdzdGFydCcpXG4gICAgICAgICAgICAuaW50MzIoJ2VuZCcpXG4gICAgICAgICAgICAuZmxvYXQoJ3Njb3JlJyksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KVxuICByZXR1cm4ge1xuICAgIGJpZ1dpZ1BhcnNlcixcbiAgICBiaWdCZWRQYXJzZXIsXG4gICAgc3VtbWFyeVBhcnNlcixcbiAgICBsZWFmUGFyc2VyLFxuICB9XG59XG5cbi8qKlxuICogVmlldyBpbnRvIGEgc3Vic2V0IG9mIHRoZSBkYXRhIGluIGEgQmlnV2lnIGZpbGUuXG4gKlxuICogQWRhcHRlZCBieSBSb2JlcnQgQnVlbHMgYW5kIENvbGluIERpZXNoIGZyb20gYmlnd2lnLmpzIGluIHRoZSBEYWxsaWFuY2UgR2Vub21lXG4gKiBFeHBsb3JlciBieSBUaG9tYXMgRG93bi5cbiAqIEBjb25zdHJ1Y3RzXG4gKi9cblxuZXhwb3J0IGNsYXNzIEJsb2NrVmlldyB7XG4gIHByaXZhdGUgY2lyVHJlZU9mZnNldDogbnVtYmVyXG5cbiAgcHJpdmF0ZSBjaXJUcmVlTGVuZ3RoOiBudW1iZXJcblxuICBwcml2YXRlIGJiaTogYW55XG5cbiAgcHJpdmF0ZSBpc0NvbXByZXNzZWQ6IGJvb2xlYW5cblxuICBwcml2YXRlIGlzQmlnRW5kaWFuOiBib29sZWFuXG5cbiAgcHJpdmF0ZSByZWZzQnlOYW1lOiBhbnlcblxuICBwcml2YXRlIGJsb2NrVHlwZTogc3RyaW5nXG5cbiAgcHJpdmF0ZSBjaXJUcmVlQnVmZmVyOiBCdWZmZXJcblxuICBwcml2YXRlIGNpclRyZWVQcm9taXNlPzogUHJvbWlzZTx2b2lkPlxuXG4gIHByaXZhdGUgZmVhdHVyZUNhY2hlOiBhbnlcblxuICBwcml2YXRlIGxlYWZQYXJzZXI6IGFueVxuXG4gIHByaXZhdGUgYmlnV2lnUGFyc2VyOiBhbnlcblxuICBwcml2YXRlIGJpZ0JlZFBhcnNlcjogYW55XG5cbiAgcHJpdmF0ZSBzdW1tYXJ5UGFyc2VyOiBhbnlcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgYmJpOiBhbnksXG4gICAgcmVmc0J5TmFtZTogYW55LFxuICAgIGNpclRyZWVPZmZzZXQ6IG51bWJlcixcbiAgICBjaXJUcmVlTGVuZ3RoOiBudW1iZXIsXG4gICAgaXNCaWdFbmRpYW46IGJvb2xlYW4sXG4gICAgaXNDb21wcmVzc2VkOiBib29sZWFuLFxuICAgIGJsb2NrVHlwZTogc3RyaW5nLFxuICApIHtcbiAgICBpZiAoIShjaXJUcmVlT2Zmc2V0ID49IDApKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2lyVHJlZU9mZnNldCEnKVxuICAgIGlmICghKGNpclRyZWVMZW5ndGggPiAwKSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNpclRyZWVMZW5ndGghJylcblxuICAgIHRoaXMuY2lyVHJlZU9mZnNldCA9IGNpclRyZWVPZmZzZXRcbiAgICB0aGlzLmNpclRyZWVMZW5ndGggPSBjaXJUcmVlTGVuZ3RoXG4gICAgdGhpcy5pc0NvbXByZXNzZWQgPSBpc0NvbXByZXNzZWRcbiAgICB0aGlzLnJlZnNCeU5hbWUgPSByZWZzQnlOYW1lXG4gICAgdGhpcy5pc0JpZ0VuZGlhbiA9IGlzQmlnRW5kaWFuXG4gICAgdGhpcy5iYmkgPSBiYmlcbiAgICB0aGlzLmJsb2NrVHlwZSA9IGJsb2NrVHlwZVxuICAgIHRoaXMuY2lyVHJlZUJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyg0OClcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGdldFBhcnNlcnMoaXNCaWdFbmRpYW4pKVxuXG4gICAgdGhpcy5mZWF0dXJlQ2FjaGUgPSBuZXcgQWJvcnRhYmxlUHJvbWlzZUNhY2hlKHtcbiAgICAgIGNhY2hlOiBuZXcgUXVpY2tMUlUoeyBtYXhTaXplOiAxMDAwIH0pLFxuXG4gICAgICBhc3luYyBmaWxsKHJlcXVlc3REYXRhOiBSZWFkRGF0YSwgc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgICAgICBjb25zdCB7IGxlbmd0aCwgb2Zmc2V0IH0gPSByZXF1ZXN0RGF0YVxuICAgICAgICBjb25zdCByZXN1bHRCdWZmZXIgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKVxuICAgICAgICBhd2FpdCBiYmkucmVhZChyZXN1bHRCdWZmZXIsIDAsIGxlbmd0aCwgb2Zmc2V0LCB7IHNpZ25hbCB9KVxuICAgICAgICByZXR1cm4gcmVzdWx0QnVmZmVyXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZFdpZ0RhdGEoXG4gICAgY2hyTmFtZTogc3RyaW5nLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXIsXG4gICAgb2JzZXJ2ZXI6IE9ic2VydmVyPEZlYXR1cmVbXT4sXG4gICAgb3B0czogT3B0aW9ucyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyByZWZzQnlOYW1lLCBiYmksIGNpclRyZWVPZmZzZXQsIGlzQmlnRW5kaWFuIH0gPSB0aGlzXG4gICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdHNcbiAgICBjb25zdCBjaHJJZCA9IHJlZnNCeU5hbWVbY2hyTmFtZV1cbiAgICBpZiAoY2hySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKVxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0geyBjaHJJZCwgc3RhcnQsIGVuZCB9XG4gICAgaWYgKHRoaXMuY2lyVHJlZVByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2lyVHJlZVByb21pc2VcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaXJUcmVlUHJvbWlzZSA9IGF3YWl0IGJiaS5yZWFkKHRoaXMuY2lyVHJlZUJ1ZmZlciwgMCwgNDgsIGNpclRyZWVPZmZzZXQsIHsgc2lnbmFsIH0pXG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY2lyVHJlZUJ1ZmZlclxuICAgIGNvbnN0IGNpckJsb2NrU2l6ZSA9IGlzQmlnRW5kaWFuID8gYnVmZmVyLnJlYWRVSW50MzJCRSg0KSA6IGJ1ZmZlci5yZWFkVUludDMyTEUoNClcbiAgICBsZXQgYmxvY2tzVG9GZXRjaDogYW55W10gPSBbXVxuICAgIGxldCBvdXRzdGFuZGluZyA9IDBcblxuICAgIGxldCBjaXJGb2JSZWN1cjI6IEZ1bmN0aW9uXG5cbiAgICBjb25zdCBmaWx0ZXJGZWF0cyA9IChiOiBEYXRhQmxvY2spOiBib29sZWFuID0+XG4gICAgICAoYi5zdGFydENocm9tIDwgY2hySWQgfHwgKGIuc3RhcnRDaHJvbSA9PT0gY2hySWQgJiYgYi5zdGFydEJhc2UgPD0gZW5kKSkgJiZcbiAgICAgIChiLmVuZENocm9tID4gY2hySWQgfHwgKGIuZW5kQ2hyb20gPT09IGNocklkICYmIGIuZW5kQmFzZSA+PSBzdGFydCkpXG5cbiAgICBjb25zdCBjaXJGb2JTdGFydEZldGNoID0gYXN5bmMgKG9mZjogYW55LCBmcjogYW55LCBsZXZlbDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBsZW5ndGggPSBmci5tYXgoKSAtIGZyLm1pbigpXG4gICAgICBjb25zdCBvZmZzZXQgPSBmci5taW4oKVxuICAgICAgY29uc3QgcmVzdWx0QnVmZmVyID0gYXdhaXQgdGhpcy5mZWF0dXJlQ2FjaGUuZ2V0KGAke2xlbmd0aH1fJHtvZmZzZXR9YCwgeyBsZW5ndGgsIG9mZnNldCB9LCBzaWduYWwpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZi5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoZnIuY29udGFpbnMob2ZmW2ldKSkge1xuICAgICAgICAgIGNpckZvYlJlY3VyMihyZXN1bHRCdWZmZXIsIG9mZltpXSAtIG9mZnNldCwgbGV2ZWwsIG9ic2VydmVyLCBvcHRzKVxuICAgICAgICAgIG91dHN0YW5kaW5nIC09IDFcbiAgICAgICAgICBpZiAob3V0c3RhbmRpbmcgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVhZEZlYXR1cmVzKG9ic2VydmVyLCBibG9ja3NUb0ZldGNoLCB7IC4uLm9wdHMsIHJlcXVlc3QgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvdXRzdGFuZGluZyAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpZCBub3QgY29tcGxldGUnKVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjaXJGb2JSZWN1ciA9IChvZmZzZXQ6IGFueSwgbGV2ZWw6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgb3V0c3RhbmRpbmcgKz0gb2Zmc2V0Lmxlbmd0aFxuXG4gICAgICBjb25zdCBtYXhDaXJCbG9ja1NwYW4gPSA0ICsgY2lyQmxvY2tTaXplICogMzIgLy8gVXBwZXIgYm91bmQgb24gc2l6ZSwgYmFzZWQgb24gYSBjb21wbGV0ZWx5IGZ1bGwgbGVhZiBub2RlLlxuICAgICAgbGV0IHNwYW5zID0gbmV3IFJhbmdlKG9mZnNldFswXSwgb2Zmc2V0WzBdICsgbWF4Q2lyQmxvY2tTcGFuKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvZmZzZXQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgYmxvY2tTcGFuID0gbmV3IFJhbmdlKG9mZnNldFtpXSwgb2Zmc2V0W2ldICsgbWF4Q2lyQmxvY2tTcGFuKVxuICAgICAgICBzcGFucyA9IHNwYW5zLnVuaW9uKGJsb2NrU3BhbilcbiAgICAgIH1cbiAgICAgIHNwYW5zLmdldFJhbmdlcygpLm1hcCgoZnI6IFJhbmdlKSA9PiBjaXJGb2JTdGFydEZldGNoKG9mZnNldCwgZnIsIGxldmVsKSlcbiAgICB9XG5cbiAgICBjaXJGb2JSZWN1cjIgPSAoY2lyQmxvY2tEYXRhOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBsZXZlbDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gY2lyQmxvY2tEYXRhLnNsaWNlKG9mZnNldClcblxuICAgICAgY29uc3QgcCA9IHRoaXMubGVhZlBhcnNlci5wYXJzZShkYXRhKS5yZXN1bHRcbiAgICAgIGlmIChwLmJsb2Nrc1RvRmV0Y2gpIHtcbiAgICAgICAgYmxvY2tzVG9GZXRjaCA9IGJsb2Nrc1RvRmV0Y2guY29uY2F0KFxuICAgICAgICAgIHAuYmxvY2tzVG9GZXRjaC5maWx0ZXIoZmlsdGVyRmVhdHMpLm1hcCgobDogYW55KTogYW55ID0+ICh7IG9mZnNldDogbC5ibG9ja09mZnNldCwgbGVuZ3RoOiBsLmJsb2NrU2l6ZSB9KSksXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChwLnJlY3VyT2Zmc2V0cykge1xuICAgICAgICBjb25zdCByZWN1ck9mZnNldHMgPSBwLnJlY3VyT2Zmc2V0cy5maWx0ZXIoZmlsdGVyRmVhdHMpLm1hcCgobDogYW55KTogYW55ID0+IGwuYmxvY2tPZmZzZXQpXG4gICAgICAgIGlmIChyZWN1ck9mZnNldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNpckZvYlJlY3VyKHJlY3VyT2Zmc2V0cywgbGV2ZWwgKyAxKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2lyRm9iUmVjdXIoW2NpclRyZWVPZmZzZXQgKyA0OF0sIDEpXG4gIH1cblxuICBwcml2YXRlIHBhcnNlU3VtbWFyeUJsb2NrKGRhdGE6IEJ1ZmZlciwgc3RhcnRPZmZzZXQ6IG51bWJlciwgcmVxdWVzdD86IENvb3JkUmVxdWVzdCk6IEZlYXR1cmVbXSB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSBbXVxuICAgIGxldCBjdXJyT2Zmc2V0ID0gc3RhcnRPZmZzZXRcbiAgICB3aGlsZSAoY3Vyck9mZnNldCA8IGRhdGEuYnl0ZUxlbmd0aCkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5zdW1tYXJ5UGFyc2VyLnBhcnNlKGRhdGEuc2xpY2UoY3Vyck9mZnNldCkpXG4gICAgICBmZWF0dXJlcy5wdXNoKHJlcy5yZXN1bHQpXG4gICAgICBjdXJyT2Zmc2V0ICs9IHJlcy5vZmZzZXRcbiAgICB9XG4gICAgbGV0IGl0ZW1zID0gZmVhdHVyZXNcbiAgICBpZiAocmVxdWVzdCkgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGVsdDogU3VtbWFyeUJsb2NrKTogYm9vbGVhbiA9PiBlbHQuY2hyb21JZCA9PT0gcmVxdWVzdC5jaHJJZClcbiAgICBpdGVtcyA9IGl0ZW1zLm1hcChcbiAgICAgIChlbHQ6IFN1bW1hcnlCbG9jayk6IEZlYXR1cmUgPT4gKHtcbiAgICAgICAgc3RhcnQ6IGVsdC5zdGFydCxcbiAgICAgICAgZW5kOiBlbHQuZW5kLFxuICAgICAgICBtYXhTY29yZTogZWx0Lm1heFNjb3JlLFxuICAgICAgICBtaW5TY29yZTogZWx0Lm1pblNjb3JlLFxuICAgICAgICBzY29yZTogZWx0LnN1bURhdGEgLyAoZWx0LnZhbGlkQ250IHx8IDEpLFxuICAgICAgICBzdW1tYXJ5OiB0cnVlLFxuICAgICAgfSksXG4gICAgKVxuICAgIHJldHVybiByZXF1ZXN0ID8gaXRlbXMuZmlsdGVyKGYgPT4gQmxvY2tWaWV3LmNvb3JkRmlsdGVyKGYsIHJlcXVlc3QpKSA6IGl0ZW1zXG4gIH1cblxuICBwcml2YXRlIHBhcnNlQmlnQmVkQmxvY2soZGF0YTogQnVmZmVyLCBzdGFydE9mZnNldDogbnVtYmVyLCByZXF1ZXN0PzogQ29vcmRSZXF1ZXN0KTogRmVhdHVyZVtdIHtcbiAgICBjb25zdCBpdGVtcyA9IFtdXG4gICAgbGV0IGN1cnJPZmZzZXQgPSBzdGFydE9mZnNldFxuICAgIHdoaWxlIChjdXJyT2Zmc2V0IDwgZGF0YS5ieXRlTGVuZ3RoKSB7XG4gICAgICBjb25zdCByZXMgPSB0aGlzLmJpZ0JlZFBhcnNlci5wYXJzZShkYXRhLnNsaWNlKGN1cnJPZmZzZXQpKVxuICAgICAgcmVzLnJlc3VsdC51bmlxdWVJZCA9IGBiYi0ke3N0YXJ0T2Zmc2V0ICsgY3Vyck9mZnNldH1gXG4gICAgICBpdGVtcy5wdXNoKHJlcy5yZXN1bHQpXG4gICAgICBjdXJyT2Zmc2V0ICs9IHJlcy5vZmZzZXRcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdCA/IGl0ZW1zLmZpbHRlcigoZjogYW55KSA9PiBCbG9ja1ZpZXcuY29vcmRGaWx0ZXIoZiwgcmVxdWVzdCkpIDogaXRlbXNcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VCaWdXaWdCbG9jayhieXRlczogQnVmZmVyLCBzdGFydE9mZnNldDogbnVtYmVyLCByZXF1ZXN0PzogQ29vcmRSZXF1ZXN0KTogRmVhdHVyZVtdIHtcbiAgICBjb25zdCBkYXRhID0gYnl0ZXMuc2xpY2Uoc3RhcnRPZmZzZXQpXG4gICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuYmlnV2lnUGFyc2VyLnBhcnNlKGRhdGEpLnJlc3VsdFxuICAgIGxldCB7IGl0ZW1zIH0gPSByZXN1bHRzXG4gICAgaWYgKHJlc3VsdHMuYmxvY2tUeXBlID09PSBCSUdfV0lHX1RZUEVfRlNURVApIHtcbiAgICAgIGNvbnN0IHsgaXRlbVN0ZXA6IHN0ZXAsIGl0ZW1TcGFuOiBzcGFuIH0gPSByZXN1bHRzXG4gICAgICBpdGVtcyA9IGl0ZW1zLm1hcCgoZmVhdHVyZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBzdGFydDogaW5kZXggKiBzdGVwLFxuICAgICAgICBlbmQ6IGluZGV4ICogc3RlcCArIHNwYW4sXG4gICAgICB9KSlcbiAgICB9IGVsc2UgaWYgKHJlc3VsdHMuYmxvY2tUeXBlID09PSBCSUdfV0lHX1RZUEVfVlNURVApIHtcbiAgICAgIGNvbnN0IHsgaXRlbVNwYW46IHNwYW4gfSA9IHJlc3VsdHNcbiAgICAgIGl0ZW1zID0gaXRlbXMubWFwKChmZWF0dXJlOiBhbnkpID0+ICh7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIGVuZDogZmVhdHVyZS5zdGFydCArIHNwYW4sXG4gICAgICB9KSlcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3QgPyBpdGVtcy5maWx0ZXIoKGY6IGFueSkgPT4gQmxvY2tWaWV3LmNvb3JkRmlsdGVyKGYsIHJlcXVlc3QpKSA6IGl0ZW1zXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb29yZEZpbHRlcihmOiBGZWF0dXJlLCByYW5nZTogQ29vcmRSZXF1ZXN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGYuc3RhcnQgPCByYW5nZS5lbmQgJiYgZi5lbmQgPj0gcmFuZ2Uuc3RhcnRcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkRmVhdHVyZXMob2JzZXJ2ZXI6IE9ic2VydmVyPEZlYXR1cmVbXT4sIGJsb2NrczogYW55LCBvcHRzOiBPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJsb2NrVHlwZSwgaXNDb21wcmVzc2VkIH0gPSB0aGlzXG4gICAgY29uc3QgeyBzaWduYWwsIHJlcXVlc3QgfSA9IG9wdHNcbiAgICBjb25zdCBibG9ja0dyb3Vwc1RvRmV0Y2ggPSBncm91cEJsb2NrcyhibG9ja3MpXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBibG9ja0dyb3Vwc1RvRmV0Y2gubWFwKGFzeW5jIChibG9ja0dyb3VwOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgeyBsZW5ndGgsIG9mZnNldCB9ID0gYmxvY2tHcm91cFxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZWF0dXJlQ2FjaGUuZ2V0KGAke2xlbmd0aH1fJHtvZmZzZXR9YCwgYmxvY2tHcm91cCwgc2lnbmFsKVxuICAgICAgICBibG9ja0dyb3VwLmJsb2Nrcy5mb3JFYWNoKChibG9jazogYW55KSA9PiB7XG4gICAgICAgICAgbGV0IGJsb2NrT2Zmc2V0ID0gYmxvY2sub2Zmc2V0IC0gYmxvY2tHcm91cC5vZmZzZXRcbiAgICAgICAgICBjb25zdCByZXN1bHREYXRhID0gaXNDb21wcmVzc2VkID8gemxpYi5pbmZsYXRlU3luYyhkYXRhLnNsaWNlKGJsb2NrT2Zmc2V0KSkgOiBkYXRhXG4gICAgICAgICAgYmxvY2tPZmZzZXQgPSBpc0NvbXByZXNzZWQgPyAwIDogb2Zmc2V0XG5cbiAgICAgICAgICBzd2l0Y2ggKGJsb2NrVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5wYXJzZVN1bW1hcnlCbG9jayhyZXN1bHREYXRhLCBibG9ja09mZnNldCwgcmVxdWVzdCkpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBjYXNlICdiaWd3aWcnOlxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMucGFyc2VCaWdXaWdCbG9jayhyZXN1bHREYXRhLCBibG9ja09mZnNldCwgcmVxdWVzdCkpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBjYXNlICdiaWdiZWQnOlxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMucGFyc2VCaWdCZWRCbG9jayhyZXN1bHREYXRhLCBibG9ja09mZnNldCwgcmVxdWVzdCkpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoICR7YmxvY2tUeXBlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgKVxuICAgIG9ic2VydmVyLmNvbXBsZXRlKClcbiAgfVxufVxuIl19 |
@@ -1,3 +0,3 @@ | ||
import BigWig from './bigwig'; | ||
import BigBed from './bigbed'; | ||
export { BigWig, BigBed }; | ||
export { BigWig } from './bigwig'; | ||
export { BigBed } from './bigbed'; | ||
export { Feature, Header } from './bbi'; |
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
@@ -11,3 +9,3 @@ value: true | ||
get: function get() { | ||
return _bigwig.default; | ||
return _bigwig.BigWig; | ||
} | ||
@@ -18,9 +16,23 @@ }); | ||
get: function get() { | ||
return _bigbed.default; | ||
return _bigbed.BigBed; | ||
} | ||
}); | ||
Object.defineProperty(exports, "Feature", { | ||
enumerable: true, | ||
get: function get() { | ||
return _bbi.Feature; | ||
} | ||
}); | ||
Object.defineProperty(exports, "Header", { | ||
enumerable: true, | ||
get: function get() { | ||
return _bbi.Header; | ||
} | ||
}); | ||
var _bigwig = _interopRequireDefault(require("./bigwig")); | ||
var _bigwig = require("./bigwig"); | ||
var _bigbed = _interopRequireDefault(require("./bigbed")); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ1dpZyBmcm9tICcuL2JpZ3dpZydcbmltcG9ydCBCaWdCZWQgZnJvbSAnLi9iaWdiZWQnXG5cbmV4cG9ydCB7IEJpZ1dpZywgQmlnQmVkIH1cbiJdfQ== | ||
var _bigbed = require("./bigbed"); | ||
var _bbi = require("./bbi"); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEJpZ1dpZyB9IGZyb20gJy4vYmlnd2lnJ1xuZXhwb3J0IHsgQmlnQmVkIH0gZnJvbSAnLi9iaWdiZWQnXG5leHBvcnQgeyBGZWF0dXJlLCBIZWFkZXIgfSBmcm9tICcuL2JiaSdcbiJdfQ== |
@@ -190,2 +190,2 @@ "use strict"; | ||
exports.default = Range; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yYW5nZS50cyJdLCJuYW1lcyI6WyJSYW5nZSIsImFyZzEiLCJhcmcyIiwicmFuZ2VzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwibWluIiwibWF4IiwiT2JqZWN0IiwiYXNzaWduIiwicG9zIiwicyIsInIiLCJtYXAiLCJqb2luIiwiczEiLCJzMCIsImdldFJhbmdlcyIsImNvbmNhdCIsInNvcnQiLCJyYW5nZU9yZGVyIiwib3JhbmdlcyIsImN1cnJlbnQiLCJpIiwibnh0IiwicHVzaCIsImFyZyIsInIwIiwicjEiLCJsMCIsImwxIiwiaTAiLCJpMSIsIm9yIiwibGFwTWluIiwiTWF0aCIsImxhcE1heCIsIkVycm9yIiwidG90IiwicmwiLCJyaSIsInRtcGEiLCJ0bXBiIiwiYSIsImIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBOzs7O0lBSXFCQSxLOzs7QUFFbkIsaUJBQW1CQyxJQUFuQixFQUE4QkMsSUFBOUIsRUFBMEM7QUFBQTtBQUFBO0FBQ3hDLFNBQUtDLE1BQUwsR0FBY0MsU0FBUyxDQUFDQyxNQUFWLEtBQXFCLENBQXJCLEdBQXlCLENBQUM7QUFBRUMsTUFBQUEsR0FBRyxFQUFFTCxJQUFQO0FBQWFNLE1BQUFBLEdBQUcsRUFBRUw7QUFBbEIsS0FBRCxDQUF6QixHQUFzRCxLQUFLRCxJQUFMLEdBQVlPLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JSLElBQWxCLENBQVosR0FBc0MsQ0FBQ0EsSUFBRCxDQUExRztBQUNEOzs7OzBCQUVvQjtBQUNuQixhQUFPLEtBQUtFLE1BQUwsQ0FBWSxDQUFaLEVBQWVHLEdBQXRCO0FBQ0Q7OzswQkFFb0I7QUFDbkIsYUFBTyxLQUFLSCxNQUFMLENBQVksS0FBS0EsTUFBTCxDQUFZRSxNQUFaLEdBQXFCLENBQWpDLEVBQW9DRSxHQUEzQztBQUNEOzs7NkJBRWVHLEcsRUFBc0I7QUFDcEMsV0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFH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R0FBRyxDQUFkLEVBQWlCQSxFQUFFLEdBQUdELEVBQUUsQ0FBQ2xDLE1BQXpCLEVBQWlDbUMsRUFBRSxJQUFJLENBQXZDLEVBQTBDO0FBQ3hDLFlBQU01QixDQUFDLEdBQUcyQixFQUFFLENBQUNDLEVBQUQsQ0FBWjtBQUNBRixRQUFBQSxHQUFHLElBQUkxQixDQUFDLENBQUNMLEdBQUYsS0FBVUssQ0FBQyxDQUFDTixHQUFGLEVBQVYsR0FBb0IsQ0FBM0I7QUFDRDs7QUFDRCxhQUFPZ0MsR0FBUDtBQUNEOzs7K0JBRWlCRyxJLEVBQWFDLEksRUFBcUI7QUFDbEQsVUFBSUMsQ0FBQyxHQUFHRixJQUFSO0FBQ0EsVUFBSUcsQ0FBQyxHQUFHRixJQUFSOztBQUNBLFVBQUl0QyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEJ1QyxRQUFBQSxDQUFDLEdBQUdELENBQUo7QUFDQUEsUUFBQUEsQ0FBQyxHQUFHLElBQUo7QUFDRDs7QUFFRCxVQUFJQSxDQUFDLENBQUNyQyxHQUFGLEtBQVVzQyxDQUFDLENBQUN0QyxHQUFGLEVBQWQsRUFBdUI7QUFDckIsZUFBTyxDQUFDLENBQVI7QUFDRDs7QUFDRCxVQUFJcUMsQ0FBQyxDQUFDckMsR0FBRixLQUFVc0MsQ0FBQyxDQUFDdEMsR0FBRixFQUFkLEVBQXVCO0FBQ3JCLGVBQU8sQ0FBUDtBQUNEOztBQUNELFVBQUlxQyxDQUFDLENBQUNwQyxHQUFGLEtBQVVxQyxDQUFDLENBQUNyQyxHQUFGLEVBQWQsRUFBdUI7QUFDckIsZUFBTyxDQUFDLENBQVI7QUFDRDs7QUFDRCxVQUFJcUMsQ0FBQyxDQUFDckMsR0FBRixLQUFVb0MsQ0FBQyxDQUFDcEMsR0FBRixFQUFkLEVBQXVCO0FBQ3JCLGVBQU8sQ0FBUDtBQUNEOztBQUNELGFBQU8sQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IHByZWZlci1yZXN0LXBhcmFtczowLCBuby1uZXN0ZWQtdGVybmFyeTowICovXG5cbi8qKlxuICogQWRhcHRlZCBmcm9tIGEgY29tYmluYXRpb24gb2YgUmFuZ2UgYW5kIF9Db21wb3VuZCBpbiB0aGVcbiAqIERhbGxpYW5jZSBHZW5vbWUgRXhwbG9yZXIsIChjKSBUaG9tYXMgRG93biAyMDA2LTIwMTAuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhbmdlIHtcbiAgcHVibGljIHJhbmdlczogYW55XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihhcmcxOiBhbnksIGFyZzI/OiBhbnkpIHtcbiAgICB0aGlzLnJhbmdlcyA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyBbeyBtaW46IGFyZzEsIG1heDogYXJnMiB9XSA6IDAgaW4gYXJnMSA/IE9iamVjdC5hc3NpZ24oe30sIGFyZzEpIDogW2FyZzFdXG4gIH1cblxuICBwdWJsaWMgbWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VzWzBdLm1pblxuICB9XG5cbiAgcHVibGljIG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJhbmdlc1t0aGlzLnJhbmdlcy5sZW5ndGggLSAxXS5tYXhcbiAgfVxuXG4gIHB1YmxpYyBjb250YWlucyhwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBzICs9IDEpIHtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLnJhbmdlc1tzXVxuICAgICAgaWYgKHIubWluIDw9IHBvcyAmJiByLm1heCA+PSBwb3MpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgaXNDb250aWd1b3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJhbmdlcy5sZW5ndGggPiAxXG4gIH1cblxuICBwdWJsaWMgZ2V0UmFuZ2VzKCk6IFJhbmdlW10ge1xuICAgIHJldHVybiB0aGlzLnJhbmdlcy5tYXAoKHI6IFJhbmdlKSA9PiBuZXcgUmFuZ2Uoci5taW4sIHIubWF4KSlcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJhbmdlcy5tYXAoKHI6IFJhbmdlKSA9PiBgWyR7ci5taW59LSR7ci5tYXh9XWApLmpvaW4oJywnKVxuICB9XG5cbiAgcHVibGljIHVuaW9uKHMxOiBSYW5nZSk6IFJhbmdlIHtcbiAgICBjb25zdCBzMCA9IHRoaXNcbiAgICBjb25zdCByYW5nZXMgPSBzMFxuICAgICAgLmdldFJhbmdlcygpXG4gICAgICAuY29uY2F0KHMxLmdldFJhbmdlcygpKVxuICAgICAgLnNvcnQodGhpcy5yYW5nZU9yZGVyKVxuICAgIGNvbnN0IG9yYW5nZXMgPSBbXVxuICAgIGxldCBjdXJyZW50ID0gcmFuZ2VzWzBdXG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3Qgbnh0ID0gcmFuZ2VzW2ldXG4gICAgICBpZiAobnh0Lm1pbigpID4gY3VycmVudC5tYXgoKSArIDEpIHtcbiAgICAgICAgb3Jhbmdlcy5wdXNoKGN1cnJlbnQpXG4gICAgICAgIGN1cnJlbnQgPSBueHRcbiAgICAgIH0gZWxzZSBpZiAobnh0Lm1heCgpID4gY3VycmVudC5tYXgoKSkge1xuICAgICAgICBjdXJyZW50ID0gbmV3IFJhbmdlKGN1cnJlbnQubWluKCksIG54dC5tYXgoKSlcbiAgICAgIH1cbiAgICB9XG4gICAgb3Jhbmdlcy5wdXNoKGN1cnJlbnQpXG5cbiAgICBpZiAob3Jhbmdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBvcmFuZ2VzWzBdXG4gICAgfVxuICAgIHJldHVybiBuZXcgUmFuZ2Uob3JhbmdlcylcbiAgfVxuXG4gIHB1YmxpYyBpbnRlcnNlY3Rpb24oYXJnOiBSYW5nZSk6IFJhbmdlIHtcbiAgICBsZXQgczAgPSB0aGlzXG4gICAgbGV0IHMxID0gYXJnXG4gICAgY29uc3QgcjAgPSBzMC5yYW5nZXMoKVxuICAgIGNvbnN0IHIxID0gczEucmFuZ2VzKClcbiAgICBjb25zdCBsMCA9IHIwLmxlbmd0aFxuXG4gICAgY29uc3QgbDEgPSByMS5sZW5ndGhcbiAgICBsZXQgaTAgPSAwXG5cbiAgICBsZXQgaTEgPSAwXG4gICAgY29uc3Qgb3IgPSBbXVxuXG4gICAgd2hpbGUgKGkwIDwgbDAgJiYgaTEgPCBsMSkge1xuICAgICAgczAgPSByMFtpMF1cbiAgICAgIHMxID0gcjFbaTFdXG4gICAgICBjb25zdCBsYXBNaW4gPSBNYXRoLm1heChzMC5taW4oKSwgczEubWluKCkpXG4gICAgICBjb25zdCBsYXBNYXggPSBNYXRoLm1pbihzMC5tYXgoKSwgczEubWF4KCkpXG4gICAgICBpZiAobGFwTWF4ID49IGxhcE1pbikge1xuICAgICAgICBvci5wdXNoKG5ldyBSYW5nZShsYXBNaW4sIGxhcE1heCkpXG4gICAgICB9XG4gICAgICBpZiAoczAubWF4KCkgPiBzMS5tYXgoKSkge1xuICAgICAgICBpMSArPSAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpMCArPSAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9yLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb3VuZCByYW5nZSBvZiBsZW5ndGggMCcpXG4gICAgfVxuICAgIGlmIChvci5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBvclswXVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFJhbmdlKG9yKVxuICB9XG5cbiAgcHVibGljIGNvdmVyYWdlKCk6IG51bWJlciB7XG4gICAgbGV0IHRvdCA9IDBcbiAgICBjb25zdCBybCA9IHRoaXMucmFuZ2VzKClcbiAgICBmb3IgKGxldCByaSA9IDA7IHJpIDwgcmwubGVuZ3RoOyByaSArPSAxKSB7XG4gICAgICBjb25zdCByID0gcmxbcmldXG4gICAgICB0b3QgKz0gci5tYXgoKSAtIHIubWluKCkgKyAxXG4gICAgfVxuICAgIHJldHVybiB0b3RcbiAgfVxuXG4gIHB1YmxpYyByYW5nZU9yZGVyKHRtcGE6IFJhbmdlLCB0bXBiOiBSYW5nZSk6IG51bWJlciB7XG4gICAgbGV0IGEgPSB0bXBhXG4gICAgbGV0IGIgPSB0bXBiXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICBiID0gYVxuICAgICAgYSA9IHRoaXNcbiAgICB9XG5cbiAgICBpZiAoYS5taW4oKSA8IGIubWluKCkpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICBpZiAoYS5taW4oKSA+IGIubWluKCkpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICAgIGlmIChhLm1heCgpIDwgYi5tYXgoKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGlmIChiLm1heCgpID4gYS5tYXgoKSkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yYW5nZS50cyJdLCJuYW1lcyI6WyJSYW5nZSIsImFyZzEiLCJhcmcyIiwicmFuZ2VzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwibWluIiwibWF4IiwiT2JqZWN0IiwiYXNzaWduIiwicG9zIiwicyIsInIiLCJtYXAiLCJqb2luIiwiczEiLCJzMCIsImdldFJhbmdlcyIsImNvbmNhdCIsInNvcnQiLCJyYW5nZU9yZGVyIiwib3JhbmdlcyIsImN1cnJlbnQiLCJpIiwibnh0IiwicHVzaCIsImFyZyIsInIwIiwicjEiLCJsMCIsImwxIiwiaTAiLCJpMSIsIm9yIiwibGFwTWluIiwiTWF0aCIsImxhcE1heCIsIkVycm9yIiwidG90IiwicmwiLCJyaSIsInRtcGEiLCJ0bXBiIiwiYSIsImIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBOzs7O0lBSXFCQSxLOzs7QUFHbkIsaUJBQW1CQyxJQUFuQixFQUE4QkMsSUFBOUIsRUFBMEM7QUFBQTtBQUFBO0FBQ3hDLFNBQUtDLE1BQUwsR0FBY0MsU0FBUyxDQUFDQyxNQUFWLEtBQXFCLENBQXJCLEdBQXlCLENBQUM7QUFBRUMsTUFBQUEsR0FBRyxFQUFFTCxJQUFQO0FBQWFNLE1BQUFBLEdBQUcsRUFBRUw7QUFBbEIsS0FBRCxDQUF6QixHQUFzRCxLQUFLRCxJQUFMLEdBQVlPLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JSLElBQWxCLENBQVosR0FBc0MsQ0FBQ0EsSUFBRCxDQUExRztBQUNEOzs7OzBCQUVvQjtBQUNuQixhQUFPLEtBQUtFLE1BQUwsQ0FBWSxDQUFaLEVBQWVHLEdBQXRCO0FBQ0Q7OzswQkFFb0I7QUFDbkIsYUFBTyxLQUFLSCxNQUFMLENBQVksS0FBS0EsTUFBTCxDQUFZRSxNQUFaLEdBQXFCLENBQWpDLEVBQW9DRSxHQUEzQztBQUNEOzs7NkJBRWVHLEcsRUFBc0I7QUFDcEMsV0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFH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R0FBRyxDQUFkLEVBQWlCQSxFQUFFLEdBQUdELEVBQUUsQ0FBQ2xDLE1BQXpCLEVBQWlDbUMsRUFBRSxJQUFJLENBQXZDLEVBQTBDO0FBQ3hDLFlBQU01QixDQUFDLEdBQUcyQixFQUFFLENBQUNDLEVBQUQsQ0FBWjtBQUNBRixRQUFBQSxHQUFHLElBQUkxQixDQUFDLENBQUNMLEdBQUYsS0FBVUssQ0FBQyxDQUFDTixHQUFGLEVBQVYsR0FBb0IsQ0FBM0I7QUFDRDs7QUFDRCxhQUFPZ0MsR0FBUDtBQUNEOzs7K0JBRWlCRyxJLEVBQWFDLEksRUFBcUI7QUFDbEQsVUFBSUMsQ0FBQyxHQUFHRixJQUFSO0FBQ0EsVUFBSUcsQ0FBQyxHQUFHRixJQUFSOztBQUNBLFVBQUl0QyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEJ1QyxRQUFBQSxDQUFDLEdBQUdELENBQUo7QUFDQUEsUUFBQUEsQ0FBQyxHQUFHLElBQUo7QUFDRDs7QUFFRCxVQUFJQSxDQUFDLENBQUNyQyxHQUFGLEtBQVVzQyxDQUFDLENBQUN0QyxHQUFGLEVBQWQsRUFBdUI7QUFDckIsZUFBTyxDQUFDLENBQVI7QUFDRDs7QUFDRCxVQUFJcUMsQ0FBQyxDQUFDckMsR0FBRixLQUFVc0MsQ0FBQyxDQUFDdEMsR0FBRixFQUFkLEVBQXVCO0FBQ3JCLGVBQU8sQ0FBUDtBQUNEOztBQUNELFVBQUlxQyxDQUFDLENBQUNwQyxHQUFGLEtBQVVxQyxDQUFDLENBQUNyQyxHQUFGLEVBQWQsRUFBdUI7QUFDckIsZUFBTyxDQUFDLENBQVI7QUFDRDs7QUFDRCxVQUFJcUMsQ0FBQyxDQUFDckMsR0FBRixLQUFVb0MsQ0FBQyxDQUFDcEMsR0FBRixFQUFkLEVBQXVCO0FBQ3JCLGVBQU8sQ0FBUDtBQUNEOztBQUNELGFBQU8sQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IHByZWZlci1yZXN0LXBhcmFtczowLCBuby1uZXN0ZWQtdGVybmFyeTowICovXG5cbi8qKlxuICogQWRhcHRlZCBmcm9tIGEgY29tYmluYXRpb24gb2YgUmFuZ2UgYW5kIF9Db21wb3VuZCBpbiB0aGVcbiAqIERhbGxpYW5jZSBHZW5vbWUgRXhwbG9yZXIsIChjKSBUaG9tYXMgRG93biAyMDA2LTIwMTAuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhbmdlIHtcbiAgcHVibGljIHJhbmdlczogYW55XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGFyZzE6IGFueSwgYXJnMj86IGFueSkge1xuICAgIHRoaXMucmFuZ2VzID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMiA/IFt7IG1pbjogYXJnMSwgbWF4OiBhcmcyIH1dIDogMCBpbiBhcmcxID8gT2JqZWN0LmFzc2lnbih7fSwgYXJnMSkgOiBbYXJnMV1cbiAgfVxuXG4gIHB1YmxpYyBtaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZXNbMF0ubWluXG4gIH1cblxuICBwdWJsaWMgbWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VzW3RoaXMucmFuZ2VzLmxlbmd0aCAtIDFdLm1heFxuICB9XG5cbiAgcHVibGljIGNvbnRhaW5zKHBvczogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgcyA9IDA7IHMgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IHMgKz0gMSkge1xuICAgICAgY29uc3QgciA9IHRoaXMucmFuZ2VzW3NdXG4gICAgICBpZiAoci5taW4gPD0gcG9zICYmIHIubWF4ID49IHBvcykge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHB1YmxpYyBpc0NvbnRpZ3VvdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aCA+IDFcbiAgfVxuXG4gIHB1YmxpYyBnZXRSYW5nZXMoKTogUmFuZ2VbXSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VzLm1hcCgocjogUmFuZ2UpID0+IG5ldyBSYW5nZShyLm1pbiwgci5tYXgpKVxuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VzLm1hcCgocjogUmFuZ2UpID0+IGBbJHtyLm1pbn0tJHtyLm1heH1dYCkuam9pbignLCcpXG4gIH1cblxuICBwdWJsaWMgdW5pb24oczE6IFJhbmdlKTogUmFuZ2Uge1xuICAgIGNvbnN0IHMwID0gdGhpc1xuICAgIGNvbnN0IHJhbmdlcyA9IHMwXG4gICAgICAuZ2V0UmFuZ2VzKClcbiAgICAgIC5jb25jYXQoczEuZ2V0UmFuZ2VzKCkpXG4gICAgICAuc29ydCh0aGlzLnJhbmdlT3JkZXIpXG4gICAgY29uc3Qgb3JhbmdlcyA9IFtdXG4gICAgbGV0IGN1cnJlbnQgPSByYW5nZXNbMF1cblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBueHQgPSByYW5nZXNbaV1cbiAgICAgIGlmIChueHQubWluKCkgPiBjdXJyZW50Lm1heCgpICsgMSkge1xuICAgICAgICBvcmFuZ2VzLnB1c2goY3VycmVudClcbiAgICAgICAgY3VycmVudCA9IG54dFxuICAgICAgfSBlbHNlIGlmIChueHQubWF4KCkgPiBjdXJyZW50Lm1heCgpKSB7XG4gICAgICAgIGN1cnJlbnQgPSBuZXcgUmFuZ2UoY3VycmVudC5taW4oKSwgbnh0Lm1heCgpKVxuICAgICAgfVxuICAgIH1cbiAgICBvcmFuZ2VzLnB1c2goY3VycmVudClcblxuICAgIGlmIChvcmFuZ2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIG9yYW5nZXNbMF1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSYW5nZShvcmFuZ2VzKVxuICB9XG5cbiAgcHVibGljIGludGVyc2VjdGlvbihhcmc6IFJhbmdlKTogUmFuZ2Uge1xuICAgIGxldCBzMCA9IHRoaXNcbiAgICBsZXQgczEgPSBhcmdcbiAgICBjb25zdCByMCA9IHMwLnJhbmdlcygpXG4gICAgY29uc3QgcjEgPSBzMS5yYW5nZXMoKVxuICAgIGNvbnN0IGwwID0gcjAubGVuZ3RoXG5cbiAgICBjb25zdCBsMSA9IHIxLmxlbmd0aFxuICAgIGxldCBpMCA9IDBcblxuICAgIGxldCBpMSA9IDBcbiAgICBjb25zdCBvciA9IFtdXG5cbiAgICB3aGlsZSAoaTAgPCBsMCAmJiBpMSA8IGwxKSB7XG4gICAgICBzMCA9IHIwW2kwXVxuICAgICAgczEgPSByMVtpMV1cbiAgICAgIGNvbnN0IGxhcE1pbiA9IE1hdGgubWF4KHMwLm1pbigpLCBzMS5taW4oKSlcbiAgICAgIGNvbnN0IGxhcE1heCA9IE1hdGgubWluKHMwLm1heCgpLCBzMS5tYXgoKSlcbiAgICAgIGlmIChsYXBNYXggPj0gbGFwTWluKSB7XG4gICAgICAgIG9yLnB1c2gobmV3IFJhbmdlKGxhcE1pbiwgbGFwTWF4KSlcbiAgICAgIH1cbiAgICAgIGlmIChzMC5tYXgoKSA+IHMxLm1heCgpKSB7XG4gICAgICAgIGkxICs9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkwICs9IDFcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3IubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvdW5kIHJhbmdlIG9mIGxlbmd0aCAwJylcbiAgICB9XG4gICAgaWYgKG9yLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIG9yWzBdXG4gICAgfVxuICAgIHJldHVybiBuZXcgUmFuZ2Uob3IpXG4gIH1cblxuICBwdWJsaWMgY292ZXJhZ2UoKTogbnVtYmVyIHtcbiAgICBsZXQgdG90ID0gMFxuICAgIGNvbnN0IHJsID0gdGhpcy5yYW5nZXMoKVxuICAgIGZvciAobGV0IHJpID0gMDsgcmkgPCBybC5sZW5ndGg7IHJpICs9IDEpIHtcbiAgICAgIGNvbnN0IHIgPSBybFtyaV1cbiAgICAgIHRvdCArPSByLm1heCgpIC0gci5taW4oKSArIDFcbiAgICB9XG4gICAgcmV0dXJuIHRvdFxuICB9XG5cbiAgcHVibGljIHJhbmdlT3JkZXIodG1wYTogUmFuZ2UsIHRtcGI6IFJhbmdlKTogbnVtYmVyIHtcbiAgICBsZXQgYSA9IHRtcGFcbiAgICBsZXQgYiA9IHRtcGJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGIgPSBhXG4gICAgICBhID0gdGhpc1xuICAgIH1cblxuICAgIGlmIChhLm1pbigpIDwgYi5taW4oKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGlmIChhLm1pbigpID4gYi5taW4oKSkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgaWYgKGEubWF4KCkgPCBiLm1heCgpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgaWYgKGIubWF4KCkgPiBhLm1heCgpKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICByZXR1cm4gMFxuICB9XG59XG4iXX0= |
@@ -31,2 +31,3 @@ "use strict"; | ||
/* eslint no-bitwise: ["error", { "allow": ["|"] }] */ | ||
var AbortError = | ||
@@ -97,4 +98,6 @@ /*#__PURE__*/ | ||
// console.log('bam aborted!') | ||
if (typeof DOMException !== 'undefined') // eslint-disable-next-line no-undef | ||
throw new DOMException('aborted', 'AbortError');else { | ||
if (typeof DOMException !== 'undefined') { | ||
// eslint-disable-next-line no-undef | ||
throw new DOMException('aborted', 'AbortError'); | ||
} else { | ||
var e = new AbortError('aborted'); | ||
@@ -141,2 +144,2 @@ e.code = 'ERR_ABORTED'; | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbIkFib3J0RXJyb3IiLCJtZXNzYWdlIiwiY29kZSIsIkVycm9yIiwiZ3JvdXBCbG9ja3MiLCJibG9ja3MiLCJzb3J0IiwiYjAiLCJiMSIsIm9mZnNldCIsImJsb2NrR3JvdXBzIiwibGFzdEJsb2NrIiwibGFzdEJsb2NrRW5kIiwiaSIsImxlbmd0aCIsInB1c2giLCJjaGVja0Fib3J0U2lnbmFsIiwic2lnbmFsIiwiYWJvcnRlZCIsIkRPTUV4Y2VwdGlvbiIsImUiLCJhYm9ydEJyZWFrUG9pbnQiLCJQcm9taXNlIiwicmVzb2x2ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQWFBLFU7Ozs7O0FBRVgsc0JBQW1CQyxPQUFuQixFQUFvQztBQUFBOztBQUFBO0FBQ2xDLGdIQUFNQSxPQUFOO0FBRGtDO0FBRWxDLFVBQUtDLElBQUwsR0FBWSxhQUFaO0FBRmtDO0FBR25DOzs7aUNBTDZCQyxLLElBT2hDO0FBQ0E7Ozs7O0FBQ08sU0FBU0MsV0FBVCxDQUFxQkMsTUFBckIsRUFBMkM7QUFDaERBLEVBQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLFVBQUNDLEVBQUQsRUFBS0MsRUFBTDtBQUFBLFdBQVksQ0FBQ0QsRUFBRSxDQUFDRSxNQUFILEdBQVksQ0FBYixLQUFtQkQsRUFBRSxDQUFDQyxNQUFILEdBQVksQ0FBL0IsQ0FBWjtBQUFBLEdBQVo7QUFFQSxNQUFNQyxXQUFXLEdBQUcsRUFBcEI7QUFDQSxNQUFJQyxTQUFKO0FBQ0EsTUFBSUMsWUFBSjs7QUFDQSxPQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdSLE1BQU0sQ0FBQ1MsTUFBM0IsRUFBbUNELENBQUMsSUFBSSxDQUF4QyxFQUEyQztBQUN6QyxRQUFJRixTQUFTLElBQUlOLE1BQU0sQ0FBQ1EsQ0FBRCxDQUFOLENBQVVKLE1BQVYsR0FBbUJHLFlBQW5CLElBQW1DLElBQXBELEVBQTBEO0FBQ3hERCxNQUFBQSxTQUFTLENBQUNHLE1BQVYsSUFBb0JULE1BQU0sQ0FBQ1EsQ0FBRCxDQUFOLENBQVVDLE1BQVYsR0FBbUJGLFlBQW5CLEdBQWtDUCxNQUFNLENBQUNRLENBQUQsQ0FBTixDQUFVSixNQUFoRTtBQUNBRSxNQUFBQSxTQUFTLENBQUNOLE1BQVYsQ0FBaUJVLElBQWpCLENBQXNCVixNQUFNLENBQUNRLENBQUQsQ0FBNUI7QUFDRCxLQUhELE1BR087QUFDTEgsTUFBQUEsV0FBVyxDQUFDSyxJQUFaLENBQ0dKLFNBQVMsR0FBRztBQUNYTixRQUFBQSxNQUFNLEVBQUUsQ0FBQ0EsTUFBTSxDQUFDUSxDQUFELENBQVAsQ0FERztBQUVYQyxRQUFBQSxNQUFNLEVBQUVULE1BQU0sQ0FBQ1EsQ0FBRCxDQUFOLENBQVVDLE1BRlA7QUFHWEwsUUFBQUEsTUFBTSxFQUFFSixNQUFNLENBQUNRLENBQUQsQ0FBTixDQUFVSjtBQUhQLE9BRGY7QUFPRDs7QUFDREcsSUFBQUEsWUFBWSxHQUFHRCxTQUFTLENBQUNGLE1BQVYsR0FBbUJFLFNBQVMsQ0FBQ0csTUFBNUM7QUFDRDs7QUFFRCxTQUFPSixXQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7OztBQVdPLFNBQVNNLGdCQUFULENBQTBCQyxNQUExQixFQUFzRDtBQUMzRCxNQUFJLENBQUNBLE1BQUwsRUFBYTs7QUFFYixNQUFJQSxNQUFNLENBQUNDLE9BQVgsRUFBb0I7QUFDbEI7QUFDQSxRQUFJLE9BQU9DLFlBQVAsS0FBd0IsV0FBNUIsRUFDRTtBQUNBLFlBQU0sSUFBSUEsWUFBSixDQUFpQixTQUFqQixFQUE0QixZQUE1QixDQUFOLENBRkYsS0FHSztBQUNILFVBQU1DLENBQUMsR0FBRyxJQUFJcEIsVUFBSixDQUFlLFNBQWYsQ0FBVjtBQUNBb0IsTUFBQUEsQ0FBQyxDQUFDbEIsSUFBRixHQUFTLGFBQVQ7QUFDQSxZQUFNa0IsQ0FBTjtBQUNEO0FBQ0Y7QUFDRjtBQUVEOzs7Ozs7OztTQU1zQkMsZTs7Ozs7Ozs0QkFBZixpQkFBK0JKLE1BQS9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUNDSyxPQUFPLENBQUNDLE9BQVIsRUFERDs7QUFBQTtBQUVMUCxZQUFBQSxnQkFBZ0IsQ0FBQ0MsTUFBRCxDQUFoQjs7QUFGSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEFib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyBjb2RlOiBzdHJpbmdcbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5jb2RlID0gJ0VSUl9BQk9SVEVEJ1xuICB9XG59XG4vLyBzb3J0IGJsb2NrcyBieSBmaWxlIG9mZnNldCBhbmRcbi8vIGdyb3VwIGJsb2NrcyB0aGF0IGFyZSB3aXRoaW4gMktCIG9mIGVhY2hvdGhlclxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQmxvY2tzKGJsb2NrczogYW55W10pOiBhbnlbXSB7XG4gIGJsb2Nrcy5zb3J0KChiMCwgYjEpID0+IChiMC5vZmZzZXQgfCAwKSAtIChiMS5vZmZzZXQgfCAwKSlcblxuICBjb25zdCBibG9ja0dyb3VwcyA9IFtdXG4gIGxldCBsYXN0QmxvY2tcbiAgbGV0IGxhc3RCbG9ja0VuZFxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2Nrcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChsYXN0QmxvY2sgJiYgYmxvY2tzW2ldLm9mZnNldCAtIGxhc3RCbG9ja0VuZCA8PSAyMDAwKSB7XG4gICAgICBsYXN0QmxvY2subGVuZ3RoICs9IGJsb2Nrc1tpXS5sZW5ndGggLSBsYXN0QmxvY2tFbmQgKyBibG9ja3NbaV0ub2Zmc2V0XG4gICAgICBsYXN0QmxvY2suYmxvY2tzLnB1c2goYmxvY2tzW2ldKVxuICAgIH0gZWxzZSB7XG4gICAgICBibG9ja0dyb3Vwcy5wdXNoKFxuICAgICAgICAobGFzdEJsb2NrID0ge1xuICAgICAgICAgIGJsb2NrczogW2Jsb2Nrc1tpXV0sXG4gICAgICAgICAgbGVuZ3RoOiBibG9ja3NbaV0ubGVuZ3RoLFxuICAgICAgICAgIG9mZnNldDogYmxvY2tzW2ldLm9mZnNldCxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfVxuICAgIGxhc3RCbG9ja0VuZCA9IGxhc3RCbG9jay5vZmZzZXQgKyBsYXN0QmxvY2subGVuZ3RoXG4gIH1cblxuICByZXR1cm4gYmxvY2tHcm91cHNcbn1cblxuLyoqXG4gKiBQcm9wZXJseSBjaGVjayBpZiB0aGUgZ2l2ZW4gQWJvcnRTaWduYWwgaXMgYWJvcnRlZC5cbiAqIFBlciB0aGUgc3RhbmRhcmQsIGlmIHRoZSBzaWduYWwgcmVhZHMgYXMgYWJvcnRlZCxcbiAqIHRoaXMgZnVuY3Rpb24gdGhyb3dzIGVpdGhlciBhIERPTUV4Y2VwdGlvbiBBYm9ydEVycm9yLCBvciBhIHJlZ3VsYXIgZXJyb3JcbiAqIHdpdGggYSBgY29kZWAgYXR0cmlidXRlIHNldCB0byBgRVJSX0FCT1JURURgLlxuICpcbiAqIEZvciBjb252ZW5pZW5jZSwgcGFzc2luZyBgdW5kZWZpbmVkYCBpcyBhIG5vLW9wXG4gKlxuICogQHBhcmFtIHtBYm9ydFNpZ25hbH0gW3NpZ25hbF0gYW4gQWJvcnRTaWduYWwsIG9yIGFueXRoaW5nIHdpdGggYW4gYGFib3J0ZWRgIGF0dHJpYnV0ZVxuICogQHJldHVybnMgbm90aGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBYm9ydFNpZ25hbChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IHZvaWQge1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuXG5cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2JhbSBhYm9ydGVkIScpXG4gICAgaWYgKHR5cGVvZiBET01FeGNlcHRpb24gIT09ICd1bmRlZmluZWQnKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICBuby11bmRlZlxuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignYWJvcnRlZCcsICdBYm9ydEVycm9yJylcbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGUgPSBuZXcgQWJvcnRFcnJvcignYWJvcnRlZCcpXG4gICAgICBlLmNvZGUgPSAnRVJSX0FCT1JURUQnXG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2tpcHMgdG8gdGhlIG5leHQgdGljaywgdGhlbiBydW5zIGBjaGVja0Fib3J0U2lnbmFsYC5cbiAqIEF3YWl0IHRoaXMgdG8gaW5zaWRlIGFuIG90aGVyd2lzZSBzeW5jaHJvbm91cyBsb29wIHRvXG4gKiBwcm92aWRlIGEgcGxhY2UgdG8gYnJlYWsgd2hlbiBhbiBhYm9ydCBzaWduYWwgaXMgcmVjZWl2ZWQuXG4gKiBAcGFyYW0ge0Fib3J0U2lnbmFsfSBzaWduYWxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFib3J0QnJlYWtQb2ludChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxuICBjaGVja0Fib3J0U2lnbmFsKHNpZ25hbClcbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbIkFib3J0RXJyb3IiLCJtZXNzYWdlIiwiY29kZSIsIkVycm9yIiwiZ3JvdXBCbG9ja3MiLCJibG9ja3MiLCJzb3J0IiwiYjAiLCJiMSIsIm9mZnNldCIsImJsb2NrR3JvdXBzIiwibGFzdEJsb2NrIiwibGFzdEJsb2NrRW5kIiwiaSIsImxlbmd0aCIsInB1c2giLCJjaGVja0Fib3J0U2lnbmFsIiwic2lnbmFsIiwiYWJvcnRlZCIsIkRPTUV4Y2VwdGlvbiIsImUiLCJhYm9ydEJyZWFrUG9pbnQiLCJQcm9taXNlIiwicmVzb2x2ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7SUFDYUEsVTs7Ozs7QUFHWCxzQkFBbUJDLE9BQW5CLEVBQW9DO0FBQUE7O0FBQUE7QUFDbEMsZ0hBQU1BLE9BQU47QUFEa0M7QUFFbEMsVUFBS0MsSUFBTCxHQUFZLGFBQVo7QUFGa0M7QUFHbkM7OztpQ0FONkJDLEssSUFRaEM7QUFDQTs7Ozs7QUFDTyxTQUFTQyxXQUFULENBQXFCQyxNQUFyQixFQUEyQztBQUNoREEsRUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVksVUFBQ0MsRUFBRCxFQUFLQyxFQUFMO0FBQUEsV0FBWSxDQUFDRCxFQUFFLENBQUNFLE1BQUgsR0FBWSxDQUFiLEtBQW1CRCxFQUFFLENBQUNDLE1BQUgsR0FBWSxDQUEvQixDQUFaO0FBQUEsR0FBWjtBQUVBLE1BQU1DLFdBQVcsR0FBRyxFQUFwQjtBQUNBLE1BQUlDLFNBQUo7QUFDQSxNQUFJQyxZQUFKOztBQUNBLE9BQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR1IsTUFBTSxDQUFDUyxNQUEzQixFQUFtQ0QsQ0FBQyxJQUFJLENBQXhDLEVBQTJDO0FBQ3pDLFFBQUlGLFNBQVMsSUFBSU4sTUFBTSxDQUFDUSxDQUFELENBQU4sQ0FBVUosTUFBVixHQUFtQkcsWUFBbkIsSUFBbUMsSUFBcEQsRUFBMEQ7QUFDeERELE1BQUFBLFNBQVMsQ0FBQ0csTUFBVixJQUFvQlQsTUFBTSxDQUFDUSxDQUFELENBQU4sQ0FBVUMsTUFBVixHQUFtQkYsWUFBbkIsR0FBa0NQLE1BQU0sQ0FBQ1EsQ0FBRCxDQUFOLENBQVVKLE1BQWhFO0FBQ0FFLE1BQUFBLFNBQVMsQ0FBQ04sTUFBVixDQUFpQlUsSUFBakIsQ0FBc0JWLE1BQU0sQ0FBQ1EsQ0FBRCxDQUE1QjtBQUNELEtBSEQsTUFHTztBQUNMSCxNQUFBQSxXQUFXLENBQUNLLElBQVosQ0FDR0osU0FBUyxHQUFHO0FBQ1hOLFFBQUFBLE1BQU0sRUFBRSxDQUFDQSxNQUFNLENBQUNRLENBQUQsQ0FBUCxDQURHO0FBRVhDLFFBQUFBLE1BQU0sRUFBRVQsTUFBTSxDQUFDUSxDQUFELENBQU4sQ0FBVUMsTUFGUDtBQUdYTCxRQUFBQSxNQUFNLEVBQUVKLE1BQU0sQ0FBQ1EsQ0FBRCxDQUFOLENBQVVKO0FBSFAsT0FEZjtBQU9EOztBQUNERyxJQUFBQSxZQUFZLEdBQUdELFNBQVMsQ0FBQ0YsTUFBVixHQUFtQkUsU0FBUyxDQUFDRyxNQUE1QztBQUNEOztBQUVELFNBQU9KLFdBQVA7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7O0FBV08sU0FBU00sZ0JBQVQsQ0FBMEJDLE1BQTFCLEVBQXNEO0FBQzNELE1BQUksQ0FBQ0EsTUFBTCxFQUFhOztBQUViLE1BQUlBLE1BQU0sQ0FBQ0MsT0FBWCxFQUFvQjtBQUNsQjtBQUNBLFFBQUksT0FBT0MsWUFBUCxLQUF3QixXQUE1QixFQUF5QztBQUN2QztBQUNBLFlBQU0sSUFBSUEsWUFBSixDQUFpQixTQUFqQixFQUE0QixZQUE1QixDQUFOO0FBQ0QsS0FIRCxNQUdPO0FBQ0wsVUFBTUMsQ0FBQyxHQUFHLElBQUlwQixVQUFKLENBQWUsU0FBZixDQUFWO0FBQ0FvQixNQUFBQSxDQUFDLENBQUNsQixJQUFGLEdBQVMsYUFBVDtBQUNBLFlBQU1rQixDQUFOO0FBQ0Q7QUFDRjtBQUNGO0FBRUQ7Ozs7Ozs7O1NBTXNCQyxlOzs7Ozs7OzRCQUFmLGlCQUErQkosTUFBL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQ0NLLE9BQU8sQ0FBQ0MsT0FBUixFQUREOztBQUFBO0FBRUxQLFlBQUFBLGdCQUFnQixDQUFDQyxNQUFELENBQWhCOztBQUZLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEciLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tYml0d2lzZTogW1wiZXJyb3JcIiwgeyBcImFsbG93XCI6IFtcInxcIl0gfV0gKi9cbmV4cG9ydCBjbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgY29kZTogc3RyaW5nXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5jb2RlID0gJ0VSUl9BQk9SVEVEJ1xuICB9XG59XG4vLyBzb3J0IGJsb2NrcyBieSBmaWxlIG9mZnNldCBhbmRcbi8vIGdyb3VwIGJsb2NrcyB0aGF0IGFyZSB3aXRoaW4gMktCIG9mIGVhY2hvdGhlclxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQmxvY2tzKGJsb2NrczogYW55W10pOiBhbnlbXSB7XG4gIGJsb2Nrcy5zb3J0KChiMCwgYjEpID0+IChiMC5vZmZzZXQgfCAwKSAtIChiMS5vZmZzZXQgfCAwKSlcblxuICBjb25zdCBibG9ja0dyb3VwcyA9IFtdXG4gIGxldCBsYXN0QmxvY2tcbiAgbGV0IGxhc3RCbG9ja0VuZFxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2Nrcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChsYXN0QmxvY2sgJiYgYmxvY2tzW2ldLm9mZnNldCAtIGxhc3RCbG9ja0VuZCA8PSAyMDAwKSB7XG4gICAgICBsYXN0QmxvY2subGVuZ3RoICs9IGJsb2Nrc1tpXS5sZW5ndGggLSBsYXN0QmxvY2tFbmQgKyBibG9ja3NbaV0ub2Zmc2V0XG4gICAgICBsYXN0QmxvY2suYmxvY2tzLnB1c2goYmxvY2tzW2ldKVxuICAgIH0gZWxzZSB7XG4gICAgICBibG9ja0dyb3Vwcy5wdXNoKFxuICAgICAgICAobGFzdEJsb2NrID0ge1xuICAgICAgICAgIGJsb2NrczogW2Jsb2Nrc1tpXV0sXG4gICAgICAgICAgbGVuZ3RoOiBibG9ja3NbaV0ubGVuZ3RoLFxuICAgICAgICAgIG9mZnNldDogYmxvY2tzW2ldLm9mZnNldCxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfVxuICAgIGxhc3RCbG9ja0VuZCA9IGxhc3RCbG9jay5vZmZzZXQgKyBsYXN0QmxvY2subGVuZ3RoXG4gIH1cblxuICByZXR1cm4gYmxvY2tHcm91cHNcbn1cblxuLyoqXG4gKiBQcm9wZXJseSBjaGVjayBpZiB0aGUgZ2l2ZW4gQWJvcnRTaWduYWwgaXMgYWJvcnRlZC5cbiAqIFBlciB0aGUgc3RhbmRhcmQsIGlmIHRoZSBzaWduYWwgcmVhZHMgYXMgYWJvcnRlZCxcbiAqIHRoaXMgZnVuY3Rpb24gdGhyb3dzIGVpdGhlciBhIERPTUV4Y2VwdGlvbiBBYm9ydEVycm9yLCBvciBhIHJlZ3VsYXIgZXJyb3JcbiAqIHdpdGggYSBgY29kZWAgYXR0cmlidXRlIHNldCB0byBgRVJSX0FCT1JURURgLlxuICpcbiAqIEZvciBjb252ZW5pZW5jZSwgcGFzc2luZyBgdW5kZWZpbmVkYCBpcyBhIG5vLW9wXG4gKlxuICogQHBhcmFtIHtBYm9ydFNpZ25hbH0gW3NpZ25hbF0gYW4gQWJvcnRTaWduYWwsIG9yIGFueXRoaW5nIHdpdGggYW4gYGFib3J0ZWRgIGF0dHJpYnV0ZVxuICogQHJldHVybnMgbm90aGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBYm9ydFNpZ25hbChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IHZvaWQge1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuXG5cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2JhbSBhYm9ydGVkIScpXG4gICAgaWYgKHR5cGVvZiBET01FeGNlcHRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgIG5vLXVuZGVmXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlID0gbmV3IEFib3J0RXJyb3IoJ2Fib3J0ZWQnKVxuICAgICAgZS5jb2RlID0gJ0VSUl9BQk9SVEVEJ1xuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNraXBzIHRvIHRoZSBuZXh0IHRpY2ssIHRoZW4gcnVucyBgY2hlY2tBYm9ydFNpZ25hbGAuXG4gKiBBd2FpdCB0aGlzIHRvIGluc2lkZSBhbiBvdGhlcndpc2Ugc3luY2hyb25vdXMgbG9vcCB0b1xuICogcHJvdmlkZSBhIHBsYWNlIHRvIGJyZWFrIHdoZW4gYW4gYWJvcnQgc2lnbmFsIGlzIHJlY2VpdmVkLlxuICogQHBhcmFtIHtBYm9ydFNpZ25hbH0gc2lnbmFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhYm9ydEJyZWFrUG9pbnQoc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClcbiAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpXG59XG4iXX0= |
{ | ||
"name": "@gmod/bbi", | ||
"version": "1.0.16", | ||
"version": "1.0.17", | ||
"description": "Parser for BigWig/BigBed files", | ||
@@ -42,3 +42,3 @@ "license": "MIT", | ||
"dependencies": { | ||
"@babel/runtime": "^7.4.2", | ||
"@babel/runtime": "^7.4.4", | ||
"@gmod/binary-parser": "^1.3.5", | ||
@@ -49,34 +49,34 @@ "abortable-promise-cache": "^1.0.1", | ||
"generic-filehandle": "^1.0.8", | ||
"quick-lru": "^3.0.0", | ||
"rxjs": "^6.4.0" | ||
"quick-lru": "^4.0.0", | ||
"rxjs": "^6.5.1" | ||
}, | ||
"devDependencies": { | ||
"@babel/cli": "^7.2.3", | ||
"@babel/core": "^7.4.0", | ||
"@babel/plugin-proposal-class-properties": "^7.4.0", | ||
"@babel/plugin-transform-runtime": "^7.4.0", | ||
"@babel/preset-env": "^7.4.2", | ||
"@babel/cli": "^7.4.4", | ||
"@babel/core": "^7.4.4", | ||
"@babel/plugin-proposal-class-properties": "^7.4.4", | ||
"@babel/plugin-transform-runtime": "^7.4.4", | ||
"@babel/preset-env": "^7.4.4", | ||
"@babel/preset-typescript": "^7.3.3", | ||
"@gmod/bed": "^2.0.0", | ||
"@types/jest": "^24.0.11", | ||
"@types/jest": "^24.0.12", | ||
"@types/long": "^4.0.0", | ||
"@typescript-eslint/eslint-plugin": "^1.5.0", | ||
"@typescript-eslint/parser": "^1.5.0", | ||
"@typescript-eslint/eslint-plugin": "^1.7.0", | ||
"@typescript-eslint/parser": "^1.7.0", | ||
"babel-eslint": "^10.0.1", | ||
"babel-preset-typescript": "^7.0.0-alpha.19", | ||
"cross-fetch": "^3.0.2", | ||
"documentation": "^9.3.1", | ||
"eslint": "^5.15.3", | ||
"documentation": "^10.1.0", | ||
"eslint": "^5.16.0", | ||
"eslint-config-airbnb-base": "^13.1.0", | ||
"eslint-config-prettier": "^4.1.0", | ||
"eslint-plugin-import": "^2.16.0", | ||
"eslint-config-prettier": "^4.2.0", | ||
"eslint-plugin-import": "^2.17.2", | ||
"eslint-plugin-jest": "^22.5.1", | ||
"eslint-plugin-prettier": "^3.0.1", | ||
"jest": "^24.5.0", | ||
"prettier": "^1.16.4", | ||
"jest": "^24.7.1", | ||
"prettier": "^1.17.0", | ||
"rimraf": "^2.6.3", | ||
"standard-changelog": "^2.0.7", | ||
"ts-jest": "^24.0.0", | ||
"typedoc": "^0.14.2", | ||
"typedoc-plugin-markdown": "^1.1.27", | ||
"typescript": "^3.3.4000" | ||
"typedoc-plugin-markdown": "^1.2.0", | ||
"typescript": "^3.4.5" | ||
}, | ||
@@ -83,0 +83,0 @@ "publishConfig": { |
@@ -98,4 +98,15 @@ # bbi-js | ||
#### how to parse BigBed results | ||
#### searchExtraIndex(name, opts) | ||
Specific, to bigbed files, this method searches the bigBed "extra indexes", there can be multiple indexes e.g. for the gene ID and gene name columns. See the usage of -extraIndex in bedToBigBed here https://genome.ucsc.edu/goldenpath/help/bigBed.html | ||
This function accepts two arguments | ||
- name: a string to search for in the BigBed extra indices | ||
- opts: an opject that can optionally contain opts.signal, an abort signal | ||
Returns a Promise to an array of Features, with an extra field indicating the field that was matched | ||
### How to parse BigBed results | ||
The BigBed line contents are returned as a raw text line e.g. {start: 0, end:100, rest: "ENST00000456328.2\t1000\t..."} where "rest" contains tab delimited text for the fields from 4 and on in the BED format. The rest line can be parsed by the @gmod/bed module, which is not by integrated with this module, but can be combined with it as follows | ||
@@ -102,0 +113,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Unpopular package
QualityThis package is not very popular.
Found 1 instance in 1 package
191723
1946
171
621
19
1
1
+ Addedquick-lru@4.0.1(transitive)
- Removedquick-lru@3.0.0(transitive)
Updated@babel/runtime@^7.4.4
Updatedquick-lru@^4.0.0
Updatedrxjs@^6.5.1