@datagrok-libraries/bio 5.9.14 → 5.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +2 -2
- package/index.d.ts.map +1 -1
- package/index.js +3 -3
- package/index.ts +3 -1
- package/package.json +2 -2
- package/src/utils/macromolecule.d.ts +2 -0
- package/src/utils/macromolecule.d.ts.map +1 -1
- package/src/utils/macromolecule.js +14 -1
- package/src/utils/notation-converter.d.ts.map +1 -1
- package/src/utils/notation-converter.js +10 -6
- package/src/utils/units-handler.d.ts +1 -1
- package/src/utils/units-handler.d.ts.map +1 -1
- package/src/utils/units-handler.js +26 -16
- package/src/viewers/phylocanvas-gl-viewer.js +1 -1
package/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { IMonomerLib, Monomer, NodeType, isLeaf, NodeCuttedType } from './src/ty
|
|
|
8
8
|
import { UnknownSeqPalette, UnknownSeqPalettes } from './src/unknown';
|
|
9
9
|
import { DrawStyle, printLeftOrCentered } from './src/utils/cell-renderer';
|
|
10
10
|
import { FastaFileHandler } from './src/utils/fasta-handler';
|
|
11
|
-
import { getSplitter, splitterAsFasta, getSplitterForColumn, SplitterFunc, monomerToShort, splitterAsHelm, getStats, pickUpPalette, getPaletteByType, getAlphabetSimilarity, ALPHABET, NOTATION, TAGS, ALIGNMENT } from './src/utils/macromolecule';
|
|
11
|
+
import { getSplitter, splitterAsFasta, getSplitterForColumn, SplitterFunc, monomerToShort, splitterAsHelm, getStats, pickUpPalette, getPaletteByType, getAlphabet, getAlphabetSimilarity, ALPHABET, NOTATION, TAGS, ALIGNMENT } from './src/utils/macromolecule';
|
|
12
12
|
import { INewickHelper } from './src/utils/newick-helper';
|
|
13
13
|
import { NotationConverter } from './src/utils/notation-converter';
|
|
14
14
|
import { splitAlignedSequences } from './src/utils/splitter';
|
|
@@ -20,5 +20,5 @@ import { IVdRegionsViewer } from './src/viewers/vd-regions-viewer';
|
|
|
20
20
|
import { PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer } from './src/viewers/web-logo-viewer';
|
|
21
21
|
import { MonomerLib } from './src/monomer-works/monomer-lib';
|
|
22
22
|
import { readLibrary } from './src/monomer-works/monomer-utils';
|
|
23
|
-
export { ALIGNMENT, ALPHABET, NOTATION, TAGS, NotationConverter, SplitterFunc, getStats, getAlphabetSimilarity, getSplitter, splitterAsFasta, splitterAsHelm, getSplitterForColumn, monomerToShort, splitAlignedSequences, SeqPalette, SeqPaletteBase, Aminoacids, AminoacidsPalettes, Nucleotides, NucleotidesPalettes, UnknownSeqPalettes, UnknownSeqPalette, pickUpPalette, getPaletteByType, PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer, UnitsHandler, DrawStyle, printLeftOrCentered, FastaFileHandler, VdRegionType, VdRegion, IVdRegionsViewer, NodeType, isLeaf, NodeCuttedType, PhylocanvasTreeNode, NodeStyleType, StylesType, IPhylocanvasGlViewer, TreeTypesNames, PhylocanvasGlServiceBase, CanvasCallback, PhylocanvasGlTask, getPhylocanvasGlService, PhylocanvasGL, Shapes, TreeTypes, Utils, Newick, INewickHelper, ITreeHelper, getTreeHelper, Monomer, IMonomerLib, MonomerWorks, MonomerLib, readLibrary };
|
|
23
|
+
export { ALIGNMENT, ALPHABET, NOTATION, TAGS, NotationConverter, SplitterFunc, getStats, getAlphabet, getAlphabetSimilarity, getSplitter, splitterAsFasta, splitterAsHelm, getSplitterForColumn, monomerToShort, splitAlignedSequences, SeqPalette, SeqPaletteBase, Aminoacids, AminoacidsPalettes, Nucleotides, NucleotidesPalettes, UnknownSeqPalettes, UnknownSeqPalette, pickUpPalette, getPaletteByType, PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer, UnitsHandler, DrawStyle, printLeftOrCentered, FastaFileHandler, VdRegionType, VdRegion, IVdRegionsViewer, NodeType, isLeaf, NodeCuttedType, PhylocanvasTreeNode, NodeStyleType, StylesType, IPhylocanvasGlViewer, TreeTypesNames, PhylocanvasGlServiceBase, CanvasCallback, PhylocanvasGlTask, getPhylocanvasGlService, PhylocanvasGL, Shapes, TreeTypes, Utils, Newick, INewickHelper, ITreeHelper, getTreeHelper, Monomer, IMonomerLib, MonomerWorks, MonomerLib, readLibrary };
|
|
24
24
|
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAC,MAAM,6BAA6B,CAAC;AAElG,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAC,UAAU,EAAE,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAC,YAAY,EAAC,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,aAAa,CAAC;AACnF,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACpE,OAAO,EAAC,SAAS,EAAE,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,SAAS,EACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,iBAAiB,EAAC,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAC,aAAa,EAAE,WAAW,EAAC,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAC,QAAQ,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,iBAAiB,EACjB,UAAU,EACV,cAAc,EACf,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAC,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAC,MAAM,+BAA+B,CAAC;AAC/G,OAAO,EAAC,UAAU,EAAC,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAC,WAAW,EAAC,MAAM,mCAAmC,CAAC;AAE9D,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAEhB,QAAQ,EAAE,MAAM,EAAE,cAAc,EAChC,mBAAmB,EACnB,aAAa,EAAE,UAAU,EAEzB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EAEvB,aAAa,EACb,MAAM,EAAE,SAAS,EACjB,KAAK,EACL,MAAM,EACN,aAAa,EACb,WAAW,EACX,aAAa,EAGb,OAAO,EACP,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACZ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
package/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import { isLeaf } from './src/types';
|
|
|
10
10
|
import { UnknownSeqPalette, UnknownSeqPalettes } from './src/unknown';
|
|
11
11
|
import { DrawStyle, printLeftOrCentered } from './src/utils/cell-renderer';
|
|
12
12
|
import { FastaFileHandler } from './src/utils/fasta-handler';
|
|
13
|
-
import { getSplitter, splitterAsFasta, getSplitterForColumn, monomerToShort, splitterAsHelm, getStats, pickUpPalette, getPaletteByType, getAlphabetSimilarity } from './src/utils/macromolecule';
|
|
13
|
+
import { getSplitter, splitterAsFasta, getSplitterForColumn, monomerToShort, splitterAsHelm, getStats, pickUpPalette, getPaletteByType, getAlphabet, getAlphabetSimilarity, } from './src/utils/macromolecule';
|
|
14
14
|
import { NotationConverter } from './src/utils/notation-converter';
|
|
15
15
|
import { splitAlignedSequences } from './src/utils/splitter';
|
|
16
16
|
import { getTreeHelper } from './src/utils/tree-helper';
|
|
@@ -20,5 +20,5 @@ import { getPhylocanvasGlService, PhylocanvasGlServiceBase, TreeTypesNames } fro
|
|
|
20
20
|
import { PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer } from './src/viewers/web-logo-viewer';
|
|
21
21
|
import { MonomerLib } from './src/monomer-works/monomer-lib';
|
|
22
22
|
import { readLibrary } from './src/monomer-works/monomer-utils';
|
|
23
|
-
export { NotationConverter, getStats, getAlphabetSimilarity, getSplitter, splitterAsFasta, splitterAsHelm, getSplitterForColumn, monomerToShort, splitAlignedSequences, SeqPaletteBase, Aminoacids, AminoacidsPalettes, Nucleotides, NucleotidesPalettes, UnknownSeqPalettes, UnknownSeqPalette, pickUpPalette, getPaletteByType, PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer, UnitsHandler, DrawStyle, printLeftOrCentered, FastaFileHandler, VdRegionType, VdRegion, isLeaf, TreeTypesNames, PhylocanvasGlServiceBase, getPhylocanvasGlService, PhylocanvasGL, Shapes, TreeTypes, Utils, Newick, getTreeHelper, MonomerWorks, MonomerLib, readLibrary };
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
export { NotationConverter, getStats, getAlphabet, getAlphabetSimilarity, getSplitter, splitterAsFasta, splitterAsHelm, getSplitterForColumn, monomerToShort, splitAlignedSequences, SeqPaletteBase, Aminoacids, AminoacidsPalettes, Nucleotides, NucleotidesPalettes, UnknownSeqPalettes, UnknownSeqPalette, pickUpPalette, getPaletteByType, PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer, UnitsHandler, DrawStyle, printLeftOrCentered, FastaFileHandler, VdRegionType, VdRegion, isLeaf, TreeTypesNames, PhylocanvasGlServiceBase, getPhylocanvasGlService, PhylocanvasGL, Shapes, TreeTypes, Utils, Newick, getTreeHelper, MonomerWorks, MonomerLib, readLibrary };
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBQ1osT0FBTyxFQUFzQixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRyxZQUFZO0FBQ1osT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRTFELE9BQU8sRUFBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBYSxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQWlDLE1BQU0sRUFBaUIsTUFBTSxhQUFhLENBQUM7QUFDbkYsT0FBTyxFQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsV0FBVyxFQUNYLGVBQWUsRUFDZixvQkFBb0IsRUFFcEIsY0FBYyxFQUNkLGNBQWMsRUFDZCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gscUJBQXFCLEdBS3RCLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGFBQWEsRUFBYyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFFTCx1QkFBdUIsRUFHdkIsd0JBQXdCLEVBR3hCLGNBQWMsRUFDZixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQy9HLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFOUQsT0FBTyxFQUtMLGlCQUFpQixFQUVqQixRQUFRLEVBQ1IsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixXQUFXLEVBQ1gsZUFBZSxFQUNmLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUVyQixjQUFjLEVBQ2QsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsWUFBWSxFQUNaLFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixRQUFRLEVBR0UsTUFBTSxFQUtoQixjQUFjLEVBQ2Qsd0JBQXdCLEVBR3hCLHVCQUF1QixFQUV2QixhQUFhLEVBQ2IsTUFBTSxFQUFFLFNBQVMsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFHTixhQUFhLEVBS2IsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vQHRzLWlnbm9yZVxuaW1wb3J0IHtQaHlsb2NhbnZhc1RyZWVOb2RlLCBOZXdpY2ssIFV0aWxzLCBTaGFwZXMsIFRyZWVUeXBlc30gZnJvbSAnQHBoeWxvY2FudmFzL3BoeWxvY2FudmFzLmdsJztcbi8vQHRzLWlnbm9yZVxuaW1wb3J0IHtQaHlsb2NhbnZhc0dMfSBmcm9tICdAcGh5bG9jYW52YXMvcGh5bG9jYW52YXMuZ2wnO1xuXG5pbXBvcnQge0FtaW5vYWNpZHMsIEFtaW5vYWNpZHNQYWxldHRlc30gZnJvbSAnLi9zcmMvYW1pbm9hY2lkcyc7XG5pbXBvcnQge01vbm9tZXJXb3Jrc30gZnJvbSAnLi9zcmMvbW9ub21lci13b3Jrcy9tb25vbWVyLXdvcmtzJztcbmltcG9ydCB7TnVjbGVvdGlkZXMsIE51Y2xlb3RpZGVzUGFsZXR0ZXN9IGZyb20gJy4vc3JjL251Y2xlb3RpZGVzJztcbmltcG9ydCB7U2VxUGFsZXR0ZSwgU2VxUGFsZXR0ZUJhc2V9IGZyb20gJy4vc3JjL3NlcS1wYWxldHRlcyc7XG5pbXBvcnQge0lNb25vbWVyTGliLCBNb25vbWVyLCBOb2RlVHlwZSwgaXNMZWFmLCBOb2RlQ3V0dGVkVHlwZX0gZnJvbSAnLi9zcmMvdHlwZXMnO1xuaW1wb3J0IHtVbmtub3duU2VxUGFsZXR0ZSwgVW5rbm93blNlcVBhbGV0dGVzfSBmcm9tICcuL3NyYy91bmtub3duJztcbmltcG9ydCB7RHJhd1N0eWxlLCBwcmludExlZnRPckNlbnRlcmVkfSBmcm9tICcuL3NyYy91dGlscy9jZWxsLXJlbmRlcmVyJztcbmltcG9ydCB7RmFzdGFGaWxlSGFuZGxlcn0gZnJvbSAnLi9zcmMvdXRpbHMvZmFzdGEtaGFuZGxlcic7XG5pbXBvcnQge1xuICBnZXRTcGxpdHRlcixcbiAgc3BsaXR0ZXJBc0Zhc3RhLFxuICBnZXRTcGxpdHRlckZvckNvbHVtbixcbiAgU3BsaXR0ZXJGdW5jLFxuICBtb25vbWVyVG9TaG9ydCxcbiAgc3BsaXR0ZXJBc0hlbG0sXG4gIGdldFN0YXRzLFxuICBwaWNrVXBQYWxldHRlLFxuICBnZXRQYWxldHRlQnlUeXBlLFxuICBnZXRBbHBoYWJldCxcbiAgZ2V0QWxwaGFiZXRTaW1pbGFyaXR5LFxuICBBTFBIQUJFVCxcbiAgTk9UQVRJT04sXG4gIFRBR1MsXG4gIEFMSUdOTUVOVCxcbn0gZnJvbSAnLi9zcmMvdXRpbHMvbWFjcm9tb2xlY3VsZSc7XG5pbXBvcnQge0lOZXdpY2tIZWxwZXJ9IGZyb20gJy4vc3JjL3V0aWxzL25ld2ljay1oZWxwZXInO1xuaW1wb3J0IHtOb3RhdGlvbkNvbnZlcnRlcn0gZnJvbSAnLi9zcmMvdXRpbHMvbm90YXRpb24tY29udmVydGVyJztcbmltcG9ydCB7c3BsaXRBbGlnbmVkU2VxdWVuY2VzfSBmcm9tICcuL3NyYy91dGlscy9zcGxpdHRlcic7XG5pbXBvcnQge2dldFRyZWVIZWxwZXIsIElUcmVlSGVscGVyfSBmcm9tICcuL3NyYy91dGlscy90cmVlLWhlbHBlcic7XG5pbXBvcnQge1VuaXRzSGFuZGxlcn0gZnJvbSAnLi9zcmMvdXRpbHMvdW5pdHMtaGFuZGxlcic7XG5pbXBvcnQge1ZkUmVnaW9uLCBWZFJlZ2lvblR5cGV9IGZyb20gJy4vc3JjL3ZkLXJlZ2lvbnMnO1xuaW1wb3J0IHtcbiAgQ2FudmFzQ2FsbGJhY2ssXG4gIGdldFBoeWxvY2FudmFzR2xTZXJ2aWNlLFxuICBJUGh5bG9jYW52YXNHbFZpZXdlcixcbiAgTm9kZVN0eWxlVHlwZSxcbiAgUGh5bG9jYW52YXNHbFNlcnZpY2VCYXNlLFxuICBQaHlsb2NhbnZhc0dsVGFzayxcbiAgU3R5bGVzVHlwZSxcbiAgVHJlZVR5cGVzTmFtZXNcbn0gZnJvbSAnLi9zcmMvdmlld2Vycy9waHlsb2NhbnZhcy1nbC12aWV3ZXInO1xuaW1wb3J0IHtJVmRSZWdpb25zVmlld2VyfSBmcm9tICcuL3NyYy92aWV3ZXJzL3ZkLXJlZ2lvbnMtdmlld2VyJztcbmltcG9ydCB7UG9zaXRpb25IZWlnaHQsIFBvc2l0aW9uSW5mbywgUG9zaXRpb25Nb25vbWVySW5mbywgV2ViTG9nb1ZpZXdlcn0gZnJvbSAnLi9zcmMvdmlld2Vycy93ZWItbG9nby12aWV3ZXInO1xuaW1wb3J0IHtNb25vbWVyTGlifSBmcm9tICcuL3NyYy9tb25vbWVyLXdvcmtzL21vbm9tZXItbGliJztcbmltcG9ydCB7cmVhZExpYnJhcnl9IGZyb20gJy4vc3JjL21vbm9tZXItd29ya3MvbW9ub21lci11dGlscyc7XG5cbmV4cG9ydCB7XG4gIEFMSUdOTUVOVCxcbiAgQUxQSEFCRVQsXG4gIE5PVEFUSU9OLFxuICBUQUdTLFxuICBOb3RhdGlvbkNvbnZlcnRlcixcbiAgU3BsaXR0ZXJGdW5jLFxuICBnZXRTdGF0cyxcbiAgZ2V0QWxwaGFiZXQsXG4gIGdldEFscGhhYmV0U2ltaWxhcml0eSxcbiAgZ2V0U3BsaXR0ZXIsXG4gIHNwbGl0dGVyQXNGYXN0YSxcbiAgc3BsaXR0ZXJBc0hlbG0sXG4gIGdldFNwbGl0dGVyRm9yQ29sdW1uLFxuICBtb25vbWVyVG9TaG9ydCxcbiAgc3BsaXRBbGlnbmVkU2VxdWVuY2VzLFxuICBTZXFQYWxldHRlLFxuICBTZXFQYWxldHRlQmFzZSxcbiAgQW1pbm9hY2lkcyxcbiAgQW1pbm9hY2lkc1BhbGV0dGVzLFxuICBOdWNsZW90aWRlcyxcbiAgTnVjbGVvdGlkZXNQYWxldHRlcyxcbiAgVW5rbm93blNlcVBhbGV0dGVzLFxuICBVbmtub3duU2VxUGFsZXR0ZSxcbiAgcGlja1VwUGFsZXR0ZSxcbiAgZ2V0UGFsZXR0ZUJ5VHlwZSxcbiAgUG9zaXRpb25IZWlnaHQsXG4gIFBvc2l0aW9uSW5mbyxcbiAgUG9zaXRpb25Nb25vbWVySW5mbyxcbiAgV2ViTG9nb1ZpZXdlcixcbiAgVW5pdHNIYW5kbGVyLFxuICBEcmF3U3R5bGUsXG4gIHByaW50TGVmdE9yQ2VudGVyZWQsXG4gIEZhc3RhRmlsZUhhbmRsZXIsXG4gIFZkUmVnaW9uVHlwZSxcbiAgVmRSZWdpb24sXG4gIElWZFJlZ2lvbnNWaWV3ZXIsXG5cbiAgTm9kZVR5cGUsIGlzTGVhZiwgTm9kZUN1dHRlZFR5cGUsXG4gIFBoeWxvY2FudmFzVHJlZU5vZGUsXG4gIE5vZGVTdHlsZVR5cGUsIFN0eWxlc1R5cGUsXG5cbiAgSVBoeWxvY2FudmFzR2xWaWV3ZXIsXG4gIFRyZWVUeXBlc05hbWVzLFxuICBQaHlsb2NhbnZhc0dsU2VydmljZUJhc2UsXG4gIENhbnZhc0NhbGxiYWNrLFxuICBQaHlsb2NhbnZhc0dsVGFzayxcbiAgZ2V0UGh5bG9jYW52YXNHbFNlcnZpY2UsXG5cbiAgUGh5bG9jYW52YXNHTCxcbiAgU2hhcGVzLCBUcmVlVHlwZXMsXG4gIFV0aWxzLFxuICBOZXdpY2ssXG4gIElOZXdpY2tIZWxwZXIsXG4gIElUcmVlSGVscGVyLFxuICBnZXRUcmVlSGVscGVyLFxuXG4gIC8vTW9ub21lciBsaWIgYW5kIGZlYXR1cmVzXG4gIE1vbm9tZXIsXG4gIElNb25vbWVyTGliLFxuICBNb25vbWVyV29ya3MsXG4gIE1vbm9tZXJMaWIsXG4gIHJlYWRMaWJyYXJ5XG59O1xuIl19
|
package/index.ts
CHANGED
|
@@ -21,11 +21,12 @@ import {
|
|
|
21
21
|
getStats,
|
|
22
22
|
pickUpPalette,
|
|
23
23
|
getPaletteByType,
|
|
24
|
+
getAlphabet,
|
|
24
25
|
getAlphabetSimilarity,
|
|
25
26
|
ALPHABET,
|
|
26
27
|
NOTATION,
|
|
27
28
|
TAGS,
|
|
28
|
-
ALIGNMENT
|
|
29
|
+
ALIGNMENT,
|
|
29
30
|
} from './src/utils/macromolecule';
|
|
30
31
|
import {INewickHelper} from './src/utils/newick-helper';
|
|
31
32
|
import {NotationConverter} from './src/utils/notation-converter';
|
|
@@ -56,6 +57,7 @@ export {
|
|
|
56
57
|
NotationConverter,
|
|
57
58
|
SplitterFunc,
|
|
58
59
|
getStats,
|
|
60
|
+
getAlphabet,
|
|
59
61
|
getAlphabetSimilarity,
|
|
60
62
|
getSplitter,
|
|
61
63
|
splitterAsFasta,
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"friendlyName": "Datagrok bio library",
|
|
7
|
-
"version": "5.
|
|
7
|
+
"version": "5.10.0",
|
|
8
8
|
"description": "",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@datagrok-libraries/utils": "^1.10.1",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"eslint": "latest",
|
|
25
25
|
"eslint-config-google": "latest",
|
|
26
26
|
"ts-loader": "^9.2.6",
|
|
27
|
-
"typescript": "^4.
|
|
27
|
+
"typescript": "^4.6.3"
|
|
28
28
|
},
|
|
29
29
|
"scripts": {
|
|
30
30
|
"link": "npm link",
|
|
@@ -70,6 +70,8 @@ export declare function getSplitter(units: string, separator: string, limit?: nu
|
|
|
70
70
|
export declare function getSplitterForColumn(col: DG.Column): SplitterFunc;
|
|
71
71
|
/** Convert long monomer names to short ones */
|
|
72
72
|
export declare function monomerToShort(amino: string, maxLengthOfMonomer: number): string;
|
|
73
|
+
/** */
|
|
74
|
+
export declare function getAlphabet(alphabet: ALPHABET): Set<string>;
|
|
73
75
|
/** Calculate similarity in current sequence and alphabet.
|
|
74
76
|
* @param {MonomerFreqs} freq
|
|
75
77
|
* @param {Set<string>} alphabet
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"macromolecule.d.ts","sourceRoot":"","sources":["macromolecule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKtC,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"macromolecule.d.ts","sourceRoot":"","sources":["macromolecule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKtC,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAO3C,0EAA0E;AAC1E,0BAAkB,QAAQ;IACxB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,IAAI,SAAS;CACd;AAED,0BAAkB,SAAS;IACzB,OAAO,YAAY;IACnB,GAAG,QAAQ;CACZ;AAED,0BAAkB,QAAQ;IACxB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,EAAE,OAAO;CACV;AAED,0BAAkB,IAAI;IACpB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,YAAY,kBAAkB;IAC9B,mBAAmB,yBAAyB;IAC5C,SAAS,cAAc;CACxB;AAED,oBAAY,WAAW,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAA;AACrE,oBAAY,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;AACrD,oBAAY,YAAY,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,WAAW,CAsBlG;AAED,eAAO,MAAM,SAAS,EAAE,MAA8B,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,CAYlD;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,SAAqB,GAAG,YAAY,CAI/G;AAKD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,CAgBjD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,SAAqB,GAAG,YAAY,CAWjH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,YAAY,CAOjE;AAID,+CAA+C;AAC/C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAKhF;AAED,MAAM;AACN,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAW3D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAchH;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAazD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,GAAE,MAAU,GAAG,UAAU,CAYlF;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAYhE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAS/D"}
|
|
@@ -121,6 +121,19 @@ export function monomerToShort(amino, maxLengthOfMonomer) {
|
|
|
121
121
|
const shortAmino = (_b = shortAminoMatch === null || shortAminoMatch === void 0 ? void 0 : shortAminoMatch[0]) !== null && _b !== void 0 ? _b : ' ';
|
|
122
122
|
return !needAddDots ? shortAmino : shortAmino.substring(0, maxLengthOfMonomer) + '…';
|
|
123
123
|
}
|
|
124
|
+
/** */
|
|
125
|
+
export function getAlphabet(alphabet) {
|
|
126
|
+
switch (alphabet) {
|
|
127
|
+
case "DNA" /* ALPHABET.DNA */:
|
|
128
|
+
return UnitsHandler.DnaFastaAlphabet;
|
|
129
|
+
case "RNA" /* ALPHABET.RNA */:
|
|
130
|
+
return UnitsHandler.RnaFastaAlphabet;
|
|
131
|
+
case "PT" /* ALPHABET.PT */:
|
|
132
|
+
return UnitsHandler.PeptideFastaAlphabet;
|
|
133
|
+
default:
|
|
134
|
+
throw new Error(`Unsupported alphabet '${alphabet}'.`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
124
137
|
/** Calculate similarity in current sequence and alphabet.
|
|
125
138
|
* @param {MonomerFreqs} freq
|
|
126
139
|
* @param {Set<string>} alphabet
|
|
@@ -195,4 +208,4 @@ export function pickUpSeqCol(df) {
|
|
|
195
208
|
resCol = semTypeColList[0];
|
|
196
209
|
return resCol;
|
|
197
210
|
}
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjcm9tb2xlY3VsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hY3JvbW9sZWN1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFcEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUUvRixPQUFPLEVBQWEsa0JBQWtCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQTJCbkQsQ0FBQztBQU1GOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxNQUFpQixFQUFFLFNBQWlCLEVBQUUsUUFBc0I7SUFDbkYsTUFBTSxJQUFJLEdBQTRCLEVBQUUsQ0FBQztJQUN6QyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDdEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRXZCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNuQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFM0IsSUFBSSxXQUFXLElBQUksSUFBSTtZQUNyQixXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVztZQUNsQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7WUFDNUIsS0FBSyxNQUFNLENBQUMs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QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxXQUFtQjtJQUNsRCxRQUFRLFdBQVcsRUFBRTtRQUNyQixLQUFLLElBQUk7WUFDUCxPQUFPLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztRQUN2QyxLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxLQUFLO1lBQ1IsT0FBTyxtQkFBbUIsQ0FBQyxZQUFZLENBQUM7UUFDeEMsUUFBUTtRQUNWO1lBQ0UsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7S0FDakM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxFQUFnQjs7SUFDM0MsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6RSxJQUFJLE1BQU0sR0FBcUIsTUFBQSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDekQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckQsQ0FBQyxDQUFDLG1DQUFJLElBQUksQ0FBQztJQUNYLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3RDLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgd3UgZnJvbSAnd3UnO1xuXG5pbXBvcnQge1ZlY3Rvcn0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHt2ZWN0b3JMZW5ndGgsIHZlY3RvckRvdFByb2R1Y3R9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zJztcbmltcG9ydCB7U2VxUGFsZXR0ZX0gZnJvbSAnLi4vc2VxLXBhbGV0dGVzJztcbmltcG9ydCB7QW1pbm9hY2lkcywgQW1pbm9hY2lkc1BhbGV0dGVzfSBmcm9tICcuLi9hbWlub2FjaWRzJztcbmltcG9ydCB7TnVjbGVvdGlkZXMsIE51Y2xlb3RpZGVzUGFsZXR0ZXN9IGZyb20gJy4uL251Y2xlb3RpZGVzJztcbmltcG9ydCB7VW5rbm93blNlcVBhbGV0dGVzfSBmcm9tICcuLi91bmtub3duJztcbmltcG9ydCB7VW5pdHNIYW5kbGVyfSBmcm9tICcuLi91dGlscy91bml0cy1oYW5kbGVyJztcblxuLyoqIGVudW0gdHlwZSB0byBzaW1wbGlmeSBzZXR0aW5nIFwidXNlci1mcmllbmRseVwiIG5vdGF0aW9uIGlmIG5lY2Vzc2FyeSAqL1xuZXhwb3J0IGNvbnN0IGVudW0gTk9UQVRJT04ge1xuICBGQVNUQSA9ICdmYXN0YScsXG4gIFNFUEFSQVRPUiA9ICdzZXBhcmF0b3InLFxuICBIRUxNID0gJ2hlbG0nLFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBBTElHTk1FTlQge1xuICBTRVFfTVNBID0gJ1NFUS5NU0EnLFxuICBTRVEgPSAnU0VRJyxcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gQUxQSEFCRVQge1xuICBETkEgPSAnRE5BJyxcbiAgUk5BID0gJ1JOQScsXG4gIFBUID0gJ1BUJyxcbiAgVU4gPSAnVU4nLFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBUQUdTIHtcbiAgYWxpZ25lZCA9ICdhbGlnbmVkJyxcbiAgYWxwaGFiZXQgPSAnYWxwaGFiZXQnLFxuICBhbHBoYWJldFNpemUgPSAnLmFscGhhYmV0U2l6ZScsXG4gIGFscGhhYmV0SXNNdWx0aWNoYXIgPSAnLmFscGhhYmV0SXNNdWx0aWNoYXInLFxuICBzZXBhcmF0b3IgPSAnc2VwYXJhdG9yJyxcbn07XG5cbmV4cG9ydCB0eXBlIFNlcUNvbFN0YXRzID0geyBmcmVxOiBNb25vbWVyRnJlcXMsIHNhbWVMZW5ndGg6IGJvb2xlYW4gfVxuZXhwb3J0IHR5cGUgU3BsaXR0ZXJGdW5jID0gKHNlcTogc3RyaW5nKSA9PiBzdHJpbmdbXTtcbmV4cG9ydCB0eXBlIE1vbm9tZXJGcmVxcyA9IHsgW206IHN0cmluZ106IG51bWJlciB9O1xuXG4vKiogU3RhdHMgb2Ygc2VxdWVuY2VzIHdpdGggc3BlY2lmaWVkIHNwbGl0dGVyIGZ1bmMsIHJldHVybnMgeyBmcmVxLCBzYW1lTGVuZ3RoIH0uXG4gKiBAcGFyYW0ge0RHLkNvbHVtbn0gc2VxQ29sXG4gKiBAcGFyYW0ge251bWJlcn0gbWluTGVuZ3RoXG4gKiBAcGFyYW0ge1NwbGl0dGVyRnVuY30gc3BsaXR0ZXJcbiAqIEByZXR1cm4geyBTZXFDb2xTdGF0cyB9LCBzYW1lTGVuZ3RoOiBib29sZWFuIH0gc3RhdHMgb2YgY29sdW1uIHNlcXVlbmNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHMoc2VxQ29sOiBERy5Db2x1bW4sIG1pbkxlbmd0aDogbnVtYmVyLCBzcGxpdHRlcjogU3BsaXR0ZXJGdW5jKTogU2VxQ29sU3RhdHMge1xuICBjb25zdCBmcmVxOiB7IFttOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBsZXQgc2FtZUxlbmd0aCA9IHRydWU7XG4gIGxldCBmaXJzdExlbmd0aCA9IG51bGw7XG5cbiAgZm9yIChjb25zdCBzZXEgb2Ygc2VxQ29sLmNhdGVnb3JpZXMpIHtcbiAgICBjb25zdCBtU2VxID0gc3BsaXR0ZXIoc2VxKTtcblxuICAgIGlmIChmaXJzdExlbmd0aCA9PSBudWxsKVxuICAgICAgZmlyc3RMZW5ndGggPSBtU2VxLmxlbmd0aDtcbiAgICBlbHNlIGlmIChtU2VxLmxlbmd0aCAhPT0gZmlyc3RMZW5ndGgpXG4gICAgICBzYW1lTGVuZ3RoID0gZmFsc2U7XG5cbiAgICBpZiAobVNlcS5sZW5ndGggPj0gbWluTGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IG0gb2YgbVNlcSkge1xuICAgICAgICBpZiAoIShtIGluIGZyZXEpKVxuICAgICAgICAgIGZyZXFbbV0gPSAwO1xuICAgICAgICBmcmVxW21dICs9IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7ZnJlcTogZnJlcSwgc2FtZUxlbmd0aDogc2FtZUxlbmd0aH07XG59XG5cbmV4cG9ydCBjb25zdCBtb25vbWVyUmU6IFJlZ0V4cCA9IC9cXFsoXFx3KylcXF18KFxcdyl8KC0pL2c7XG5cbi8qKiBTcGxpdCBzZXF1ZW5jZSBmb3Igc2luZ2xlIGNoYXJhY3RlciBtb25vbWVycywgc3F1YXJlIGJyYWNrZXRzIG11bHRpY2hhciBtb25vbWVyIG5hbWVzIG9yIGdhcCBzeW1ib2wuXG4gKiBAcGFyYW0ge2FueX0gc2VxIG9iamVjdCB3aXRoIHNlcXVlbmNlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX0gYXJyYXkgb2YgbW9ub21lcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0dGVyQXNGYXN0YShzZXE6IGFueSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHd1PFJlZ0V4cE1hdGNoQXJyYXk+KHNlcS50b1N0cmluZygpLm1hdGNoQWxsKG1vbm9tZXJSZSkpXG4gICAgLm1hcCgobWE6IFJlZ0V4cE1hdGNoQXJyYXkpID0+IHtcbiAgICAgIGxldCBtUmVzOiBzdHJpbmc7XG4gICAgICBjb25zdCBtOiBzdHJpbmcgPSBtYVswXTtcbiAgICAgIGlmIChtLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbVJlcyA9IG1hWzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbVJlcyA9IG07XG4gICAgICB9XG4gICAgICByZXR1cm4gbVJlcztcbiAgICB9KS50b0FycmF5KCk7XG59XG5cbi8qKiBHZXRzIG1ldGhvZCB0byBzcGxpdCBzZXF1ZW5jZSBieSBzZXBhcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZXBhcmF0b3JcbiAqIEBwYXJhbSBsaW1pdFxuICogQHJldHVybiB7U3BsaXR0ZXJGdW5jfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BsaXR0ZXJXaXRoU2VwYXJhdG9yKHNlcGFyYXRvcjogc3RyaW5nLCBsaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKTogU3BsaXR0ZXJGdW5jIHtcbiAgcmV0dXJuIChzZXE6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBzZXEuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCk7XG4gIH07XG59XG5cbmNvbnN0IGhlbG1SZTogUmVnRXhwID0gLyhQRVBUSURFMXxETkExfFJOQTEpXFx7KFtefV0rKX0vZztcbmNvbnN0IGhlbG1QcDFSZTogUmVnRXhwID0gL1xcWyhbXlxcW1xcXV0rKV0vZztcblxuXG4vKiogU3BsaXRzIEhlbG0gc3RyaW5nIHRvIG1vbm9tZXJzLCBidXQgZG9lcyBub3QgcmVwbGFjZSBtb25vbWVyIG5hbWVzIHRvIG90aGVyIG5vdGF0aW9uIChlLmcuIGZvciBSTkEpLlxuICogT25seSBmb3IgbGluZWFyIHBvbHltZXJzLCBkb2VzIG5vdCBzcGxpdCBSTkEgZm9yIHJpYm9zZSBhbmQgcGhvc3BoYXRlIG1vbm9tZXJzLlxuICogQHBhcmFtIHtzdHJpbmd9IHNlcSBTb3VyY2Ugc3RyaW5nIG9mIEhFTE0gbm90YXRpb25cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXR0ZXJBc0hlbG0oc2VxOiBhbnkpOiBzdHJpbmdbXSB7XG4gIGhlbG1SZS5sYXN0SW5kZXggPSAwO1xuICBjb25zdCBlYTogUmVnRXhwRXhlY0FycmF5IHwgbnVsbCA9IGhlbG1SZS5leGVjKHNlcS50b1N0cmluZygpKTtcbiAgY29uc3QgaW5TZXE6IHN0cmluZyB8IG51bGwgPSBlYSA/IGVhWzJdIDogbnVsbDtcblxuICBjb25zdCBtbVBvc3RQcm9jZXNzID0gKG1tOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGhlbG1QcDFSZS5sYXN0SW5kZXggPSAwO1xuICAgIGNvbnN0IHBwMU0gPSBoZWxtUHAxUmUuZXhlYyhtbSk7XG4gICAgaWYgKHBwMU0gJiYgcHAxTS5sZW5ndGggPj0gMilcbiAgICAgIHJldHVybiBwcDFNWzFdO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBtbTtcbiAgfTtcblxuICBjb25zdCBtbUxpc3Q6IHN0cmluZ1tdID0gaW5TZXEgPyBpblNlcS5zcGxpdCgnLicpIDogW107XG4gIHJldHVybiBtbUxpc3QubWFwKG1tUG9zdFByb2Nlc3MpO1xufVxuXG4vKiogR2V0IHNwbGl0dGVyIG1ldGhvZCB0byBzcGxpdCBzZXF1ZW5jZXMgdG8gbW9ub21lcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB1bml0c1xuICogQHBhcmFtIHtzdHJpbmd9IHNlcGFyYXRvclxuICogQHBhcmFtIGxpbWl0XG4gKiBAcmV0dXJuIHtTcGxpdHRlckZ1bmN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGxpdHRlcih1bml0czogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZywgbGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IFNwbGl0dGVyRnVuYyB7XG4gIGlmICh1bml0cy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoTk9UQVRJT04uRkFTVEEpKVxuICAgIHJldHVybiBzcGxpdHRlckFzRmFzdGE7XG4gIGVsc2UgaWYgKHVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChOT1RBVElPTi5TRVBBUkFUT1IpKVxuICAgIHJldHVybiBnZXRTcGxpdHRlcldpdGhTZXBhcmF0b3Ioc2VwYXJhdG9yLCBsaW1pdCk7XG4gIGVsc2UgaWYgKHVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChOT1RBVElPTi5IRUxNKSlcbiAgICByZXR1cm4gc3BsaXR0ZXJBc0hlbG07XG4gIGVsc2VcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdW5pdHMgJHt1bml0c30gLmApO1xuXG4gIC8vIFRPRE86IFNwbGl0dGVyIGZvciBIRUxNXG59XG5cbi8qKiBHZW5lcmF0ZSBzcGxpdHRlciBmdW5jdGlvbiBmb3Igc2VxdWVuY2UgY29sdW1uXG4gKiBAcGFyYW0ge0RHLkNvbHVtbn0gY29sXG4gKiBAcmV0dXJuIHtTcGxpdHRlckZ1bmN9IFNwbGl0dGVyIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGxpdHRlckZvckNvbHVtbihjb2w6IERHLkNvbHVtbik6IFNwbGl0dGVyRnVuYyB7XG4gIGlmIChjb2wuc2VtVHlwZSAhPT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKVxuICAgIHRocm93IG5ldyBFcnJvcihgR2V0IHNwbGl0dGVyIGZvciBzZW1UeXBlIFwiJHtERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEV9XCIgb25seS5gKTtcblxuICBjb25zdCB1bml0cyA9IGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUyk7XG4gIGNvbnN0IHNlcGFyYXRvciA9IGNvbC5nZXRUYWcoVEFHUy5zZXBhcmF0b3IpO1xuICByZXR1cm4gZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcGFyYXRvcik7XG59XG5cbmNvbnN0IGxvbmdNb25vbWVyUGFydFJlOiBSZWdFeHAgPSAvKFxcdyspL2c7XG5cbi8qKiBDb252ZXJ0IGxvbmcgbW9ub21lciBuYW1lcyB0byBzaG9ydCBvbmVzICovXG5leHBvcnQgZnVuY3Rpb24gbW9ub21lclRvU2hvcnQoYW1pbm86IHN0cmluZywgbWF4TGVuZ3RoT2ZNb25vbWVyOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBzaG9ydEFtaW5vTWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXkgfCBudWxsID0gYW1pbm8ubWF0Y2gobG9uZ01vbm9tZXJQYXJ0UmUpO1xuICBjb25zdCBuZWVkQWRkRG90czogYm9vbGVhbiA9IGFtaW5vLmxlbmd0aCA+IG1heExlbmd0aE9mTW9ub21lciB8fCAoc2hvcnRBbWlub01hdGNoPy5sZW5ndGggPz8gMCkgPiAxO1xuICBjb25zdCBzaG9ydEFtaW5vID0gc2hvcnRBbWlub01hdGNoPy5bMF0gPz8gJyAnO1xuICByZXR1cm4gIW5lZWRBZGREb3RzID8gc2hvcnRBbWlubyA6IHNob3J0QW1pbm8uc3Vic3RyaW5nKDAsIG1heExlbmd0aE9mTW9ub21lcikgKyAn4oCmJztcbn1cblxuLyoqIENhbGN1bGF0ZSBzaW1pbGFyaXR5IGluIGN1cnJlbnQgc2VxdWVuY2UgYW5kIGFscGhhYmV0LlxuICogQHBhcmFtIHtNb25vbWVyRnJlcXN9IGZyZXFcbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IGFscGhhYmV0XG4gKiBAcGFyYW0ge3N0cmluZ30gZ2FwU3ltYm9sXG4gKiBAcmV0dXJuIHtudW1iZXJ9IENvc2luZSBzaW1pbGFyaXR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbHBoYWJldFNpbWlsYXJpdHkoZnJlcTogTW9ub21lckZyZXFzLCBhbHBoYWJldDogU2V0PHN0cmluZz4sIGdhcFN5bWJvbDogc3RyaW5nID0gJy0nKTogbnVtYmVyIHtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQ8c3RyaW5nPihbLi4ubmV3IFNldChPYmplY3Qua2V5cyhmcmVxKSksIC4uLmFscGhhYmV0XSk7XG4gIGtleXMuZGVsZXRlKGdhcFN5bWJvbCk7XG5cbiAgY29uc3QgZnJlcUE6IG51bWJlcltdID0gW107XG4gIGNvbnN0IGFscGhhYmV0QTogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBtIG9mIGtleXMpIHtcbiAgICBmcmVxQS5wdXNoKG0gaW4gZnJlcSA/IGZyZXFbbV0gOiAwKTtcbiAgICBhbHBoYWJldEEucHVzaChhbHBoYWJldC5oYXMobSkgPyAxIDogMCk7XG4gIH1cbiAgLyogVGhlcmUgd2VyZSBhIGZldyBpZGVhczogY2hpLXNxdWFyZWQsIHBlYXJzb24gY29ycmVsYXRpb24gKHZhcmlhbmNlPyksIHNjYWxhciBwcm9kdWN0ICovXG4gIGNvbnN0IGZyZXFWOiBWZWN0b3IgPSBuZXcgVmVjdG9yKGZyZXFBKTtcbiAgY29uc3QgYWxwaGFiZXRWOiBWZWN0b3IgPSBuZXcgVmVjdG9yKGFscGhhYmV0QSk7XG4gIHJldHVybiB2ZWN0b3JEb3RQcm9kdWN0KGZyZXFWLCBhbHBoYWJldFYpIC8gKHZlY3Rvckxlbmd0aChmcmVxVikgKiB2ZWN0b3JMZW5ndGgoYWxwaGFiZXRWKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RBbHBoYWJldChzdGF0czogU2VxQ29sU3RhdHMpOiBzdHJpbmcge1xuICBjb25zdCBhbHBoYWJldENhbmRpZGF0ZXM6IFtzdHJpbmcsIFNldDxzdHJpbmc+XVtdID0gW1xuICAgIFtBTFBIQUJFVC5QVCwgVW5pdHNIYW5kbGVyLlBlcHRpZGVGYXN0YUFscGhhYmV0XSxcbiAgICBbQUxQSEFCRVQuRE5BLCBVbml0c0hhbmRsZXIuRG5hRmFzdGFBbHBoYWJldF0sXG4gICAgW0FMUEhBQkVULlJOQSwgVW5pdHNIYW5kbGVyLlJuYUZhc3RhQWxwaGFiZXRdLFxuICBdO1xuXG4gIC8vIENhbGN1bGF0ZSBsaWtlbGlob29kcyBmb3IgYWxwaGFiZXRfY2FuZGlkYXRlc1xuICBjb25zdCBhbHBoYWJldENhbmRpZGF0ZXNTaW06IG51bWJlcltdID0gYWxwaGFiZXRDYW5kaWRhdGVzLm1hcChcbiAgICAoYykgPT4gZ2V0QWxwaGFiZXRTaW1pbGFyaXR5KHN0YXRzLmZyZXEsIGNbMV0pKTtcbiAgY29uc3QgbWF4Q29zID0gTWF0aC5tYXgoLi4uYWxwaGFiZXRDYW5kaWRhdGVzU2ltKTtcbiAgY29uc3QgYWxwaGFiZXQgPSBtYXhDb3MgPiAwLjY1ID8gYWxwaGFiZXRDYW5kaWRhdGVzW2FscGhhYmV0Q2FuZGlkYXRlc1NpbS5pbmRleE9mKG1heENvcyldWzBdIDogJ1VOJztcbiAgcmV0dXJuIGFscGhhYmV0O1xufVxuXG4vKiogU2VsZWN0cyBhIHN1aXRhYmxlIHBhbGV0dGUgYmFzZWQgb24gY29sdW1uIGRhdGFcbiAqIEBwYXJhbSB7REcuQ29sdW1ufSBzZXFDb2wgQ29sdW1uIHRvIGxvb2sgZm9yIGEgcGFsZXR0ZVxuICogQHBhcmFtIHtudW1iZXJ9ICBtaW5MZW5ndGggbWluaW11bSBsZW5ndGggb2Ygc2VxdWVuY2UgdG8gZGV0ZWN0IHBhbGV0dGUgKGVtcHR5IHN0cmluZ3MgYXJlIGFsbG93ZWQpXG4gKiBAcmV0dXJuIHtTZXFQYWxldHRlfSBQYWxldHRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFscGhhYmV0IG9mIHRoZSBzZXF1ZW5jZXMgaW4gdGhlIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja1VwUGFsZXR0ZShzZXFDb2w6IERHLkNvbHVtbiwgbWluTGVuZ3RoOiBudW1iZXIgPSA1KTogU2VxUGFsZXR0ZSB7XG4gIGxldCBhbHBoYWJldDogc3RyaW5nO1xuICBpZiAoc2VxQ29sLnNlbVR5cGUgPT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKSB7XG4gICAgY29uc3QgdWg6IFVuaXRzSGFuZGxlciA9IG5ldyBVbml0c0hhbmRsZXIoc2VxQ29sKTtcbiAgICBhbHBoYWJldCA9IHVoLmFscGhhYmV0O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0YXRzOiBTZXFDb2xTdGF0cyA9IGdldFN0YXRzKHNlcUNvbCwgbWluTGVuZ3RoLCBzcGxpdHRlckFzRmFzdGEpO1xuICAgIGFscGhhYmV0ID0gZGV0ZWN0QWxwaGFiZXQoc3RhdHMpO1xuICB9XG5cbiAgY29uc3QgcmVzID0gZ2V0UGFsZXR0ZUJ5VHlwZShhbHBoYWJldCk7XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWxldHRlQnlUeXBlKHBhbGV0dGVUeXBlOiBzdHJpbmcpOiBTZXFQYWxldHRlIHtcbiAgc3dpdGNoIChwYWxldHRlVHlwZSkge1xuICBjYXNlICdQVCc6XG4gICAgcmV0dXJuIEFtaW5vYWNpZHNQYWxldHRlcy5Hcm9rR3JvdXBzO1xuICBjYXNlICdOVCc6XG4gIGNhc2UgJ0ROQSc6XG4gIGNhc2UgJ1JOQSc6XG4gICAgcmV0dXJuIE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtO1xuICAgIC8vIG90aGVyXG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIFVua25vd25TZXFQYWxldHRlcy5Db2xvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGlja1VwU2VxQ29sKGRmOiBERy5EYXRhRnJhbWUpOiBERy5Db2x1bW4gfCBudWxsIHtcbiAgY29uc3Qgc2VtVHlwZUNvbExpc3QgPSBkZi5jb2x1bW5zLmJ5U2VtVHlwZUFsbChERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpO1xuICBsZXQgcmVzQ29sOiBERy5Db2x1bW4gfCBudWxsID0gc2VtVHlwZUNvbExpc3QuZmluZCgoY29sKSA9PiB7XG4gICAgY29uc3QgdW5pdHMgPSBjb2wuZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICAgIHJldHVybiB1bml0cyA/IHVuaXRzLmluZGV4T2YoJ01TQScpICE9PSAtMSA6IGZhbHNlO1xuICB9KSA/PyBudWxsO1xuICBpZiAoIXJlc0NvbCAmJiBzZW1UeXBlQ29sTGlzdC5sZW5ndGggPiAwKVxuICAgIHJlc0NvbCA9IHNlbVR5cGVDb2xMaXN0WzBdO1xuICByZXR1cm4gcmVzQ29sO1xufVxuIl19
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjcm9tb2xlY3VsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hY3JvbW9sZWN1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFcEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUUvRixPQUFPLEVBQWEsa0JBQWtCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQTRCbkQsQ0FBQztBQU1GOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxNQUFpQixFQUFFLFNBQWlCLEVBQUUsUUFBc0I7SUFDbkYsTUFBTSxJQUFJLEdBQTRCLEVBQUUsQ0FBQztJQUN6QyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDdEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRXZCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNuQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFM0IsSUFBSSxXQUFXLElBQUksSUFBSTtZQUNyQixXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVztZQUNsQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7WUFDNUIsS0FBSyxNQUFNLENBQUMs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QUFDLENBQUMsS0FBSyxDQUFDO0lBQ3JELENBQUMsQ0FBQyxtQ0FBSSxJQUFJLENBQUM7SUFDWCxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUN0QyxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHd1IGZyb20gJ3d1JztcblxuaW1wb3J0IHtWZWN0b3J9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7dmVjdG9yTGVuZ3RoLCB2ZWN0b3JEb3RQcm9kdWN0fSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQge1NlcVBhbGV0dGV9IGZyb20gJy4uL3NlcS1wYWxldHRlcyc7XG5pbXBvcnQge0FtaW5vYWNpZHMsIEFtaW5vYWNpZHNQYWxldHRlc30gZnJvbSAnLi4vYW1pbm9hY2lkcyc7XG5pbXBvcnQge051Y2xlb3RpZGVzLCBOdWNsZW90aWRlc1BhbGV0dGVzfSBmcm9tICcuLi9udWNsZW90aWRlcyc7XG5pbXBvcnQge1Vua25vd25TZXFQYWxldHRlc30gZnJvbSAnLi4vdW5rbm93bic7XG5pbXBvcnQge1VuaXRzSGFuZGxlcn0gZnJvbSAnLi4vdXRpbHMvdW5pdHMtaGFuZGxlcic7XG5cblxuLyoqIGVudW0gdHlwZSB0byBzaW1wbGlmeSBzZXR0aW5nIFwidXNlci1mcmllbmRseVwiIG5vdGF0aW9uIGlmIG5lY2Vzc2FyeSAqL1xuZXhwb3J0IGNvbnN0IGVudW0gTk9UQVRJT04ge1xuICBGQVNUQSA9ICdmYXN0YScsXG4gIFNFUEFSQVRPUiA9ICdzZXBhcmF0b3InLFxuICBIRUxNID0gJ2hlbG0nLFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBBTElHTk1FTlQge1xuICBTRVFfTVNBID0gJ1NFUS5NU0EnLFxuICBTRVEgPSAnU0VRJyxcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gQUxQSEFCRVQge1xuICBETkEgPSAnRE5BJyxcbiAgUk5BID0gJ1JOQScsXG4gIFBUID0gJ1BUJyxcbiAgVU4gPSAnVU4nLFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBUQUdTIHtcbiAgYWxpZ25lZCA9ICdhbGlnbmVkJyxcbiAgYWxwaGFiZXQgPSAnYWxwaGFiZXQnLFxuICBhbHBoYWJldFNpemUgPSAnLmFscGhhYmV0U2l6ZScsXG4gIGFscGhhYmV0SXNNdWx0aWNoYXIgPSAnLmFscGhhYmV0SXNNdWx0aWNoYXInLFxuICBzZXBhcmF0b3IgPSAnc2VwYXJhdG9yJyxcbn07XG5cbmV4cG9ydCB0eXBlIFNlcUNvbFN0YXRzID0geyBmcmVxOiBNb25vbWVyRnJlcXMsIHNhbWVMZW5ndGg6IGJvb2xlYW4gfVxuZXhwb3J0IHR5cGUgU3BsaXR0ZXJGdW5jID0gKHNlcTogc3RyaW5nKSA9PiBzdHJpbmdbXTtcbmV4cG9ydCB0eXBlIE1vbm9tZXJGcmVxcyA9IHsgW206IHN0cmluZ106IG51bWJlciB9O1xuXG4vKiogU3RhdHMgb2Ygc2VxdWVuY2VzIHdpdGggc3BlY2lmaWVkIHNwbGl0dGVyIGZ1bmMsIHJldHVybnMgeyBmcmVxLCBzYW1lTGVuZ3RoIH0uXG4gKiBAcGFyYW0ge0RHLkNvbHVtbn0gc2VxQ29sXG4gKiBAcGFyYW0ge251bWJlcn0gbWluTGVuZ3RoXG4gKiBAcGFyYW0ge1NwbGl0dGVyRnVuY30gc3BsaXR0ZXJcbiAqIEByZXR1cm4geyBTZXFDb2xTdGF0cyB9LCBzYW1lTGVuZ3RoOiBib29sZWFuIH0gc3RhdHMgb2YgY29sdW1uIHNlcXVlbmNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHMoc2VxQ29sOiBERy5Db2x1bW4sIG1pbkxlbmd0aDogbnVtYmVyLCBzcGxpdHRlcjogU3BsaXR0ZXJGdW5jKTogU2VxQ29sU3RhdHMge1xuICBjb25zdCBmcmVxOiB7IFttOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBsZXQgc2FtZUxlbmd0aCA9IHRydWU7XG4gIGxldCBmaXJzdExlbmd0aCA9IG51bGw7XG5cbiAgZm9yIChjb25zdCBzZXEgb2Ygc2VxQ29sLmNhdGVnb3JpZXMpIHtcbiAgICBjb25zdCBtU2VxID0gc3BsaXR0ZXIoc2VxKTtcblxuICAgIGlmIChmaXJzdExlbmd0aCA9PSBudWxsKVxuICAgICAgZmlyc3RMZW5ndGggPSBtU2VxLmxlbmd0aDtcbiAgICBlbHNlIGlmIChtU2VxLmxlbmd0aCAhPT0gZmlyc3RMZW5ndGgpXG4gICAgICBzYW1lTGVuZ3RoID0gZmFsc2U7XG5cbiAgICBpZiAobVNlcS5sZW5ndGggPj0gbWluTGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IG0gb2YgbVNlcSkge1xuICAgICAgICBpZiAoIShtIGluIGZyZXEpKVxuICAgICAgICAgIGZyZXFbbV0gPSAwO1xuICAgICAgICBmcmVxW21dICs9IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7ZnJlcTogZnJlcSwgc2FtZUxlbmd0aDogc2FtZUxlbmd0aH07XG59XG5cbmV4cG9ydCBjb25zdCBtb25vbWVyUmU6IFJlZ0V4cCA9IC9cXFsoXFx3KylcXF18KFxcdyl8KC0pL2c7XG5cbi8qKiBTcGxpdCBzZXF1ZW5jZSBmb3Igc2luZ2xlIGNoYXJhY3RlciBtb25vbWVycywgc3F1YXJlIGJyYWNrZXRzIG11bHRpY2hhciBtb25vbWVyIG5hbWVzIG9yIGdhcCBzeW1ib2wuXG4gKiBAcGFyYW0ge2FueX0gc2VxIG9iamVjdCB3aXRoIHNlcXVlbmNlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX0gYXJyYXkgb2YgbW9ub21lcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0dGVyQXNGYXN0YShzZXE6IGFueSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHd1PFJlZ0V4cE1hdGNoQXJyYXk+KHNlcS50b1N0cmluZygpLm1hdGNoQWxsKG1vbm9tZXJSZSkpXG4gICAgLm1hcCgobWE6IFJlZ0V4cE1hdGNoQXJyYXkpID0+IHtcbiAgICAgIGxldCBtUmVzOiBzdHJpbmc7XG4gICAgICBjb25zdCBtOiBzdHJpbmcgPSBtYVswXTtcbiAgICAgIGlmIChtLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbVJlcyA9IG1hWzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbVJlcyA9IG07XG4gICAgICB9XG4gICAgICByZXR1cm4gbVJlcztcbiAgICB9KS50b0FycmF5KCk7XG59XG5cbi8qKiBHZXRzIG1ldGhvZCB0byBzcGxpdCBzZXF1ZW5jZSBieSBzZXBhcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZXBhcmF0b3JcbiAqIEBwYXJhbSBsaW1pdFxuICogQHJldHVybiB7U3BsaXR0ZXJGdW5jfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BsaXR0ZXJXaXRoU2VwYXJhdG9yKHNlcGFyYXRvcjogc3RyaW5nLCBsaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKTogU3BsaXR0ZXJGdW5jIHtcbiAgcmV0dXJuIChzZXE6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBzZXEuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCk7XG4gIH07XG59XG5cbmNvbnN0IGhlbG1SZTogUmVnRXhwID0gLyhQRVBUSURFMXxETkExfFJOQTEpXFx7KFtefV0rKX0vZztcbmNvbnN0IGhlbG1QcDFSZTogUmVnRXhwID0gL1xcWyhbXlxcW1xcXV0rKV0vZztcblxuLyoqIFNwbGl0cyBIZWxtIHN0cmluZyB0byBtb25vbWVycywgYnV0IGRvZXMgbm90IHJlcGxhY2UgbW9ub21lciBuYW1lcyB0byBvdGhlciBub3RhdGlvbiAoZS5nLiBmb3IgUk5BKS5cbiAqIE9ubHkgZm9yIGxpbmVhciBwb2x5bWVycywgZG9lcyBub3Qgc3BsaXQgUk5BIGZvciByaWJvc2UgYW5kIHBob3NwaGF0ZSBtb25vbWVycy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZXEgU291cmNlIHN0cmluZyBvZiBIRUxNIG5vdGF0aW9uXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0dGVyQXNIZWxtKHNlcTogYW55KTogc3RyaW5nW10ge1xuICBoZWxtUmUubGFzdEluZGV4ID0gMDtcbiAgY29uc3QgZWE6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBoZWxtUmUuZXhlYyhzZXEudG9TdHJpbmcoKSk7XG4gIGNvbnN0IGluU2VxOiBzdHJpbmcgfCBudWxsID0gZWEgPyBlYVsyXSA6IG51bGw7XG5cbiAgY29uc3QgbW1Qb3N0UHJvY2VzcyA9IChtbTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBoZWxtUHAxUmUubGFzdEluZGV4ID0gMDtcbiAgICBjb25zdCBwcDFNID0gaGVsbVBwMVJlLmV4ZWMobW0pO1xuICAgIGlmIChwcDFNICYmIHBwMU0ubGVuZ3RoID49IDIpXG4gICAgICByZXR1cm4gcHAxTVsxXTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gbW07XG4gIH07XG5cbiAgY29uc3QgbW1MaXN0OiBzdHJpbmdbXSA9IGluU2VxID8gaW5TZXEuc3BsaXQoJy4nKSA6IFtdO1xuICByZXR1cm4gbW1MaXN0Lm1hcChtbVBvc3RQcm9jZXNzKTtcbn1cblxuLyoqIEdldCBzcGxpdHRlciBtZXRob2QgdG8gc3BsaXQgc2VxdWVuY2VzIHRvIG1vbm9tZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gdW5pdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZXBhcmF0b3JcbiAqIEBwYXJhbSBsaW1pdFxuICogQHJldHVybiB7U3BsaXR0ZXJGdW5jfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BsaXR0ZXIodW5pdHM6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBTcGxpdHRlckZ1bmMge1xuICBpZiAodW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE5PVEFUSU9OLkZBU1RBKSlcbiAgICByZXR1cm4gc3BsaXR0ZXJBc0Zhc3RhO1xuICBlbHNlIGlmICh1bml0cy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoTk9UQVRJT04uU0VQQVJBVE9SKSlcbiAgICByZXR1cm4gZ2V0U3BsaXR0ZXJXaXRoU2VwYXJhdG9yKHNlcGFyYXRvciwgbGltaXQpO1xuICBlbHNlIGlmICh1bml0cy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoTk9UQVRJT04uSEVMTSkpXG4gICAgcmV0dXJuIHNwbGl0dGVyQXNIZWxtO1xuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHVuaXRzICR7dW5pdHN9IC5gKTtcblxuICAvLyBUT0RPOiBTcGxpdHRlciBmb3IgSEVMTVxufVxuXG4vKiogR2VuZXJhdGUgc3BsaXR0ZXIgZnVuY3Rpb24gZm9yIHNlcXVlbmNlIGNvbHVtblxuICogQHBhcmFtIHtERy5Db2x1bW59IGNvbFxuICogQHJldHVybiB7U3BsaXR0ZXJGdW5jfSBTcGxpdHRlciBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BsaXR0ZXJGb3JDb2x1bW4oY29sOiBERy5Db2x1bW4pOiBTcGxpdHRlckZ1bmMge1xuICBpZiAoY29sLnNlbVR5cGUgIT09IERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdldCBzcGxpdHRlciBmb3Igc2VtVHlwZSBcIiR7REcuU0VNVFlQRS5NQUNST01PTEVDVUxFfVwiIG9ubHkuYCk7XG5cbiAgY29uc3QgdW5pdHMgPSBjb2wuZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICBjb25zdCBzZXBhcmF0b3IgPSBjb2wuZ2V0VGFnKFRBR1Muc2VwYXJhdG9yKTtcbiAgcmV0dXJuIGdldFNwbGl0dGVyKHVuaXRzLCBzZXBhcmF0b3IpO1xufVxuXG5jb25zdCBsb25nTW9ub21lclBhcnRSZTogUmVnRXhwID0gLyhcXHcrKS9nO1xuXG4vKiogQ29udmVydCBsb25nIG1vbm9tZXIgbmFtZXMgdG8gc2hvcnQgb25lcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbm9tZXJUb1Nob3J0KGFtaW5vOiBzdHJpbmcsIG1heExlbmd0aE9mTW9ub21lcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3Qgc2hvcnRBbWlub01hdGNoOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCA9IGFtaW5vLm1hdGNoKGxvbmdNb25vbWVyUGFydFJlKTtcbiAgY29uc3QgbmVlZEFkZERvdHM6IGJvb2xlYW4gPSBhbWluby5sZW5ndGggPiBtYXhMZW5ndGhPZk1vbm9tZXIgfHwgKHNob3J0QW1pbm9NYXRjaD8ubGVuZ3RoID8/IDApID4gMTtcbiAgY29uc3Qgc2hvcnRBbWlubyA9IHNob3J0QW1pbm9NYXRjaD8uWzBdID8/ICcgJztcbiAgcmV0dXJuICFuZWVkQWRkRG90cyA/IHNob3J0QW1pbm8gOiBzaG9ydEFtaW5vLnN1YnN0cmluZygwLCBtYXhMZW5ndGhPZk1vbm9tZXIpICsgJ+KApic7XG59XG5cbi8qKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFscGhhYmV0KGFscGhhYmV0OiBBTFBIQUJFVCk6IFNldDxzdHJpbmc+IHtcbiAgc3dpdGNoIChhbHBoYWJldCkge1xuICBjYXNlIEFMUEhBQkVULkROQTpcbiAgICByZXR1cm4gVW5pdHNIYW5kbGVyLkRuYUZhc3RhQWxwaGFiZXQ7XG4gIGNhc2UgQUxQSEFCRVQuUk5BOlxuICAgIHJldHVybiBVbml0c0hhbmRsZXIuUm5hRmFzdGFBbHBoYWJldDtcbiAgY2FzZSBBTFBIQUJFVC5QVDpcbiAgICByZXR1cm4gVW5pdHNIYW5kbGVyLlBlcHRpZGVGYXN0YUFscGhhYmV0O1xuICBkZWZhdWx0OlxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWxwaGFiZXQgJyR7YWxwaGFiZXR9Jy5gKTtcbiAgfVxufVxuXG4vKiogQ2FsY3VsYXRlIHNpbWlsYXJpdHkgaW4gY3VycmVudCBzZXF1ZW5jZSBhbmQgYWxwaGFiZXQuXG4gKiBAcGFyYW0ge01vbm9tZXJGcmVxc30gZnJlcVxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gYWxwaGFiZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBnYXBTeW1ib2xcbiAqIEByZXR1cm4ge251bWJlcn0gQ29zaW5lIHNpbWlsYXJpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFscGhhYmV0U2ltaWxhcml0eShmcmVxOiBNb25vbWVyRnJlcXMsIGFscGhhYmV0OiBTZXQ8c3RyaW5nPiwgZ2FwU3ltYm9sOiBzdHJpbmcgPSAnLScpOiBudW1iZXIge1xuICBjb25zdCBrZXlzID0gbmV3IFNldDxzdHJpbmc+KFsuLi5uZXcgU2V0KE9iamVjdC5rZXlzKGZyZXEpKSwgLi4uYWxwaGFiZXRdKTtcbiAga2V5cy5kZWxldGUoZ2FwU3ltYm9sKTtcblxuICBjb25zdCBmcmVxQTogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgYWxwaGFiZXRBOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG0gb2Yga2V5cykge1xuICAgIGZyZXFBLnB1c2gobSBpbiBmcmVxID8gZnJlcVttXSA6IDApO1xuICAgIGFscGhhYmV0QS5wdXNoKGFscGhhYmV0LmhhcyhtKSA/IDEgOiAwKTtcbiAgfVxuICAvKiBUaGVyZSB3ZXJlIGEgZmV3IGlkZWFzOiBjaGktc3F1YXJlZCwgcGVhcnNvbiBjb3JyZWxhdGlvbiAodmFyaWFuY2U/KSwgc2NhbGFyIHByb2R1Y3QgKi9cbiAgY29uc3QgZnJlcVY6IFZlY3RvciA9IG5ldyBWZWN0b3IoZnJlcUEpO1xuICBjb25zdCBhbHBoYWJldFY6IFZlY3RvciA9IG5ldyBWZWN0b3IoYWxwaGFiZXRBKTtcbiAgcmV0dXJuIHZlY3RvckRvdFByb2R1Y3QoZnJlcVYsIGFscGhhYmV0VikgLyAodmVjdG9yTGVuZ3RoKGZyZXFWKSAqIHZlY3Rvckxlbmd0aChhbHBoYWJldFYpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEFscGhhYmV0KHN0YXRzOiBTZXFDb2xTdGF0cyk6IHN0cmluZyB7XG4gIGNvbnN0IGFscGhhYmV0Q2FuZGlkYXRlczogW3N0cmluZywgU2V0PHN0cmluZz5dW10gPSBbXG4gICAgW0FMUEhBQkVULlBULCBVbml0c0hhbmRsZXIuUGVwdGlkZUZhc3RhQWxwaGFiZXRdLFxuICAgIFtBTFBIQUJFVC5ETkEsIFVuaXRzSGFuZGxlci5EbmFGYXN0YUFscGhhYmV0XSxcbiAgICBbQUxQSEFCRVQuUk5BLCBVbml0c0hhbmRsZXIuUm5hRmFzdGFBbHBoYWJldF0sXG4gIF07XG5cbiAgLy8gQ2FsY3VsYXRlIGxpa2VsaWhvb2RzIGZvciBhbHBoYWJldF9jYW5kaWRhdGVzXG4gIGNvbnN0IGFscGhhYmV0Q2FuZGlkYXRlc1NpbTogbnVtYmVyW10gPSBhbHBoYWJldENhbmRpZGF0ZXMubWFwKFxuICAgIChjKSA9PiBnZXRBbHBoYWJldFNpbWlsYXJpdHkoc3RhdHMuZnJlcSwgY1sxXSkpO1xuICBjb25zdCBtYXhDb3MgPSBNYXRoLm1heCguLi5hbHBoYWJldENhbmRpZGF0ZXNTaW0pO1xuICBjb25zdCBhbHBoYWJldCA9IG1heENvcyA+IDAuNjUgPyBhbHBoYWJldENhbmRpZGF0ZXNbYWxwaGFiZXRDYW5kaWRhdGVzU2ltLmluZGV4T2YobWF4Q29zKV1bMF0gOiAnVU4nO1xuICByZXR1cm4gYWxwaGFiZXQ7XG59XG5cbi8qKiBTZWxlY3RzIGEgc3VpdGFibGUgcGFsZXR0ZSBiYXNlZCBvbiBjb2x1bW4gZGF0YVxuICogQHBhcmFtIHtERy5Db2x1bW59IHNlcUNvbCBDb2x1bW4gdG8gbG9vayBmb3IgYSBwYWxldHRlXG4gKiBAcGFyYW0ge251bWJlcn0gIG1pbkxlbmd0aCBtaW5pbXVtIGxlbmd0aCBvZiBzZXF1ZW5jZSB0byBkZXRlY3QgcGFsZXR0ZSAoZW1wdHkgc3RyaW5ncyBhcmUgYWxsb3dlZClcbiAqIEByZXR1cm4ge1NlcVBhbGV0dGV9IFBhbGV0dGUgY29ycmVzcG9uZGluZyB0byB0aGUgYWxwaGFiZXQgb2YgdGhlIHNlcXVlbmNlcyBpbiB0aGUgY29sdW1uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrVXBQYWxldHRlKHNlcUNvbDogREcuQ29sdW1uLCBtaW5MZW5ndGg6IG51bWJlciA9IDUpOiBTZXFQYWxldHRlIHtcbiAgbGV0IGFscGhhYmV0OiBzdHJpbmc7XG4gIGlmIChzZXFDb2wuc2VtVHlwZSA9PSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpIHtcbiAgICBjb25zdCB1aDogVW5pdHNIYW5kbGVyID0gbmV3IFVuaXRzSGFuZGxlcihzZXFDb2wpO1xuICAgIGFscGhhYmV0ID0gdWguYWxwaGFiZXQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RhdHM6IFNlcUNvbFN0YXRzID0gZ2V0U3RhdHMoc2VxQ29sLCBtaW5MZW5ndGgsIHNwbGl0dGVyQXNGYXN0YSk7XG4gICAgYWxwaGFiZXQgPSBkZXRlY3RBbHBoYWJldChzdGF0cyk7XG4gIH1cblxuICBjb25zdCByZXMgPSBnZXRQYWxldHRlQnlUeXBlKGFscGhhYmV0KTtcbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbGV0dGVCeVR5cGUocGFsZXR0ZVR5cGU6IHN0cmluZyk6IFNlcVBhbGV0dGUge1xuICBzd2l0Y2ggKHBhbGV0dGVUeXBlKSB7XG4gIGNhc2UgJ1BUJzpcbiAgICByZXR1cm4gQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHM7XG4gIGNhc2UgJ05UJzpcbiAgY2FzZSAnRE5BJzpcbiAgY2FzZSAnUk5BJzpcbiAgICByZXR1cm4gTnVjbGVvdGlkZXNQYWxldHRlcy5DaHJvbWF0b2dyYW07XG4gICAgLy8gb3RoZXJcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gVW5rbm93blNlcVBhbGV0dGVzLkNvbG9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrVXBTZXFDb2woZGY6IERHLkRhdGFGcmFtZSk6IERHLkNvbHVtbiB8IG51bGwge1xuICBjb25zdCBzZW1UeXBlQ29sTGlzdCA9IGRmLmNvbHVtbnMuYnlTZW1UeXBlQWxsKERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRSk7XG4gIGxldCByZXNDb2w6IERHLkNvbHVtbiB8IG51bGwgPSBzZW1UeXBlQ29sTGlzdC5maW5kKChjb2wpID0+IHtcbiAgICBjb25zdCB1bml0cyA9IGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUyk7XG4gICAgcmV0dXJuIHVuaXRzID8gdW5pdHMuaW5kZXhPZignTVNBJykgIT09IC0xIDogZmFsc2U7XG4gIH0pID8/IG51bGw7XG4gIGlmICghcmVzQ29sICYmIHNlbVR5cGVDb2xMaXN0Lmxlbmd0aCA+IDApXG4gICAgcmVzQ29sID0gc2VtVHlwZUNvbExpc3RbMF07XG4gIHJldHVybiByZXNDb2w7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notation-converter.d.ts","sourceRoot":"","sources":["notation-converter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAiC,QAAQ,EAAe,YAAY,EAAO,MAAM,iBAAiB,CAAC;AAE1G,iFAAiF;AACjF,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,SAAS,CAA6B;IAE9C,SAAS,KAAK,QAAQ,IAAI,YAAY,CAIrC;IAEM,OAAO,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAE1C,WAAW,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAE9C,MAAM,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAEhD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,mBAAmB;IAkB3B;;;;;;;OAOG;IACI,mBAAmB,CACxB,aAAa,EAAE,MAAM,EACrB,eAAe,GAAE,MAAM,GAAG,IAAW,GACpC,MAAM;IAOT;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IA6B/B;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"notation-converter.d.ts","sourceRoot":"","sources":["notation-converter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAiC,QAAQ,EAAe,YAAY,EAAO,MAAM,iBAAiB,CAAC;AAE1G,iFAAiF;AACjF,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,SAAS,CAA6B;IAE9C,SAAS,KAAK,QAAQ,IAAI,YAAY,CAIrC;IAEM,OAAO,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAE1C,WAAW,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAE9C,MAAM,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAEhD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,mBAAmB;IAkB3B;;;;;;;OAOG;IACI,mBAAmB,CACxB,aAAa,EAAE,MAAM,EACrB,eAAe,GAAE,MAAM,GAAG,IAAW,GACpC,MAAM;IAOT;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IA6B/B;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IAqDnB,OAAO,CAAC,sBAAsB;IAK9B;;;;;OAKG;IACI,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAE,MAAM,GAAG,IAAW,GAAG,EAAE,CAAC,MAAM;gBAsBjE,GAAG,EAAE,EAAE,CAAC,MAAM;CAGlC"}
|
|
@@ -147,16 +147,17 @@ export class NotationConverter extends UnitsHandler {
|
|
|
147
147
|
* SEPARATOR)
|
|
148
148
|
* @return {DG.Column} Converted column
|
|
149
149
|
*/
|
|
150
|
-
convertHelm(tgtNotation, tgtSeparator
|
|
150
|
+
convertHelm(tgtNotation, tgtSeparator, tgtGapSymbol) {
|
|
151
151
|
// This function must not contain calls of isDna() and isRna(), for
|
|
152
152
|
// source helm columns may contain RNA, DNA and PT across different rows
|
|
153
|
-
if (tgtGapSymbol
|
|
153
|
+
if (!tgtGapSymbol) {
|
|
154
154
|
tgtGapSymbol = (this.toFasta(tgtNotation)) ?
|
|
155
155
|
UnitsHandler._defaultGapSymbolsDict.FASTA :
|
|
156
156
|
UnitsHandler._defaultGapSymbolsDict.SEPARATOR;
|
|
157
157
|
}
|
|
158
|
-
if (
|
|
159
|
-
tgtSeparator = this.separator;
|
|
158
|
+
if (!tgtSeparator) {
|
|
159
|
+
tgtSeparator = (this.toFasta(tgtNotation)) ? '' : this.separator;
|
|
160
|
+
}
|
|
160
161
|
const helmWrappersRe = /(R\(|D\(|\)|P)/g;
|
|
161
162
|
const newColumn = this.getNewColumn(tgtNotation);
|
|
162
163
|
// assign the values to the empty column
|
|
@@ -218,8 +219,11 @@ export class NotationConverter extends UnitsHandler {
|
|
|
218
219
|
return this.convertSeparatorToFasta();
|
|
219
220
|
else if (this.isHelm() && this.toFasta(tgtNotation)) // the case of HELM
|
|
220
221
|
return this.convertHelm(tgtNotation);
|
|
221
|
-
else
|
|
222
|
+
else if (this.isHelm() && this.toSeparator(tgtNotation))
|
|
222
223
|
return this.convertHelm(tgtNotation, tgtSeparator);
|
|
224
|
+
else
|
|
225
|
+
throw new Error('Not supported conversion ' +
|
|
226
|
+
`from source notation '${this.notation}' to target notation '${tgtNotation}'.`);
|
|
223
227
|
}
|
|
224
228
|
}
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90YXRpb24tY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm90YXRpb24tY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQTRDLE1BQU0saUJBQWlCLENBQUM7QUFFMUcsaUZBQWlGO0FBQ2pGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZO0lBNlBqRCxZQUFtQixHQUFjO1FBQy9CLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQTdQTCxjQUFTLEdBQXdCLElBQUksQ0FBQztJQThQOUMsQ0FBQztJQTVQRCxJQUFjLFFBQVE7UUFDcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7WUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxPQUFPLENBQUMsY0FBd0IsSUFBYSxPQUFPLGNBQWMsaUNBQW1CLENBQUMsQ0FBQyxDQUFDO0lBRXhGLFdBQVcsQ0FBQyxjQUF3QixJQUFhLE9BQU8sY0FBYyx5Q0FBdUIsQ0FBQyxDQUFDLENBQUM7SUFFaEcsTUFBTSxDQUFDLGNBQXdCLElBQWEsT0FBTyxjQUFjLCtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUU3Rjs7Ozs7O09BTUc7SUFDSyx1QkFBdUIsQ0FBQyxTQUFpQixFQUFFLGlCQUFnQyxJQUFJO1FBQ3JGLElBQUksY0FBYyxLQUFLLElBQUk7WUFDekIsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxzQ0FBb0IsQ0FBQztRQUN4RCxzREFB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O0lBQ3hELENBQUM7Q0FLRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIERvIG5vdCBjaGFuZ2UgdGhlc2UgaW1wb3J0IGxpbmVzIHRvIG1hdGNoIGV4dGVybmFsIG1vZHVsZXMgaW4gd2VicGFjayBjb25maWd1cmF0aW9uICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge1VuaXRzSGFuZGxlcn0gZnJvbSAnLi91bml0cy1oYW5kbGVyJztcbmltcG9ydCB7Z2V0U3BsaXR0ZXJGb3JDb2x1bW4sIGdldFN0YXRzLCBOT1RBVElPTiwgU2VxQ29sU3RhdHMsIFNwbGl0dGVyRnVuYywgVEFHU30gZnJvbSAnLi9tYWNyb21vbGVjdWxlJztcblxuLyoqIENsYXNzIGZvciBoYW5kbGluZyBjb252ZXJzaW9uIG9mIG5vdGF0aW9uIHN5c3RlbXMgaW4gTWFjcm9tb2xlY3VsZSBjb2x1bW5zICovXG5leHBvcnQgY2xhc3MgTm90YXRpb25Db252ZXJ0ZXIgZXh0ZW5kcyBVbml0c0hhbmRsZXIge1xuICBwcml2YXRlIF9zcGxpdHRlcjogU3BsaXR0ZXJGdW5jIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIGdldCBzcGxpdHRlcigpOiBTcGxpdHRlckZ1bmMge1xuICAgIGlmICh0aGlzLl9zcGxpdHRlciA9PT0gbnVsbClcbiAgICAgIHRoaXMuX3NwbGl0dGVyID0gZ2V0U3BsaXR0ZXJGb3JDb2x1bW4odGhpcy5jb2x1bW4pO1xuICAgIHJldHVybiB0aGlzLl9zcGxpdHRlcjtcbiAgfVxuXG4gIHB1YmxpYyB0b0Zhc3RhKHRhcmdldE5vdGF0aW9uOiBOT1RBVElPTik6IGJvb2xlYW4geyByZXR1cm4gdGFyZ2V0Tm90YXRpb24gPT09IE5PVEFUSU9OLkZBU1RBOyB9XG5cbiAgcHVibGljIHRvU2VwYXJhdG9yKHRhcmdldE5vdGF0aW9uOiBOT1RBVElPTik6IGJvb2xlYW4geyByZXR1cm4gdGFyZ2V0Tm90YXRpb24gPT09IE5PVEFUSU9OLlNFUEFSQVRPUjsgfVxuXG4gIHB1YmxpYyB0b0hlbG0odGFyZ2V0Tm90YXRpb246IE5PVEFUSU9OKTogYm9vbGVhbiB7IHJldHVybiB0YXJnZXROb3RhdGlvbiA9PT0gTk9UQVRJT04uSEVMTTsgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgTWFjcm9tb2xlY3VsZSBjb2x1bW4gZnJvbSBGQVNUQSB0byBTRVBBUkFUT1Igbm90YXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlcGFyYXRvciAgQSBzcGVjaWZpYyBzZXBhcmF0b3IgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFzdGFHYXBTeW1ib2wgIEdhcCBzeW1ib2wgaW4gRkFTVEEsICctJyBieSBkZWZhdWx0XG4gICAqIEByZXR1cm4ge0RHLkNvbHVtbn0gICAgICAgIEEgbmV3IGNvbHVtbiBpbiBTRVBBUkFUT1Igbm90YXRpb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydEZhc3RhVG9TZXBhcmF0b3Ioc2VwYXJhdG9yOiBzdHJpbmcsIGZhc3RhR2FwU3ltYm9sOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IERHLkNvbHVtbiB7XG4gICAgaWYgKGZhc3RhR2FwU3ltYm9sID09PSBudWxsKVxuICAgICAgZmFzdGFHYXBTeW1ib2wgPSB0aGlzLmRlZmF1bHRHYXBTeW1ib2w7XG5cbiAgICBjb25zdCBuZXdDb2x1bW4gPSB0aGlzLmdldE5ld0NvbHVtbihOT1RBVElPTi5TRVBBUkFUT1IpO1xuICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBuZXdseSBjcmVhdGVkIGVtcHR5IGNvbHVtblxuICAgIG5ld0NvbHVtbi5pbml0KChpZHg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgZmFzdGFQb2x5bWVyID0gdGhpcy5jb2x1bW4uZ2V0KGlkeCk7XG4gICAgICBjb25zdCBmYXN0YU1vbm9tZXJzQXJyYXkgPSB0aGlzLnNwbGl0dGVyKGZhc3RhUG9seW1lcik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZhc3RhTW9ub21lcnNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZmFzdGFNb25vbWVyc0FycmF5W2ldID09PSBmYXN0YUdhcFN5bWJvbClcbiAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXlbaV0gPSBVbml0c0hhbmRsZXIuX2RlZmF1bHRHYXBTeW1ib2xzRGljdC5TRVBBUkFUT1I7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFzdGFNb25vbWVyc0FycmF5LmpvaW4oc2VwYXJhdG9yKTtcbiAgICB9KTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIE5PVEFUSU9OLlNFUEFSQVRPUik7XG4gICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLnNlcGFyYXRvciwgc2VwYXJhdG9yKTtcbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd3JhcHBlciBzdHJpbmdzIGZvciBIRUxNLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlXG4gICAqIG1hY3JvbW9sZWN1bGUgKHBlcHRpZGUsIEROQSwgUk5BKVxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQXJyYXkgb2Ygd3JhcHBlcnNcbiAgICovXG4gIHByaXZhdGUgZ2V0SGVsbVdyYXBwZXJzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBwcmVmaXggPSAodGhpcy5pc0RuYSgpKSA/ICdETkExeycgOlxuICAgICAgKHRoaXMuaXNSbmEoKSkgPyAnUk5BMXsnIDpcbiAgICAgICAgKHRoaXMuaXNQZXB0aWRlKCkpID8gJ1BFUFRJREUxeycgOlxuICAgICAgICAgICdVbmtub3duJzsgLy8gdGhpcyBjYXNlIHNob3VsZCBiZSBoYW5kbGVkIGFzIGV4Y2VwdGlvbmFsXG5cbiAgICBpZiAocHJlZml4ID09PSAnVW5rbm93bicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05laXRoZXIgcGVwdGlkZSwgbm9yIG51Y2xlb3RpZGUnKTtcblxuICAgIGNvbnN0IHBvc3RmaXggPSAnfSQkJCc7XG4gICAgY29uc3QgbGVmdFdyYXBwZXIgPSAodGhpcy5pc0RuYSgpKSA/ICdEKCcgOlxuICAgICAgKHRoaXMuaXNSbmEoKSkgPyAnUignIDogJyc7IC8vIG5vIHdyYXBwZXIgZm9yIHBlcHRpZGVzXG4gICAgY29uc3QgcmlnaHRXcmFwcGVyID0gKHRoaXMuaXNEbmEoKSB8fCB0aGlzLmlzUm5hKCkpID8gJylQJyA6ICcnOyAvLyBubyB3cmFwcGVyIGZvciBwZXB0aWRlc1xuICAgIHJldHVybiBbcHJlZml4LCBsZWZ0V3JhcHBlciwgcmlnaHRXcmFwcGVyLCBwb3N0Zml4XTtcbiAgfVxuXG4gIC8vIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBjb252ZXJ0aW5nIHN0cmluZ3MgdG8gSEVMTVxuICBwcml2YXRlIGNvbnZlcnRUb0hlbG1IZWxwZXIoXG4gICAgc291cmNlUG9seW1lcjogc3RyaW5nLFxuICAgIHNvdXJjZUdhcFN5bWJvbDogc3RyaW5nLFxuICAgIHByZWZpeDogc3RyaW5nLFxuICAgIGxlZnRXcmFwcGVyOiBzdHJpbmcsXG4gICAgcmlnaHRXcmFwcGVyOiBzdHJpbmcsXG4gICAgcG9zdGZpeDogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbW9ub21lckFycmF5ID0gdGhpcy5zcGxpdHRlcihzb3VyY2VQb2x5bWVyKTtcbiAgICBjb25zdCBtb25vbWVySGVsbUFycmF5OiBzdHJpbmdbXSA9IG1vbm9tZXJBcnJheS5tYXAoKG1tOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtbSA9PT0gc291cmNlR2FwU3ltYm9sKVxuICAgICAgICByZXR1cm4gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuSEVMTTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGAke2xlZnRXcmFwcGVyfSR7bW19JHtyaWdodFdyYXBwZXJ9YDtcbiAgICB9KTtcbiAgICByZXR1cm4gYCR7cHJlZml4fSR7bW9ub21lckhlbG1BcnJheS5qb2luKCcuJyl9JHtwb3N0Zml4fWA7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIHN0cmluZyB3aXRoIFNFUEFSQVRPUi9GQVNUQSBub3RhdGlvbiB0byBIRUxNXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VQb2x5bWVyICBBIHN0cmluZyB0byBiZSBjb252ZXJ0ZWRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBzb3VyY2VHYXBTeW1ib2wgIEFuIG9wdGlvbmFsIGdhcCBzeW1ib2wsIHNldCB0b1xuICAgKiBkZWZhdWx0IHZhbHVlcyAoJy0nIGZvciBGQVNUQSBhbmQgJycgZm9yIFNFUEFSQVRPUikgdW5sZXNzIHNwZWNpZmllZFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICBUaGUgdGFyZ2V0IEhFTE0gc3RyaW5nXG4gICAqL1xuICBwdWJsaWMgY29udmVydFN0cmluZ1RvSGVsbShcbiAgICBzb3VyY2VQb2x5bWVyOiBzdHJpbmcsXG4gICAgc291cmNlR2FwU3ltYm9sOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICApOiBzdHJpbmcge1xuICAgIGlmIChzb3VyY2VHYXBTeW1ib2wgPT09IG51bGwpXG4gICAgICBzb3VyY2VHYXBTeW1ib2wgPSB0aGlzLmRlZmF1bHRHYXBTeW1ib2w7XG4gICAgY29uc3QgW3ByZWZpeCwgbGVmdFdyYXBwZXIsIHJpZ2h0V3JhcHBlciwgcG9zdGZpeF0gPSB0aGlzLmdldEhlbG1XcmFwcGVycygpO1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb0hlbG1IZWxwZXIoc291cmNlUG9seW1lciwgc291cmNlR2FwU3ltYm9sLCBwcmVmaXgsIGxlZnRXcmFwcGVyLCByaWdodFdyYXBwZXIsIHBvc3RmaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBjb2x1bW4gdG8gSEVMTVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHNvdXJjZUdhcFN5bWJvbFxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRUb0hlbG0oc291cmNlR2FwU3ltYm9sOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IERHLkNvbHVtbiB7XG4gICAgaWYgKHNvdXJjZUdhcFN5bWJvbCA9PT0gbnVsbClcbiAgICAgIHNvdXJjZUdhcFN5bWJvbCA9IHRoaXMuZGVmYXVsdEdhcFN5bWJvbDtcblxuICAgIGNvbnN0IFtwcmVmaXgsIGxlZnRXcmFwcGVyLCByaWdodFdyYXBwZXIsIHBvc3RmaXhdID0gdGhpcy5nZXRIZWxtV3JhcHBlcnMoKTtcblxuICAgIGNvbnN0IG5ld0NvbHVtbiA9IHRoaXMuZ2V0TmV3Q29sdW1uKE5PVEFUSU9OLkhFTE0pO1xuICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBjb2x1bW5cbiAgICBuZXdDb2x1bW4uaW5pdCgoaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZVBvbHltZXIgPSB0aGlzLmNvbHVtbi5nZXQoaWR4KTtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb0hlbG1IZWxwZXIoc291cmNlUG9seW1lciwgc291cmNlR2FwU3ltYm9sISwgcHJlZml4LCBsZWZ0V3JhcHBlciwgcmlnaHRXcmFwcGVyLCBwb3N0Zml4KTtcbiAgICB9KTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIE5PVEFUSU9OLkhFTE0pO1xuICAgIHJldHVybiBuZXdDb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBTRVBBUkFUT1IgY29sdW1uIHRvIEZBU1RBIG5vdGF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gZmFzdGFHYXBTeW1ib2wgT3B0aW9uYWwgZ2FwIHN5bWJvbCBmb3IgRkFTVEFcbiAgICogQHJldHVybiB7REcuQ29sdW1ufSAgQ29udmVydGVkIGNvbHVtblxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0U2VwYXJhdG9yVG9GYXN0YShmYXN0YUdhcFN5bWJvbDogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBERy5Db2x1bW4ge1xuICAgIGlmIChmYXN0YUdhcFN5bWJvbCA9PT0gbnVsbClcbiAgICAgIGZhc3RhR2FwU3ltYm9sID0gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuRkFTVEE7XG5cbiAgICBjb25zdCBuZXdDb2x1bW4gPSB0aGlzLmdldE5ld0NvbHVtbihOT1RBVElPTi5GQVNUQSk7XG4gICAgLy8gYXNzaWduIHRoZSB2YWx1ZXMgdG8gdGhlIGVtcHR5IGNvbHVtblxuICAgIG5ld0NvbHVtbi5pbml0KChpZHg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgc2VwYXJhdG9yUG9seW1lciA9IHRoaXMuY29sdW1uLmdldChpZHgpO1xuICAgICAgLy8gaXRlbXMgY2FuIGJlIG1vbm9tZXJzIG9yIHNlcGFyYXRvcnNcbiAgICAgIGNvbnN0IHNlcGFyYXRvckl0ZW1zQXJyYXkgPSB0aGlzLnNwbGl0dGVyKHNlcGFyYXRvclBvbHltZXIpO1xuICAgICAgY29uc3QgZmFzdGFNb25vbWVyc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXBhcmF0b3JJdGVtc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzZXBhcmF0b3JJdGVtc0FycmF5W2ldO1xuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXkucHVzaChmYXN0YUdhcFN5bWJvbCEpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIHRoZSBjYXNlIG9mIGEgbXVsdGktY2hhcmFjdGVyIG1vbm9tZXJcbiAgICAgICAgICBjb25zdCBtb25vbWVyID0gJ1snICsgaXRlbSArICddJztcbiAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXkucHVzaChtb25vbWVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhc3RhTW9ub21lcnNBcnJheS5qb2luKCcnKTtcbiAgICB9KTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIE5PVEFUSU9OLkZBU1RBKTtcbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb252ZXJ0IEhFTE0gY29sdW1uIHRvIEZBU1RBL1NFUEFSQVRPUlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGd0Tm90YXRpb24gICAgVGFyZ2V0IG5vdGF0aW9uOiBGQVNUQSBvciBTRVBBUkFUT1JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRndFNlcGFyYXRvciAgIE9wdGlvbmFsIHRhcmdldCBzZXBhcmF0b3IgKGZvciBIRUxNIC0+XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gdGd0R2FwU3ltYm9sICAgT3B0aW9uYWwgdGFyZ2V0IGdhcCBzeW1ib2xcbiAgICogU0VQQVJBVE9SKVxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59IENvbnZlcnRlZCBjb2x1bW5cbiAgICovXG4gIHByaXZhdGUgY29udmVydEhlbG0oXG4gICAgdGd0Tm90YXRpb246IHN0cmluZyxcbiAgICB0Z3RTZXBhcmF0b3I6IHN0cmluZyA9ICcnLFxuICAgIHRndEdhcFN5bWJvbDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgKTogREcuQ29sdW1uIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGNvbnRhaW4gY2FsbHMgb2YgaXNEbmEoKSBhbmQgaXNSbmEoKSwgZm9yXG4gICAgLy8gc291cmNlIGhlbG0gY29sdW1ucyBtYXkgY29udGFpbiBSTkEsIEROQSBhbmQgUFQgYWNyb3NzIGRpZmZlcmVudCByb3dzXG4gICAgaWYgKHRndEdhcFN5bWJvbCA9PT0gbnVsbCkge1xuICAgICAgdGd0R2FwU3ltYm9sID0gKHRoaXMudG9GYXN0YSh0Z3ROb3RhdGlvbiBhcyBOT1RBVElPTikpID9cbiAgICAgICAgVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuRkFTVEEgOlxuICAgICAgICBVbml0c0hhbmRsZXIuX2RlZmF1bHRHYXBTeW1ib2xzRGljdC5TRVBBUkFUT1I7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9TZXBhcmF0b3IodGd0Tm90YXRpb24gYXMgTk9UQVRJT04pICYmIHRndFNlcGFyYXRvciA9PT0gJycpXG4gICAgICB0Z3RTZXBhcmF0b3IgPSB0aGlzLnNlcGFyYXRvcjtcblxuICAgIGNvbnN0IGhlbG1XcmFwcGVyc1JlID0gLyhSXFwofERcXCh8XFwpfFApL2c7XG4gICAgY29uc3QgbmV3Q29sdW1uID0gdGhpcy5nZXROZXdDb2x1bW4odGd0Tm90YXRpb24gYXMgTk9UQVRJT04pO1xuICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBjb2x1bW5cbiAgICBuZXdDb2x1bW4uaW5pdCgoaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGhlbG1Qb2x5bWVyID0gdGhpcy5jb2x1bW4uZ2V0KGlkeCk7XG5cbiAgICAgIC8vIHdlIGNhbm5vdCB1c2UgaXNEbmEoKSBvciBpc1JuYSgpIGJlY2F1c2Ugc291cmNlIGhlbG0gY29sdW1ucyBjYW5cbiAgICAgIC8vIGNvbnRhaW4gRE5BLCBSTkEgYW5kIFBUIGluIGRpZmZlcmVudCBjZWxscywgc28gdGhlIGNvcnJlc3BvbmRpbmdcbiAgICAgIC8vIHRhZ3MgY2Fubm90IGJlIHNldCBmb3IgdGhlIHdob2xlIGNvbHVtblxuICAgICAgY29uc3QgaXNOdWNsZW90aWRlID0gaGVsbVBvbHltZXIuc3RhcnRzV2l0aCgnRE5BJykgfHwgaGVsbVBvbHltZXIuc3RhcnRzV2l0aCgnUk5BJyk7XG5cbiAgICAgIC8vIGl0ZW1zIGNhbiBiZSBtb25vbWVycyBvciBoZWxtc1xuICAgICAgY29uc3QgaGVsbUl0ZW1zQXJyYXkgPSB0aGlzLnNwbGl0dGVyKGhlbG1Qb2x5bWVyKTtcbiAgICAgIGNvbnN0IHRndE1vbm9tZXJzQXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlbG1JdGVtc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBpdGVtID0gaGVsbUl0ZW1zQXJyYXlbaV07XG4gICAgICAgIGlmIChpc051Y2xlb3RpZGUpXG4gICAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZShoZWxtV3JhcHBlcnNSZSwgJycpO1xuICAgICAgICBpZiAoaXRlbSA9PT0gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuSEVMTSkge1xuICAgICAgICAgIHRndE1vbm9tZXJzQXJyYXkucHVzaCh0Z3RHYXBTeW1ib2whKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRvRmFzdGEodGd0Tm90YXRpb24gYXMgTk9UQVRJT04pICYmIGl0ZW0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIHRoZSBjYXNlIG9mIGEgbXVsdGktY2hhcmFjdGVyIG1vbm9tZXIgY29udmVydGVkIHRvIEZBU1RBXG4gICAgICAgICAgY29uc3QgbW9ub21lciA9ICdbJyArIGl0ZW0gKyAnXSc7XG4gICAgICAgICAgdGd0TW9ub21lcnNBcnJheS5wdXNoKG1vbm9tZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRndE1vbm9tZXJzQXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRndE1vbm9tZXJzQXJyYXkuam9pbih0Z3RTZXBhcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLy8gVEFHUy5hbGlnbmVkIGlzIG1hbmRhdG9yeSBmb3IgY29sdW1ucyBvZiBOT1RBVElPTi5GQVNUQSBhbmQgTk9UQVRJT04uU0VQQVJBVE9SXG4gICAgY29uc3Qgc3BsaXR0ZXI6IFNwbGl0dGVyRnVuYyA9IGdldFNwbGl0dGVyRm9yQ29sdW1uKG5ld0NvbHVtbik7XG4gICAgY29uc3Qgc3RhdHM6IFNlcUNvbFN0YXRzID0gZ2V0U3RhdHMobmV3Q29sdW1uLCA1LCBzcGxpdHRlcik7XG4gICAgY29uc3QgYWxpZ25lZCA9IHN0YXRzLnNhbWVMZW5ndGggPyAnU0VRLk1TQScgOiAnU0VRJztcbiAgICBuZXdDb2x1bW4uc2V0VGFnKFRBR1MuYWxpZ25lZCwgYWxpZ25lZCk7XG5cbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SGVsbVRvU2VwYXJhdG9yKCk6IERHLkNvbHVtbiB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50YXRpb3JldHVybiB0aGlzLmdldE5ld0NvbHVtbigpO1xuICAgIHJldHVybiB0aGlzLmdldE5ld0NvbHVtbihOT1RBVElPTi5TRVBBUkFUT1IpO1xuICB9XG5cbiAgLyoqIERpc3BhdGNoZXIgbWV0aG9kIGZvciBub3RhdGlvbiBjb252ZXJzaW9uXG4gICAqXG4gICAqIEBwYXJhbSB7Tk9UQVRJT059IHRndE5vdGF0aW9uICAgTm90YXRpb24gd2Ugd2FudCB0byBjb252ZXJ0IHRvXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gdGd0U2VwYXJhdG9yICAgUG9zc2libGUgc2VwYXJhdG9yXG4gICAqIEByZXR1cm4ge0RHLkNvbHVtbn0gICAgICAgICAgICAgICAgQ29udmVydGVkIGNvbHVtblxuICAgKi9cbiAgcHVibGljIGNvbnZlcnQodGd0Tm90YXRpb246IE5PVEFUSU9OLCB0Z3RTZXBhcmF0b3I6IHN0cmluZyB8IG51bGwgPSBudWxsKTogREcuQ29sdW1uIHtcbiAgICAvLyBwb3NzaWJsZSBleGNlcHRpb25zXG4gICAgaWYgKHRoaXMubm90YXRpb24gPT09IHRndE5vdGF0aW9uKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0Z3Qgbm90YXRpb24gaXMgaW52YWxpZCcpO1xuICAgIGlmICh0aGlzLnRvU2VwYXJhdG9yKHRndE5vdGF0aW9uKSAmJiB0Z3RTZXBhcmF0b3IgPT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RndCBzZXBhcmF0b3IgaXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgaWYgKHRoaXMuaXNGYXN0YSgpICYmIHRoaXMudG9TZXBhcmF0b3IodGd0Tm90YXRpb24pICYmIHRndFNlcGFyYXRvciAhPT0gbnVsbClcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRGYXN0YVRvU2VwYXJhdG9yKHRndFNlcGFyYXRvcik7XG4gICAgZWxzZSBpZiAoKHRoaXMuaXNGYXN0YSgpIHx8IHRoaXMuaXNTZXBhcmF0b3IoKSkgJiYgdGhpcy50b0hlbG0odGd0Tm90YXRpb24pKVxuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvSGVsbSgpO1xuICAgIGVsc2UgaWYgKHRoaXMuaXNTZXBhcmF0b3IoKSAmJiB0aGlzLnRvRmFzdGEodGd0Tm90YXRpb24pKVxuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFNlcGFyYXRvclRvRmFzdGEoKTtcbiAgICBlbHNlIGlmICh0aGlzLmlzSGVsbSgpICYmIHRoaXMudG9GYXN0YSh0Z3ROb3RhdGlvbikpIC8vIHRoZSBjYXNlIG9mIEhFTE1cbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRIZWxtKHRndE5vdGF0aW9uKTtcbiAgICBlbHNlIC8vIHRoaXMuaXNIZWxtKCkgJiYgdGhpcy50b1NlcGFyYXRvcih0Z3ROb3RhdGlvbilcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRIZWxtKHRndE5vdGF0aW9uLCB0Z3RTZXBhcmF0b3IhKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb2w6IERHLkNvbHVtbikge1xuICAgIHN1cGVyKGNvbCk7XG4gIH1cbn1cbiJdfQ==
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90YXRpb24tY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm90YXRpb24tY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQTRDLE1BQU0saUJBQWlCLENBQUM7QUFFMUcsaUZBQWlGO0FBQ2pGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZO0lBNlBqRCxZQUFtQixHQUFjO1FBQy9CLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQTdQTCxjQUFTLEdBQXdCLElBQUksQ0FBQztJQThQOUMsQ0FBQztJQTVQRCxJQUFjLFFBQVE7UUFDcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7WUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxPQUFPLENBQUMsY0FBd0IsSUFBYSxPQUFPLGNBQWMsaUNBQW1CLENBQUMsQ0FBQyxDQUFDO0lBRXhGLFdBQVcsQ0FBQyxjQUF3QixJQUFhLE9BQU8sY0FBYyx5Q0FBdUIsQ0FBQyxDQUFDLENBQUM7SUFFaEcsTUFBTSxDQUFDLGNBQXdCLElBQWEsT0FBTyxjQUFjLCtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUU3Rjs7Ozs7O09BTUc7SUFDSyx1QkFBdUIsQ0FBQyxTQUFpQixFQUFFLGlCQUFnQyxJQUFJO1FBQ3JGLElBQUksY0FBYyxLQUFLLElBQUk7WUFDekIsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxzQ0FBb0IsQ0FBQztRQUN4RCxzREFB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Q0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQ3JELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsWUFBYSxDQUFDLENBQUM7O1lBRXBELE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCO2dCQUN6Qyx5QkFBeUIsSUFBSSxDQUFDLFFBQVEseUJBQXlCLFdBQVcsSUFBSSxDQUFDLENBQUM7SUFDdEYsQ0FBQztDQUtGIiwic291cmNlc0NvbnRlbnQiOlsiLyogRG8gbm90IGNoYW5nZSB0aGVzZSBpbXBvcnQgbGluZXMgdG8gbWF0Y2ggZXh0ZXJuYWwgbW9kdWxlcyBpbiB3ZWJwYWNrIGNvbmZpZ3VyYXRpb24gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB7VW5pdHNIYW5kbGVyfSBmcm9tICcuL3VuaXRzLWhhbmRsZXInO1xuaW1wb3J0IHtnZXRTcGxpdHRlckZvckNvbHVtbiwgZ2V0U3RhdHMsIE5PVEFUSU9OLCBTZXFDb2xTdGF0cywgU3BsaXR0ZXJGdW5jLCBUQUdTfSBmcm9tICcuL21hY3JvbW9sZWN1bGUnO1xuXG4vKiogQ2xhc3MgZm9yIGhhbmRsaW5nIGNvbnZlcnNpb24gb2Ygbm90YXRpb24gc3lzdGVtcyBpbiBNYWNyb21vbGVjdWxlIGNvbHVtbnMgKi9cbmV4cG9ydCBjbGFzcyBOb3RhdGlvbkNvbnZlcnRlciBleHRlbmRzIFVuaXRzSGFuZGxlciB7XG4gIHByaXZhdGUgX3NwbGl0dGVyOiBTcGxpdHRlckZ1bmMgfCBudWxsID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgZ2V0IHNwbGl0dGVyKCk6IFNwbGl0dGVyRnVuYyB7XG4gICAgaWYgKHRoaXMuX3NwbGl0dGVyID09PSBudWxsKVxuICAgICAgdGhpcy5fc3BsaXR0ZXIgPSBnZXRTcGxpdHRlckZvckNvbHVtbih0aGlzLmNvbHVtbik7XG4gICAgcmV0dXJuIHRoaXMuX3NwbGl0dGVyO1xuICB9XG5cbiAgcHVibGljIHRvRmFzdGEodGFyZ2V0Tm90YXRpb246IE5PVEFUSU9OKTogYm9vbGVhbiB7IHJldHVybiB0YXJnZXROb3RhdGlvbiA9PT0gTk9UQVRJT04uRkFTVEE7IH1cblxuICBwdWJsaWMgdG9TZXBhcmF0b3IodGFyZ2V0Tm90YXRpb246IE5PVEFUSU9OKTogYm9vbGVhbiB7IHJldHVybiB0YXJnZXROb3RhdGlvbiA9PT0gTk9UQVRJT04uU0VQQVJBVE9SOyB9XG5cbiAgcHVibGljIHRvSGVsbSh0YXJnZXROb3RhdGlvbjogTk9UQVRJT04pOiBib29sZWFuIHsgcmV0dXJuIHRhcmdldE5vdGF0aW9uID09PSBOT1RBVElPTi5IRUxNOyB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBNYWNyb21vbGVjdWxlIGNvbHVtbiBmcm9tIEZBU1RBIHRvIFNFUEFSQVRPUiBub3RhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yICBBIHNwZWNpZmljIHNlcGFyYXRvciB0byBiZSB1c2VkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYXN0YUdhcFN5bWJvbCAgR2FwIHN5bWJvbCBpbiBGQVNUQSwgJy0nIGJ5IGRlZmF1bHRcbiAgICogQHJldHVybiB7REcuQ29sdW1ufSAgICAgICAgQSBuZXcgY29sdW1uIGluIFNFUEFSQVRPUiBub3RhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0RmFzdGFUb1NlcGFyYXRvcihzZXBhcmF0b3I6IHN0cmluZywgZmFzdGFHYXBTeW1ib2w6IHN0cmluZyB8IG51bGwgPSBudWxsKTogREcuQ29sdW1uIHtcbiAgICBpZiAoZmFzdGFHYXBTeW1ib2wgPT09IG51bGwpXG4gICAgICBmYXN0YUdhcFN5bWJvbCA9IHRoaXMuZGVmYXVsdEdhcFN5bWJvbDtcblxuICAgIGNvbnN0IG5ld0NvbHVtbiA9IHRoaXMuZ2V0TmV3Q29sdW1uKE5PVEFUSU9OLlNFUEFSQVRPUik7XG4gICAgLy8gYXNzaWduIHRoZSB2YWx1ZXMgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgZW1wdHkgY29sdW1uXG4gICAgbmV3Q29sdW1uLmluaXQoKGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBmYXN0YVBvbHltZXIgPSB0aGlzLmNvbHVtbi5nZXQoaWR4KTtcbiAgICAgIGNvbnN0IGZhc3RhTW9ub21lcnNBcnJheSA9IHRoaXMuc3BsaXR0ZXIoZmFzdGFQb2x5bWVyKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmFzdGFNb25vbWVyc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChmYXN0YU1vbm9tZXJzQXJyYXlbaV0gPT09IGZhc3RhR2FwU3ltYm9sKVxuICAgICAgICAgIGZhc3RhTW9ub21lcnNBcnJheVtpXSA9IFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LlNFUEFSQVRPUjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYXN0YU1vbm9tZXJzQXJyYXkuam9pbihzZXBhcmF0b3IpO1xuICAgIH0pO1xuICAgIG5ld0NvbHVtbi5zZXRUYWcoREcuVEFHUy5VTklUUywgTk9UQVRJT04uU0VQQVJBVE9SKTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKFRBR1Muc2VwYXJhdG9yLCBzZXBhcmF0b3IpO1xuICAgIHJldHVybiBuZXdDb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3cmFwcGVyIHN0cmluZ3MgZm9yIEhFTE0sIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0aGVcbiAgICogbWFjcm9tb2xlY3VsZSAocGVwdGlkZSwgRE5BLCBSTkEpXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBcnJheSBvZiB3cmFwcGVyc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRIZWxtV3JhcHBlcnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHByZWZpeCA9ICh0aGlzLmlzRG5hKCkpID8gJ0ROQTF7JyA6XG4gICAgICAodGhpcy5pc1JuYSgpKSA/ICdSTkExeycgOlxuICAgICAgICAodGhpcy5pc1BlcHRpZGUoKSkgPyAnUEVQVElERTF7JyA6XG4gICAgICAgICAgJ1Vua25vd24nOyAvLyB0aGlzIGNhc2Ugc2hvdWxkIGJlIGhhbmRsZWQgYXMgZXhjZXB0aW9uYWxcblxuICAgIGlmIChwcmVmaXggPT09ICdVbmtub3duJylcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmVpdGhlciBwZXB0aWRlLCBub3IgbnVjbGVvdGlkZScpO1xuXG4gICAgY29uc3QgcG9zdGZpeCA9ICd9JCQkJztcbiAgICBjb25zdCBsZWZ0V3JhcHBlciA9ICh0aGlzLmlzRG5hKCkpID8gJ0QoJyA6XG4gICAgICAodGhpcy5pc1JuYSgpKSA/ICdSKCcgOiAnJzsgLy8gbm8gd3JhcHBlciBmb3IgcGVwdGlkZXNcbiAgICBjb25zdCByaWdodFdyYXBwZXIgPSAodGhpcy5pc0RuYSgpIHx8IHRoaXMuaXNSbmEoKSkgPyAnKVAnIDogJyc7IC8vIG5vIHdyYXBwZXIgZm9yIHBlcHRpZGVzXG4gICAgcmV0dXJuIFtwcmVmaXgsIGxlZnRXcmFwcGVyLCByaWdodFdyYXBwZXIsIHBvc3RmaXhdO1xuICB9XG5cbiAgLy8gQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbnZlcnRpbmcgc3RyaW5ncyB0byBIRUxNXG4gIHByaXZhdGUgY29udmVydFRvSGVsbUhlbHBlcihcbiAgICBzb3VyY2VQb2x5bWVyOiBzdHJpbmcsXG4gICAgc291cmNlR2FwU3ltYm9sOiBzdHJpbmcsXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgbGVmdFdyYXBwZXI6IHN0cmluZyxcbiAgICByaWdodFdyYXBwZXI6IHN0cmluZyxcbiAgICBwb3N0Zml4OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb25vbWVyQXJyYXkgPSB0aGlzLnNwbGl0dGVyKHNvdXJjZVBvbHltZXIpO1xuICAgIGNvbnN0IG1vbm9tZXJIZWxtQXJyYXk6IHN0cmluZ1tdID0gbW9ub21lckFycmF5Lm1hcCgobW06IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1tID09PSBzb3VyY2VHYXBTeW1ib2wpXG4gICAgICAgIHJldHVybiBVbml0c0hhbmRsZXIuX2RlZmF1bHRHYXBTeW1ib2xzRGljdC5IRUxNO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gYCR7bGVmdFdyYXBwZXJ9JHttbX0ke3JpZ2h0V3JhcHBlcn1gO1xuICAgIH0pO1xuICAgIHJldHVybiBgJHtwcmVmaXh9JHttb25vbWVySGVsbUFycmF5LmpvaW4oJy4nKX0ke3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgc3RyaW5nIHdpdGggU0VQQVJBVE9SL0ZBU1RBIG5vdGF0aW9uIHRvIEhFTE1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVBvbHltZXIgIEEgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHNvdXJjZUdhcFN5bWJvbCAgQW4gb3B0aW9uYWwgZ2FwIHN5bWJvbCwgc2V0IHRvXG4gICAqIGRlZmF1bHQgdmFsdWVzICgnLScgZm9yIEZBU1RBIGFuZCAnJyBmb3IgU0VQQVJBVE9SKSB1bmxlc3Mgc3BlY2lmaWVkXG4gICAqIEByZXR1cm4ge3N0cmluZ30gIFRoZSB0YXJnZXQgSEVMTSBzdHJpbmdcbiAgICovXG4gIHB1YmxpYyBjb252ZXJ0U3RyaW5nVG9IZWxtKFxuICAgIHNvdXJjZVBvbHltZXI6IHN0cmluZyxcbiAgICBzb3VyY2VHYXBTeW1ib2w6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKHNvdXJjZUdhcFN5bWJvbCA9PT0gbnVsbClcbiAgICAgIHNvdXJjZUdhcFN5bWJvbCA9IHRoaXMuZGVmYXVsdEdhcFN5bWJvbDtcbiAgICBjb25zdCBbcHJlZml4LCBsZWZ0V3JhcHBlciwgcmlnaHRXcmFwcGVyLCBwb3N0Zml4XSA9IHRoaXMuZ2V0SGVsbVdyYXBwZXJzKCk7XG4gICAgcmV0dXJuIHRoaXMuY29udmVydFRvSGVsbUhlbHBlcihzb3VyY2VQb2x5bWVyLCBzb3VyY2VHYXBTeW1ib2wsIHByZWZpeCwgbGVmdFdyYXBwZXIsIHJpZ2h0V3JhcHBlciwgcG9zdGZpeCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIGNvbHVtbiB0byBIRUxNXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gc291cmNlR2FwU3ltYm9sXG4gICAqIEByZXR1cm4ge0RHLkNvbHVtbn1cbiAgICovXG4gIHByaXZhdGUgY29udmVydFRvSGVsbShzb3VyY2VHYXBTeW1ib2w6IHN0cmluZyB8IG51bGwgPSBudWxsKTogREcuQ29sdW1uIHtcbiAgICBpZiAoc291cmNlR2FwU3ltYm9sID09PSBudWxsKVxuICAgICAgc291cmNlR2FwU3ltYm9sID0gdGhpcy5kZWZhdWx0R2FwU3ltYm9sO1xuXG4gICAgY29uc3QgW3ByZWZpeCwgbGVmdFdyYXBwZXIsIHJpZ2h0V3JhcHBlciwgcG9zdGZpeF0gPSB0aGlzLmdldEhlbG1XcmFwcGVycygpO1xuXG4gICAgY29uc3QgbmV3Q29sdW1uID0gdGhpcy5nZXROZXdDb2x1bW4oTk9UQVRJT04uSEVMTSk7XG4gICAgLy8gYXNzaWduIHRoZSB2YWx1ZXMgdG8gdGhlIGVtcHR5IGNvbHVtblxuICAgIG5ld0NvbHVtbi5pbml0KChpZHg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgc291cmNlUG9seW1lciA9IHRoaXMuY29sdW1uLmdldChpZHgpO1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvSGVsbUhlbHBlcihzb3VyY2VQb2x5bWVyLCBzb3VyY2VHYXBTeW1ib2whLCBwcmVmaXgsIGxlZnRXcmFwcGVyLCByaWdodFdyYXBwZXIsIHBvc3RmaXgpO1xuICAgIH0pO1xuICAgIG5ld0NvbHVtbi5zZXRUYWcoREcuVEFHUy5VTklUUywgTk9UQVRJT04uSEVMTSk7XG4gICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IFNFUEFSQVRPUiBjb2x1bW4gdG8gRkFTVEEgbm90YXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBmYXN0YUdhcFN5bWJvbCBPcHRpb25hbCBnYXAgc3ltYm9sIGZvciBGQVNUQVxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59ICBDb252ZXJ0ZWQgY29sdW1uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRTZXBhcmF0b3JUb0Zhc3RhKGZhc3RhR2FwU3ltYm9sOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IERHLkNvbHVtbiB7XG4gICAgaWYgKGZhc3RhR2FwU3ltYm9sID09PSBudWxsKVxuICAgICAgZmFzdGFHYXBTeW1ib2wgPSBVbml0c0hhbmRsZXIuX2RlZmF1bHRHYXBTeW1ib2xzRGljdC5GQVNUQTtcblxuICAgIGNvbnN0IG5ld0NvbHVtbiA9IHRoaXMuZ2V0TmV3Q29sdW1uKE5PVEFUSU9OLkZBU1RBKTtcbiAgICAvLyBhc3NpZ24gdGhlIHZhbHVlcyB0byB0aGUgZW1wdHkgY29sdW1uXG4gICAgbmV3Q29sdW1uLmluaXQoKGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBzZXBhcmF0b3JQb2x5bWVyID0gdGhpcy5jb2x1bW4uZ2V0KGlkeCk7XG4gICAgICAvLyBpdGVtcyBjYW4gYmUgbW9ub21lcnMgb3Igc2VwYXJhdG9yc1xuICAgICAgY29uc3Qgc2VwYXJhdG9ySXRlbXNBcnJheSA9IHRoaXMuc3BsaXR0ZXIoc2VwYXJhdG9yUG9seW1lcik7XG4gICAgICBjb25zdCBmYXN0YU1vbm9tZXJzQXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcGFyYXRvckl0ZW1zQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNlcGFyYXRvckl0ZW1zQXJyYXlbaV07XG4gICAgICAgIGlmIChpdGVtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGZhc3RhTW9ub21lcnNBcnJheS5wdXNoKGZhc3RhR2FwU3ltYm9sISk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gdGhlIGNhc2Ugb2YgYSBtdWx0aS1jaGFyYWN0ZXIgbW9ub21lclxuICAgICAgICAgIGNvbnN0IG1vbm9tZXIgPSAnWycgKyBpdGVtICsgJ10nO1xuICAgICAgICAgIGZhc3RhTW9ub21lcnNBcnJheS5wdXNoKG1vbm9tZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZhc3RhTW9ub21lcnNBcnJheS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFzdGFNb25vbWVyc0FycmF5LmpvaW4oJycpO1xuICAgIH0pO1xuICAgIG5ld0NvbHVtbi5zZXRUYWcoREcuVEFHUy5VTklUUywgTk9UQVRJT04uRkFTVEEpO1xuICAgIHJldHVybiBuZXdDb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogIENvbnZlcnQgSEVMTSBjb2x1bW4gdG8gRkFTVEEvU0VQQVJBVE9SXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0Z3ROb3RhdGlvbiAgICBUYXJnZXQgbm90YXRpb246IEZBU1RBIG9yIFNFUEFSQVRPUlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGd0U2VwYXJhdG9yICAgT3B0aW9uYWwgdGFyZ2V0IHNlcGFyYXRvciAoZm9yIEhFTE0gLT5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSB0Z3RHYXBTeW1ib2wgICBPcHRpb25hbCB0YXJnZXQgZ2FwIHN5bWJvbFxuICAgKiBTRVBBUkFUT1IpXG4gICAqIEByZXR1cm4ge0RHLkNvbHVtbn0gQ29udmVydGVkIGNvbHVtblxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0SGVsbSh0Z3ROb3RhdGlvbjogc3RyaW5nLCB0Z3RTZXBhcmF0b3I/OiBzdHJpbmcsIHRndEdhcFN5bWJvbD86IHN0cmluZyk6IERHLkNvbHVtbiB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBjb250YWluIGNhbGxzIG9mIGlzRG5hKCkgYW5kIGlzUm5hKCksIGZvclxuICAgIC8vIHNvdXJjZSBoZWxtIGNvbHVtbnMgbWF5IGNvbnRhaW4gUk5BLCBETkEgYW5kIFBUIGFjcm9zcyBkaWZmZXJlbnQgcm93c1xuICAgIGlmICghdGd0R2FwU3ltYm9sKSB7XG4gICAgICB0Z3RHYXBTeW1ib2wgPSAodGhpcy50b0Zhc3RhKHRndE5vdGF0aW9uIGFzIE5PVEFUSU9OKSkgP1xuICAgICAgICBVbml0c0hhbmRsZXIuX2RlZmF1bHRHYXBTeW1ib2xzRGljdC5GQVNUQSA6XG4gICAgICAgIFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LlNFUEFSQVRPUjtcbiAgICB9XG5cbiAgICBpZiAoIXRndFNlcGFyYXRvcikge1xuICAgICAgdGd0U2VwYXJhdG9yID0gKHRoaXMudG9GYXN0YSh0Z3ROb3RhdGlvbiBhcyBOT1RBVElPTikpID8gJycgOiB0aGlzLnNlcGFyYXRvcjtcbiAgICB9XG5cbiAgICBjb25zdCBoZWxtV3JhcHBlcnNSZSA9IC8oUlxcKHxEXFwofFxcKXxQKS9nO1xuICAgIGNvbnN0IG5ld0NvbHVtbiA9IHRoaXMuZ2V0TmV3Q29sdW1uKHRndE5vdGF0aW9uIGFzIE5PVEFUSU9OKTtcbiAgICAvLyBhc3NpZ24gdGhlIHZhbHVlcyB0byB0aGUgZW1wdHkgY29sdW1uXG4gICAgbmV3Q29sdW1uLmluaXQoKGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBoZWxtUG9seW1lciA9IHRoaXMuY29sdW1uLmdldChpZHgpO1xuXG4gICAgICAvLyB3ZSBjYW5ub3QgdXNlIGlzRG5hKCkgb3IgaXNSbmEoKSBiZWNhdXNlIHNvdXJjZSBoZWxtIGNvbHVtbnMgY2FuXG4gICAgICAvLyBjb250YWluIEROQSwgUk5BIGFuZCBQVCBpbiBkaWZmZXJlbnQgY2VsbHMsIHNvIHRoZSBjb3JyZXNwb25kaW5nXG4gICAgICAvLyB0YWdzIGNhbm5vdCBiZSBzZXQgZm9yIHRoZSB3aG9sZSBjb2x1bW5cbiAgICAgIGNvbnN0IGlzTnVjbGVvdGlkZSA9IGhlbG1Qb2x5bWVyLnN0YXJ0c1dpdGgoJ0ROQScpIHx8IGhlbG1Qb2x5bWVyLnN0YXJ0c1dpdGgoJ1JOQScpO1xuXG4gICAgICAvLyBpdGVtcyBjYW4gYmUgbW9ub21lcnMgb3IgaGVsbXNcbiAgICAgIGNvbnN0IGhlbG1JdGVtc0FycmF5ID0gdGhpcy5zcGxpdHRlcihoZWxtUG9seW1lcik7XG4gICAgICBjb25zdCB0Z3RNb25vbWVyc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWxtSXRlbXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgaXRlbSA9IGhlbG1JdGVtc0FycmF5W2ldO1xuICAgICAgICBpZiAoaXNOdWNsZW90aWRlKVxuICAgICAgICAgIGl0ZW0gPSBpdGVtLnJlcGxhY2UoaGVsbVdyYXBwZXJzUmUsICcnKTtcbiAgICAgICAgaWYgKGl0ZW0gPT09IFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LkhFTE0pIHtcbiAgICAgICAgICB0Z3RNb25vbWVyc0FycmF5LnB1c2godGd0R2FwU3ltYm9sISk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50b0Zhc3RhKHRndE5vdGF0aW9uIGFzIE5PVEFUSU9OKSAmJiBpdGVtLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyB0aGUgY2FzZSBvZiBhIG11bHRpLWNoYXJhY3RlciBtb25vbWVyIGNvbnZlcnRlZCB0byBGQVNUQVxuICAgICAgICAgIGNvbnN0IG1vbm9tZXIgPSAnWycgKyBpdGVtICsgJ10nO1xuICAgICAgICAgIHRndE1vbm9tZXJzQXJyYXkucHVzaChtb25vbWVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0Z3RNb25vbWVyc0FycmF5LnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0Z3RNb25vbWVyc0FycmF5LmpvaW4odGd0U2VwYXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8vIFRBR1MuYWxpZ25lZCBpcyBtYW5kYXRvcnkgZm9yIGNvbHVtbnMgb2YgTk9UQVRJT04uRkFTVEEgYW5kIE5PVEFUSU9OLlNFUEFSQVRPUlxuICAgIGNvbnN0IHNwbGl0dGVyOiBTcGxpdHRlckZ1bmMgPSBnZXRTcGxpdHRlckZvckNvbHVtbihuZXdDb2x1bW4pO1xuICAgIGNvbnN0IHN0YXRzOiBTZXFDb2xTdGF0cyA9IGdldFN0YXRzKG5ld0NvbHVtbiwgNSwgc3BsaXR0ZXIpO1xuICAgIGNvbnN0IGFsaWduZWQgPSBzdGF0cy5zYW1lTGVuZ3RoID8gJ1NFUS5NU0EnIDogJ1NFUSc7XG4gICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLmFsaWduZWQsIGFsaWduZWQpO1xuXG4gICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEhlbG1Ub1NlcGFyYXRvcigpOiBERy5Db2x1bW4ge1xuICAgIC8vIFRPRE86IGltcGxlbWVudGF0aW9yZXR1cm4gdGhpcy5nZXROZXdDb2x1bW4oKTtcbiAgICByZXR1cm4gdGhpcy5nZXROZXdDb2x1bW4oTk9UQVRJT04uU0VQQVJBVE9SKTtcbiAgfVxuXG4gIC8qKiBEaXNwYXRjaGVyIG1ldGhvZCBmb3Igbm90YXRpb24gY29udmVyc2lvblxuICAgKlxuICAgKiBAcGFyYW0ge05PVEFUSU9OfSB0Z3ROb3RhdGlvbiAgIE5vdGF0aW9uIHdlIHdhbnQgdG8gY29udmVydCB0b1xuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHRndFNlcGFyYXRvciAgIFBvc3NpYmxlIHNlcGFyYXRvclxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59ICAgICAgICAgICAgICAgIENvbnZlcnRlZCBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBjb252ZXJ0KHRndE5vdGF0aW9uOiBOT1RBVElPTiwgdGd0U2VwYXJhdG9yOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IERHLkNvbHVtbiB7XG4gICAgLy8gcG9zc2libGUgZXhjZXB0aW9uc1xuICAgIGlmICh0aGlzLm5vdGF0aW9uID09PSB0Z3ROb3RhdGlvbilcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGd0IG5vdGF0aW9uIGlzIGludmFsaWQnKTtcbiAgICBpZiAodGhpcy50b1NlcGFyYXRvcih0Z3ROb3RhdGlvbikgJiYgdGd0U2VwYXJhdG9yID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0Z3Qgc2VwYXJhdG9yIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIGlmICh0aGlzLmlzRmFzdGEoKSAmJiB0aGlzLnRvU2VwYXJhdG9yKHRndE5vdGF0aW9uKSAmJiB0Z3RTZXBhcmF0b3IgIT09IG51bGwpXG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RmFzdGFUb1NlcGFyYXRvcih0Z3RTZXBhcmF0b3IpO1xuICAgIGVsc2UgaWYgKCh0aGlzLmlzRmFzdGEoKSB8fCB0aGlzLmlzU2VwYXJhdG9yKCkpICYmIHRoaXMudG9IZWxtKHRndE5vdGF0aW9uKSlcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb0hlbG0oKTtcbiAgICBlbHNlIGlmICh0aGlzLmlzU2VwYXJhdG9yKCkgJiYgdGhpcy50b0Zhc3RhKHRndE5vdGF0aW9uKSlcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRTZXBhcmF0b3JUb0Zhc3RhKCk7XG4gICAgZWxzZSBpZiAodGhpcy5pc0hlbG0oKSAmJiB0aGlzLnRvRmFzdGEodGd0Tm90YXRpb24pKSAvLyB0aGUgY2FzZSBvZiBIRUxNXG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0SGVsbSh0Z3ROb3RhdGlvbik7XG4gICAgZWxzZSBpZiAodGhpcy5pc0hlbG0oKSAmJiB0aGlzLnRvU2VwYXJhdG9yKHRndE5vdGF0aW9uKSlcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRIZWxtKHRndE5vdGF0aW9uLCB0Z3RTZXBhcmF0b3IhKTtcbiAgICBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBzdXBwb3J0ZWQgY29udmVyc2lvbiAnICtcbiAgICAgICAgYGZyb20gc291cmNlIG5vdGF0aW9uICcke3RoaXMubm90YXRpb259JyB0byB0YXJnZXQgbm90YXRpb24gJyR7dGd0Tm90YXRpb259Jy5gKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb2w6IERHLkNvbHVtbikge1xuICAgIHN1cGVyKGNvbCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -19,7 +19,7 @@ export declare class UnitsHandler {
|
|
|
19
19
|
protected get column(): DG.Column;
|
|
20
20
|
get notation(): NOTATION;
|
|
21
21
|
get defaultGapSymbol(): string;
|
|
22
|
-
get separator(): string;
|
|
22
|
+
get separator(): string | undefined;
|
|
23
23
|
get aligned(): string;
|
|
24
24
|
/** Alphabet name (upper case) */
|
|
25
25
|
get alphabet(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units-handler.d.ts","sourceRoot":"","sources":["units-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"units-handler.d.ts","sourceRoot":"","sources":["units-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAKL,QAAQ,EAKT,MAAM,iBAAiB,CAAC;AAEzB,iEAAiE;AACjE,qBAAa,YAAY;IACvB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC;IACtC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC9B,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB;;;;MAI9C;IAEF,gBAAuB,oBAAoB,cAGxC;IACH,gBAAuB,gBAAgB,cAAyC;IAChF,gBAAuB,gBAAgB,cAAyC;WAElE,qBAAqB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM;IAalD,SAAS,KAAK,KAAK,IAAI,MAAM,CAAwB;IAErD,SAAS,KAAK,MAAM,IAAI,EAAE,CAAC,MAAM,CAAyB;IAE1D,IAAW,QAAQ,IAAI,QAAQ,CAA2B;IAE1D,IAAW,gBAAgB,IAAI,MAAM,CAAmC;IAExE,IAAW,SAAS,IAAI,MAAM,GAAG,SAAS,CAKzC;IAED,IAAW,OAAO,IAAI,MAAM,CAQ3B;IAED,iCAAiC;IACjC,IAAW,QAAQ,IAAI,MAAM,CAQ5B;IAEM,eAAe,IAAI,MAAM;IA6BzB,sBAAsB,IAAI,OAAO;IAOjC,OAAO,IAAI,OAAO;IAElB,WAAW,IAAI,OAAO;IAEtB,MAAM,IAAI,OAAO;IAEjB,KAAK,IAAI,OAAO;IAEhB,KAAK,IAAI,OAAO;IAEhB,SAAS,IAAI,OAAO;IAEpB,KAAK,IAAI,OAAO;IAEvB,4DAA4D;IAC5D;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,QAAQ;IAWjC;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,QAAQ,GAAG,EAAE,CAAC,MAAM;IAkC3D;;;;;;OAMG;WACW,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM;IAM7D;;;;;OAKG;WACW,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IASxD;;;;;;;;OAQG;WACW,sBAAsB,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,EAAE,CAAC,MAAM;gBAYO,GAAG,EAAE,EAAE,CAAC,MAAM;CAoClC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as DG from 'datagrok-api/dg';
|
|
2
|
-
import { getStats, splitterAsFasta
|
|
2
|
+
import { detectAlphabet, getSplitterForColumn, getStats, splitterAsFasta } from './macromolecule';
|
|
3
3
|
/** Class for handling notation units in Macromolecule columns */
|
|
4
4
|
export class UnitsHandler {
|
|
5
5
|
constructor(col) {
|
|
@@ -18,14 +18,14 @@ export class UnitsHandler {
|
|
|
18
18
|
throw new Error(`For column '${this.column.name}' of notation '${this.notation}' ` +
|
|
19
19
|
`tag '${"aligned" /* TAGS.aligned */}' is mandatory.`);
|
|
20
20
|
}
|
|
21
|
-
if (!this.column.tags.has(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
21
|
+
// if (!this.column.tags.has(TAGS.alphabetSize)) {
|
|
22
|
+
// if (this.isHelm())
|
|
23
|
+
// throw new Error(`For column '${this.column.name}' of notation '${this.notation}' ` +
|
|
24
|
+
// `tag '${TAGS.alphabetSize}' is mandatory.`);
|
|
25
|
+
// else if (['UN'].includes(this.alphabet))
|
|
26
|
+
// throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' ` +
|
|
27
|
+
// `tag '${TAGS.alphabetSize}' is mandatory.`);
|
|
28
|
+
// }
|
|
29
29
|
if (!this.column.tags.has(".alphabetIsMultichar" /* TAGS.alphabetIsMultichar */)) {
|
|
30
30
|
if (this.isHelm())
|
|
31
31
|
throw new Error(`For column '${this.column.name}' of notation '${this.notation}' ` +
|
|
@@ -50,11 +50,11 @@ export class UnitsHandler {
|
|
|
50
50
|
get notation() { return this._notation; }
|
|
51
51
|
get defaultGapSymbol() { return this._defaultGapSymbol; }
|
|
52
52
|
get separator() {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
var _a;
|
|
54
|
+
const separator = (_a = this.column.getTag("separator" /* TAGS.separator */)) !== null && _a !== void 0 ? _a : undefined;
|
|
55
|
+
if (this.notation === "separator" /* NOTATION.SEPARATOR */ && separator === undefined)
|
|
56
|
+
throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);
|
|
57
|
+
return separator;
|
|
58
58
|
}
|
|
59
59
|
get aligned() {
|
|
60
60
|
const aligned = this.column.getTag("aligned" /* TAGS.aligned */);
|
|
@@ -73,7 +73,17 @@ export class UnitsHandler {
|
|
|
73
73
|
}
|
|
74
74
|
getAlphabetSize() {
|
|
75
75
|
if (this.notation == "helm" /* NOTATION.HELM */ || this.alphabet == "UN" /* ALPHABET.UN */) {
|
|
76
|
-
const
|
|
76
|
+
const alphabetSizeStr = this.column.getTag(".alphabetSize" /* TAGS.alphabetSize */);
|
|
77
|
+
let alphabetSize;
|
|
78
|
+
if (alphabetSizeStr) {
|
|
79
|
+
alphabetSize = parseInt(alphabetSizeStr);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// calculate alphabetSize on demand
|
|
83
|
+
const splitter = getSplitterForColumn(this.column);
|
|
84
|
+
const stats = getStats(this.column, 1, splitter);
|
|
85
|
+
alphabetSize = Object.keys(stats.freq).length;
|
|
86
|
+
}
|
|
77
87
|
return alphabetSize;
|
|
78
88
|
}
|
|
79
89
|
else {
|
|
@@ -209,4 +219,4 @@ UnitsHandler.PeptideFastaAlphabet = new Set([
|
|
|
209
219
|
]);
|
|
210
220
|
UnitsHandler.DnaFastaAlphabet = new Set(['A', 'C', 'G', 'T']);
|
|
211
221
|
UnitsHandler.RnaFastaAlphabet = new Set(['A', 'C', 'G', 'U']);
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdHMtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVuaXRzLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl0QyxPQUFPLEVBRUwsUUFBUSxFQUVSLGVBQWUsRUFDZixjQUFjLEVBQ2YsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixpRUFBaUU7QUFDakUsTUFBTSxPQUFPLFlBQVk7SUEwTnZCLFlBQW1CLEdBQWM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLEtBQUssS0FBSyxJQUFJO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDOztZQUVwQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFELFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUM7UUFFbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsOEJBQWMsRUFBRTtZQUN2QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN0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RyxFQUFFLEdBQUcsRUFBRSxHQUFHO0NBQ2pELENBQUMsQ0FBQztBQUNvQiw2QkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsNkJBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcblxuaW1wb3J0IHtcbiAgQUxQSEFCRVQsIE5PVEFUSU9OLFxuICBnZXRTdGF0cyxcbiAgU2VxQ29sU3RhdHMsXG4gIHNwbGl0dGVyQXNGYXN0YSxcbiAgZGV0ZWN0QWxwaGFiZXQsIFRBR1Ncbn0gZnJvbSAnLi9tYWNyb21vbGVjdWxlJztcblxuLyoqIENsYXNzIGZvciBoYW5kbGluZyBub3RhdGlvbiB1bml0cyBpbiBNYWNyb21vbGVjdWxlIGNvbHVtbnMgKi9cbmV4cG9ydCBjbGFzcyBVbml0c0hhbmRsZXIge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbHVtbjogREcuQ29sdW1uOyAvLyB0aGUgY29sdW1uIHRvIGJlIGNvbnZlcnRlZFxuICBwcm90ZWN0ZWQgX3VuaXRzOiBzdHJpbmc7IC8vIHVuaXRzLCBvZiB0aGUgZm9ybSBmYXN0YSwgc2VwYXJhdG9yXG4gIHByb3RlY3RlZCBfbm90YXRpb246IE5PVEFUSU9OOyAvLyBjdXJyZW50IG5vdGF0aW9uICh3aXRob3V0IDpTRVE6TlQsIGV0Yy4pXG4gIHByb3RlY3RlZCBfZGVmYXVsdEdhcFN5bWJvbDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IF9kZWZhdWx0R2FwU3ltYm9sc0RpY3QgPSB7XG4gICAgSEVMTTogJyonLFxuICAgIFNFUEFSQVRPUjogJycsXG4gICAgRkFTVEE6ICctJyxcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBlcHRpZGVGYXN0YUFscGhhYmV0ID0gbmV3IFNldChbXG4gICAgJ0cnLCAnTCcsICdZJywgJ1MnLCAnRScsICdRJywgJ0QnLCAnTicsICdGJywgJ0EnLFxuICAgICdLJywgJ1InLCAnSCcsICdDJywgJ1YnLCAnUCcsICdXJywgJ0knLCAnTScsICdUJyxcbiAgXSk7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRG5hRmFzdGFBbHBoYWJldCA9IG5ldyBTZXQoWydBJywgJ0MnLCAnRycsICdUJ10pO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJuYUZhc3RhQWxwaGFiZXQgPSBuZXcgU2V0KFsnQScsICdDJywgJ0cnLCAnVSddKTtcblxuICBwdWJsaWMgc3RhdGljIHNldFVuaXRzVG9GYXN0YUNvbHVtbihjb2w6IERHLkNvbHVtbikge1xuICAgIGlmIChjb2wuc2VtVHlwZSAhPT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYXN0YSBjb2x1bW4gbXVzdCBiZSBNQUNST01PTEVDVUxFJyk7XG5cbiAgICBjb25zdCBzdGF0czogU2VxQ29sU3RhdHMgPSBnZXRTdGF0cyhjb2wsIDUsIHNwbGl0dGVyQXNGYXN0YSk7XG4gICAgY29uc3QgYWxpZ25lZCA9IHN0YXRzLnNhbWVMZW5ndGggPyAnU0VRLk1TQScgOiAnU0VRJztcbiAgICBjb25zdCBhbHBoYWJldCA9IGRldGVjdEFscGhhYmV0KHN0YXRzKTtcblxuICAgIGNvbC5zZXRUYWcoREcuVEFHUy5VTklUUywgTk9UQVRJT04uRkFTVEEpO1xuICAgIGNvbC5zZXRUYWcoVEFHUy5hbGlnbmVkLCBhbGlnbmVkKTtcbiAgICBjb2wuc2V0VGFnKFRBR1MuYWxwaGFiZXQsIGFscGhhYmV0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdW5pdHMoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3VuaXRzOyB9XG5cbiAgcHJvdGVjdGVkIGdldCBjb2x1bW4oKTogREcuQ29sdW1uIHsgcmV0dXJuIHRoaXMuX2NvbHVtbjsgfVxuXG4gIHB1YmxpYyBnZXQgbm90YXRpb24oKTogTk9UQVRJT04geyByZXR1cm4gdGhpcy5fbm90YXRpb247IH1cblxuICBwdWJsaWMgZ2V0IGRlZmF1bHRHYXBTeW1ib2woKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2RlZmF1bHRHYXBTeW1ib2w7IH1cblxuICBwdWJsaWMgZ2V0IHNlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuY29sdW1uLmdldFRhZyhUQUdTLnNlcGFyYXRvcik7XG4gICAgaWYgKHNlcGFyYXRvciAhPT0gbnVsbClcbiAgICAgIHJldHVybiBzZXBhcmF0b3I7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXBhcmF0b3Igbm90IHNldCcpO1xuICB9XG5cbiAgcHVibGljIGdldCBhbGlnbmVkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYWxpZ25lZCA9IHRoaXMuY29sdW1uLmdldFRhZyhUQUdTLmFsaWduZWQpO1xuXG4gICAgLy8gVEFHUy5hbGlnbmVkIGlzIG1hbmRhdG9yeSBmb3IgY29sdW1ucyBvZiBOT1RBVElPTi5GQVNUQSBhbmQgTk9UQVRJT04uU0VQQVJBVE9SXG4gICAgaWYgKCFhbGlnbmVkICYmICh0aGlzLmlzRmFzdGEoKSB8fCB0aGlzLmlzU2VwYXJhdG9yKCkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYWcgYWxpZ25lZCBub3Qgc2V0Jyk7XG5cbiAgICByZXR1cm4gYWxpZ25lZDtcbiAgfVxuXG4gIC8qKiBBbHBoYWJldCBuYW1lICh1cHBlciBjYXNlKSAqL1xuICBwdWJsaWMgZ2V0IGFscGhhYmV0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgYWxwaGFiZXQgPSB0aGlzLmNvbHVtbi5nZXRUYWcoVEFHUy5hbHBoYWJldCk7XG5cbiAgICAvLyBUQUdTLmFscGhhYmV0IGlzIG1hbmRhdG9yeSBmb3IgY29sdW1ucyBvZiBOT1RBVElPTi5GQVNUQSBhbmQgTk9UQVRJT04uU0VQQVJBVE9SXG4gICAgaWYgKCFhbHBoYWJldCAmJiAodGhpcy5pc0Zhc3RhKCkgfHwgdGhpcy5pc1NlcGFyYXRvcigpKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGFnIGFscGhhYmV0IG5vdCBzZXQnKTtcblxuICAgIHJldHVybiBhbHBoYWJldDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbHBoYWJldFNpemUoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5ub3RhdGlvbiA9PSBOT1RBVElPTi5IRUxNIHx8IHRoaXMuYWxwaGFiZXQgPT0gQUxQSEFCRVQuVU4pIHtcbiAgICAgIGNvbnN0IGFscGhhYmV0U2l6ZSA9IHBhcnNlSW50KHRoaXMuY29sdW1uLmdldFRhZyhUQUdTLmFscGhhYmV0U2l6ZSkpO1xuICAgICAgcmV0dXJuIGFscGhhYmV0U2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0aGlzLmFscGhhYmV0KSB7XG4gICAgICBjYXNlIEFMUEhBQkVULlBUOlxuICAgICAgICByZXR1cm4gMjA7XG4gICAgICBjYXNlIEFMUEhBQkVULkROQTpcbiAgICAgIGNhc2UgQUxQSEFCRVQuUk5BOlxuICAgICAgICByZXR1cm4gNDtcbiAgICAgIGNhc2UgJ05UJzpcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmV4cGVjdGVkIGFscGhhYmV0ICdOVCcuYCk7XG4gICAgICAgIHJldHVybiA0O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGFscGhhYmV0ICcke3RoaXMuYWxwaGFiZXR9Jy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0QWxwaGFiZXRJc011bHRpY2hhcigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5ub3RhdGlvbiA9PSBOT1RBVElPTi5IRUxNIHx8IHRoaXMuYWxwaGFiZXQgPT0gQUxQSEFCRVQuVU4pXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZ2V0VGFnKFRBR1MuYWxwaGFiZXRJc011bHRpY2hhcikgPT0gJ3RydWUnO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Zhc3RhKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5ub3RhdGlvbiA9PT0gTk9UQVRJT04uRkFTVEE7IH1cblxuICBwdWJsaWMgaXNTZXBhcmF0b3IoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLm5vdGF0aW9uID09PSBOT1RBVElPTi5TRVBBUkFUT1I7IH1cblxuICBwdWJsaWMgaXNIZWxtKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5ub3RhdGlvbiA9PT0gTk9UQVRJT04uSEVMTTsgfVxuXG4gIHB1YmxpYyBpc1JuYSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWxwaGFiZXQgPT09IEFMUEhBQkVULlJOQTsgfVxuXG4gIHB1YmxpYyBpc0RuYSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWxwaGFiZXQgPT09IEFMUEhBQkVULkROQTsgfVxuXG4gIHB1YmxpYyBpc1BlcHRpZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmFscGhhYmV0ID09PSBBTFBIQUJFVC5QVDsgfVxuXG4gIHB1YmxpYyBpc01zYSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWxpZ25lZCA/IHRoaXMuYWxpZ25lZC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdNU0EnKSA6IGZhbHNlOyB9XG5cbiAgLyoqIEFzc29jaWF0ZSBub3RhdGlvbiB0eXBlcyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHVuaXRzICovXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOT1RBVElPTn0gICAgIE5vdGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5pdHMgdHlwZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE5vdGF0aW9uKCk6IE5PVEFUSU9OIHtcbiAgICBpZiAodGhpcy51bml0cy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoTk9UQVRJT04uRkFTVEEpKVxuICAgICAgcmV0dXJuIE5PVEFUSU9OLkZBU1RBO1xuICAgIGVsc2UgaWYgKHRoaXMudW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE5PVEFUSU9OLlNFUEFSQVRPUikpXG4gICAgICByZXR1cm4gTk9UQVRJT04uU0VQQVJBVE9SO1xuICAgIGVsc2UgaWYgKHRoaXMudW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE5PVEFUSU9OLkhFTE0pKVxuICAgICAgcmV0dXJuIE5PVEFUSU9OLkhFTE07XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJyR7dGhpcy5jb2x1bW4ubmFtZX0nIGhhcyB1bmV4cGVjdGVkIG5vdGF0aW9uICcke3RoaXMudW5pdHN9Jy5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgZW1wdHkgY29sdW1uIG9mIHRoZSBzcGVjaWZpZWQgbm90YXRpb24gdHlwZSBhbmQgdGhlIHNhbWVcbiAgICogbGVuZ3RoIGFzIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge05PVEFUSU9OfSB0YXJnZXROb3RhdGlvblxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0TmV3Q29sdW1uKHRhcmdldE5vdGF0aW9uOiBOT1RBVElPTik6IERHLkNvbHVtbiB7XG4gICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW47XG4gICAgY29uc3QgbGVuID0gY29sLmxlbmd0aDtcbiAgICBjb25zdCBuYW1lID0gdGFyZ2V0Tm90YXRpb24udG9Mb3dlckNhc2UoKSArICcoJyArIGNvbC5uYW1lICsgJyknO1xuICAgIGNvbnN0IG5ld0NvbE5hbWUgPSBjb2wuZGF0YUZyYW1lLmNvbHVtbnMuZ2V0VW51c2VkTmFtZShuYW1lKTtcbiAgICBjb25zdCBuZXdDb2x1bW4gPSBERy5Db2x1bW4uZnJvbUxpc3QoJ3N0cmluZycsIG5ld0NvbE5hbWUsIG5ldyBBcnJheShsZW4pLmZpbGwoJycpKTtcbiAgICBuZXdDb2x1bW4uc2VtVHlwZSA9IERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIHRhcmdldE5vdGF0aW9uKTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuQ0VMTF9SRU5ERVJFUiwgJ01hY3JvbW9sZWN1bGUnKTtcblxuICAgIGNvbnN0IHNyY0FsaWduZWQgPSBjb2wuZ2V0VGFnKFRBR1MuYWxpZ25lZCk7XG4gICAgaWYgKHNyY0FsaWduZWQpXG4gICAgICBuZXdDb2x1bW4uc2V0VGFnKFRBR1MuYWxpZ25lZCwgc3JjQWxpZ25lZCk7XG5cbiAgICBjb25zdCBzcmNBbHBoYWJldCA9IGNvbC5nZXRUYWcoVEFHUy5hbHBoYWJldCk7XG4gICAgaWYgKHNyY0FscGhhYmV0KVxuICAgICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLmFscGhhYmV0LCBzcmNBbHBoYWJldCk7XG5cbiAgICBsZXQgc3JjQWxwaGFiZXRTaXplOiBzdHJpbmcgPSBjb2wuZ2V0VGFnKFRBR1MuYWxwaGFiZXRTaXplKTtcbiAgICBpZiAoc3JjQWxwaGFiZXRTaXplKVxuICAgICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLmFscGhhYmV0U2l6ZSwgc3JjQWxwaGFiZXRTaXplKTtcblxuICAgIGNvbnN0IHNyY0FscGhhYmV0SXNNdWx0aWNoYXI6IHN0cmluZyA9IGNvbC5nZXRUYWcoVEFHUy5hbHBoYWJldElzTXVsdGljaGFyKTtcbiAgICBpZiAoc3JjQWxwaGFiZXRJc011bHRpY2hhciAhPT0gdW5kZWZpbmVkKVxuICAgICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLmFscGhhYmV0SXNNdWx0aWNoYXIsIHNyY0FscGhhYmV0SXNNdWx0aWNoYXIpO1xuXG4gICAgaWYgKHRhcmdldE5vdGF0aW9uID09IE5PVEFUSU9OLkhFTE0pIHtcbiAgICAgIHNyY0FscGhhYmV0U2l6ZSA9IHRoaXMuZ2V0QWxwaGFiZXRTaXplKCkudG9TdHJpbmcoKTtcbiAgICAgIG5ld0NvbHVtbi5zZXRUYWcoVEFHUy5hbHBoYWJldFNpemUsIHNyY0FscGhhYmV0U2l6ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgZW1wdHkgY29sdW1uIHVzaW5nIHRlbXBsYXRlQ29sIGFzIGEgdGVtcGxhdGVcbiAgICpcbiAgICogQHBhcmFtIHtERy5Db2x1bW59IHRlbXBsYXRlQ29sICB0aGUgcHJvcGVydGllcyBhbmQgdW5pdHMgb2YgdGhpcyBjb2x1bW4gYXJlIHVzZWQgYXMgYVxuICAgKiB0ZW1wbGF0ZSB0byBidWlsZCB0aGUgbmV3IG9uZVxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldE5ld0NvbHVtbih0ZW1wbGF0ZUNvbDogREcuQ29sdW1uKTogREcuQ29sdW1uIHtcbiAgICBjb25zdCBjb2w6IFVuaXRzSGFuZGxlciA9IG5ldyBVbml0c0hhbmRsZXIodGVtcGxhdGVDb2wpO1xuICAgIGNvbnN0IHRhcmdldE5vdGF0aW9uID0gY29sLm5vdGF0aW9uO1xuICAgIHJldHVybiBjb2wuZ2V0TmV3Q29sdW1uKHRhcmdldE5vdGF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGhlbHBlciBmdW5jdGlvbiBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgdGhlICd1bml0cycgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0cyAgdGhlIHN0cmluZyB0byBiZSB2YWxpZGF0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdW5pdHNTdHJpbmdJc1ZhbGlkKHVuaXRzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB1bml0cyA9IHVuaXRzLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcHJlZml4ZXMgPSBbTk9UQVRJT04uRkFTVEEsIE5PVEFUSU9OLlNFUEFSQVRPUiwgTk9UQVRJT04uSEVMTV07XG4gICAgY29uc3QgcG9zdGZpeGVzID0gWydybmEnLCAnZG5hJywgJ3B0J107XG5cbiAgICBjb25zdCBwcmVmaXhDcml0ZXJpb24gPSBwcmVmaXhlcy5zb21lKChwKSA9PiB1bml0cy5zdGFydHNXaXRoKHAudG9Mb3dlckNhc2UoKSkpO1xuICAgIHJldHVybiBwcmVmaXhDcml0ZXJpb247XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGNvbHVtbiBvZiBzZW1hbnRpYyB0eXBlIE1BQ1JPTU9MRUNVTEUgZnJvbSB0aGUgbGlzdCBvZlxuICAgKiBzcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gICAgbGVuICB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgY29sdW1uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICBuYW1lICB0aGUgbmFtZSBvZiB0aGUgbmV3IGNvbHVtblxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgdW5pdHMgIHRoZSB1bml0cyBvZiB0aGUgbmV3IGNvbHVtblxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldE5ld0NvbHVtbkZyb21QYXJhbXMoXG4gICAgbGVuOiBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHVuaXRzOiBzdHJpbmdcbiAgKTogREcuQ29sdW1uIHtcbiAgICAvLyBXQVJOSU5HOiBpbiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGlzIGltcG9zc2libGUgdG8gdmVyaWZ5IHRoZSB1bmlxdWVuZXNzXG4gICAgLy8gb2YgdGhlIG5ldyBjb2x1bW4ncyBuYW1lXG4gICAgLy8gVE9ETzogdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB1bml0cyBwYXJhbWV0ZXJcbiAgICBpZiAoIVVuaXRzSGFuZGxlci51bml0c1N0cmluZ0lzVmFsaWQodW5pdHMpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZvcm1hdCBvZiBcXCd1bml0c1xcJyBwYXJhbWV0ZXInKTtcbiAgICBjb25zdCBuZXdDb2x1bW4gPSBERy5Db2x1bW4uZnJvbUxpc3QoJ3N0cmluZycsIG5hbWUsIG5ldyBBcnJheShsZW4pLmZpbGwoJycpKTtcbiAgICBuZXdDb2x1bW4uc2VtVHlwZSA9IERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIHVuaXRzKTtcbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbDogREcuQ29sdW1uKSB7XG4gICAgdGhpcy5fY29sdW1uID0gY29sO1xuICAgIGNvbnN0IHVuaXRzID0gdGhpcy5fY29sdW1uLnRhZ3NbREcuVEFHUy5VTklUU107XG4gICAgaWYgKHVuaXRzICE9PSBudWxsKVxuICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcbiAgICBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaXRzIGFyZSBub3Qgc3BlY2lmaWVkIGluIGNvbHVtbicpO1xuICAgIHRoaXMuX25vdGF0aW9uID0gdGhpcy5nZXROb3RhdGlvbigpO1xuICAgIHRoaXMuX2RlZmF1bHRHYXBTeW1ib2wgPSAodGhpcy5pc0Zhc3RhKCkpID8gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuRkFTVEEgOlxuICAgICAgKHRoaXMuaXNIZWxtKCkpID8gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuSEVMTSA6XG4gICAgICAgIFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LlNFUEFSQVRPUjtcblxuICAgIGlmICghdGhpcy5jb2x1bW4udGFncy5oYXMoVEFHUy5hbGlnbmVkKSkge1xuICAgICAgaWYgKHRoaXMuaXNGYXN0YSgpIHx8IHRoaXMuaXNTZXBhcmF0b3IoKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3IgY29sdW1uICcke3RoaXMuY29sdW1uLm5hbWV9JyBvZiBub3RhdGlvbiAnJHt0aGlzLm5vdGF0aW9ufScgYCArXG4gICAgICAgICAgYHRhZyAnJHtUQUdTLmFsaWduZWR9JyBpcyBtYW5kYXRvcnkuYCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbHVtbi50YWdzLmhhcyhUQUdTLmFscGhhYmV0U2l6ZSkpIHtcbiAgICAgIGlmICh0aGlzLmlzSGVsbSgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvciBjb2x1bW4gJyR7dGhpcy5jb2x1bW4ubmFtZX0nIG9mIG5vdGF0aW9uICcke3RoaXMubm90YXRpb259JyBgICtcbiAgICAgICAgICBgdGFnICcke1RBR1MuYWxwaGFiZXRTaXplfScgaXMgbWFuZGF0b3J5LmApO1xuICAgICAgZWxzZSBpZiAoWydVTiddLmluY2x1ZGVzKHRoaXMuYWxwaGFiZXQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvciBjb2x1bW4gJyR7dGhpcy5jb2x1bW4ubmFtZX0nIG9mIGFscGhhYmV0ICcke3RoaXMuYWxwaGFiZXR9JyBgICtcbiAgICAgICAgICBgdGFnICcke1RBR1MuYWxwaGFiZXRTaXplfScgaXMgbWFuZGF0b3J5LmApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb2x1bW4udGFncy5oYXMoVEFHUy5hbHBoYWJldElzTXVsdGljaGFyKSkge1xuICAgICAgaWYgKHRoaXMuaXNIZWxtKCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9yIGNvbHVtbiAnJHt0aGlzLmNvbHVtbi5uYW1lfScgb2Ygbm90YXRpb24gJyR7dGhpcy5ub3RhdGlvbn0nIGAgK1xuICAgICAgICAgIGB0YWcgJyR7VEFHUy5hbHBoYWJldElzTXVsdGljaGFyfScgaXMgbWFuZGF0b3J5LmApO1xuICAgICAgZWxzZSBpZiAoWydVTiddLmluY2x1ZGVzKHRoaXMuYWxwaGFiZXQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvciBjb2x1bW4gJyR7dGhpcy5jb2x1bW4ubmFtZX0nIG9mIGFscGhhYmV0ICcke3RoaXMuYWxwaGFiZXR9JyBgICtcbiAgICAgICAgICBgdGFnICcke1RBR1MuYWxwaGFiZXRJc011bHRpY2hhcn0nIGlzIG1hbmRhdG9yeS5gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdHMtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVuaXRzLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBRUwsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixRQUFRLEVBR1IsZUFBZSxFQUdoQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLGlFQUFpRTtBQUNqRSxNQUFNLE9BQU8sWUFBWTtJQWtPdkIsWUFBbUIsR0FBYztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksS0FBSyxLQUFLLElBQUk7WUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7O1lBRXBCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JGLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUQsWUFBWSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQztRQUVsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyw4QkFBYyxFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxX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LEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUNoRCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0NBQ2pELENBQUMsQ0FBQztBQUNvQiw2QkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQsNkJBQWdCLEdBQUcsSUFBSSxHQUFHLENBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuaW1wb3J0IHtcbiAgQUxQSEFCRVQsXG4gIGRldGVjdEFscGhhYmV0LFxuICBnZXRTcGxpdHRlckZvckNvbHVtbixcbiAgZ2V0U3RhdHMsXG4gIE5PVEFUSU9OLFxuICBTZXFDb2xTdGF0cyxcbiAgc3BsaXR0ZXJBc0Zhc3RhLFxuICBTcGxpdHRlckZ1bmMsXG4gIFRBR1Ncbn0gZnJvbSAnLi9tYWNyb21vbGVjdWxlJztcblxuLyoqIENsYXNzIGZvciBoYW5kbGluZyBub3RhdGlvbiB1bml0cyBpbiBNYWNyb21vbGVjdWxlIGNvbHVtbnMgKi9cbmV4cG9ydCBjbGFzcyBVbml0c0hhbmRsZXIge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbHVtbjogREcuQ29sdW1uOyAvLyB0aGUgY29sdW1uIHRvIGJlIGNvbnZlcnRlZFxuICBwcm90ZWN0ZWQgX3VuaXRzOiBzdHJpbmc7IC8vIHVuaXRzLCBvZiB0aGUgZm9ybSBmYXN0YSwgc2VwYXJhdG9yXG4gIHByb3RlY3RlZCBfbm90YXRpb246IE5PVEFUSU9OOyAvLyBjdXJyZW50IG5vdGF0aW9uICh3aXRob3V0IDpTRVE6TlQsIGV0Yy4pXG4gIHByb3RlY3RlZCBfZGVmYXVsdEdhcFN5bWJvbDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IF9kZWZhdWx0R2FwU3ltYm9sc0RpY3QgPSB7XG4gICAgSEVMTTogJyonLFxuICAgIFNFUEFSQVRPUjogJycsXG4gICAgRkFTVEE6ICctJyxcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBlcHRpZGVGYXN0YUFscGhhYmV0ID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgICAnRycsICdMJywgJ1knLCAnUycsICdFJywgJ1EnLCAnRCcsICdOJywgJ0YnLCAnQScsXG4gICAgJ0snLCAnUicsICdIJywgJ0MnLCAnVicsICdQJywgJ1cnLCAnSScsICdNJywgJ1QnLFxuICBdKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEbmFGYXN0YUFscGhhYmV0ID0gbmV3IFNldDxzdHJpbmc+KFsnQScsICdDJywgJ0cnLCAnVCddKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSbmFGYXN0YUFscGhhYmV0ID0gbmV3IFNldDxzdHJpbmc+KFsnQScsICdDJywgJ0cnLCAnVSddKTtcblxuICBwdWJsaWMgc3RhdGljIHNldFVuaXRzVG9GYXN0YUNvbHVtbihjb2w6IERHLkNvbHVtbikge1xuICAgIGlmIChjb2wuc2VtVHlwZSAhPT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYXN0YSBjb2x1bW4gbXVzdCBiZSBNQUNST01PTEVDVUxFJyk7XG5cbiAgICBjb25zdCBzdGF0czogU2VxQ29sU3RhdHMgPSBnZXRTdGF0cyhjb2wsIDUsIHNwbGl0dGVyQXNGYXN0YSk7XG4gICAgY29uc3QgYWxpZ25lZCA9IHN0YXRzLnNhbWVMZW5ndGggPyAnU0VRLk1TQScgOiAnU0VRJztcbiAgICBjb25zdCBhbHBoYWJldCA9IGRldGVjdEFscGhhYmV0KHN0YXRzKTtcblxuICAgIGNvbC5zZXRUYWcoREcuVEFHUy5VTklUUywgTk9UQVRJT04uRkFTVEEpO1xuICAgIGNvbC5zZXRUYWcoVEFHUy5hbGlnbmVkLCBhbGlnbmVkKTtcbiAgICBjb2wuc2V0VGFnKFRBR1MuYWxwaGFiZXQsIGFscGhhYmV0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdW5pdHMoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3VuaXRzOyB9XG5cbiAgcHJvdGVjdGVkIGdldCBjb2x1bW4oKTogREcuQ29sdW1uIHsgcmV0dXJuIHRoaXMuX2NvbHVtbjsgfVxuXG4gIHB1YmxpYyBnZXQgbm90YXRpb24oKTogTk9UQVRJT04geyByZXR1cm4gdGhpcy5fbm90YXRpb247IH1cblxuICBwdWJsaWMgZ2V0IGRlZmF1bHRHYXBTeW1ib2woKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2RlZmF1bHRHYXBTeW1ib2w7IH1cblxuICBwdWJsaWMgZ2V0IHNlcGFyYXRvcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlcGFyYXRvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb2x1bW4uZ2V0VGFnKFRBR1Muc2VwYXJhdG9yKSA/PyB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMubm90YXRpb24gPT09IE5PVEFUSU9OLlNFUEFSQVRPUiAmJiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2VwYXJhdG9yIGlzIG1hbmRhdG9yeSAgZm9yIGNvbHVtbiAnJHt0aGlzLmNvbHVtbi5uYW1lfScgb2Ygbm90YXRpb24gJyR7dGhpcy5ub3RhdGlvbn0nLmApO1xuICAgIHJldHVybiBzZXBhcmF0b3I7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFsaWduZWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbGlnbmVkID0gdGhpcy5jb2x1bW4uZ2V0VGFnKFRBR1MuYWxpZ25lZCk7XG5cbiAgICAvLyBUQUdTLmFsaWduZWQgaXMgbWFuZGF0b3J5IGZvciBjb2x1bW5zIG9mIE5PVEFUSU9OLkZBU1RBIGFuZCBOT1RBVElPTi5TRVBBUkFUT1JcbiAgICBpZiAoIWFsaWduZWQgJiYgKHRoaXMuaXNGYXN0YSgpIHx8IHRoaXMuaXNTZXBhcmF0b3IoKSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RhZyBhbGlnbmVkIG5vdCBzZXQnKTtcblxuICAgIHJldHVybiBhbGlnbmVkO1xuICB9XG5cbiAgLyoqIEFscGhhYmV0IG5hbWUgKHVwcGVyIGNhc2UpICovXG4gIHB1YmxpYyBnZXQgYWxwaGFiZXQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbHBoYWJldCA9IHRoaXMuY29sdW1uLmdldFRhZyhUQUdTLmFscGhhYmV0KTtcblxuICAgIC8vIFRBR1MuYWxwaGFiZXQgaXMgbWFuZGF0b3J5IGZvciBjb2x1bW5zIG9mIE5PVEFUSU9OLkZBU1RBIGFuZCBOT1RBVElPTi5TRVBBUkFUT1JcbiAgICBpZiAoIWFscGhhYmV0ICYmICh0aGlzLmlzRmFzdGEoKSB8fCB0aGlzLmlzU2VwYXJhdG9yKCkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYWcgYWxwaGFiZXQgbm90IHNldCcpO1xuXG4gICAgcmV0dXJuIGFscGhhYmV0O1xuICB9XG5cbiAgcHVibGljIGdldEFscGhhYmV0U2l6ZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLm5vdGF0aW9uID09IE5PVEFUSU9OLkhFTE0gfHwgdGhpcy5hbHBoYWJldCA9PSBBTFBIQUJFVC5VTikge1xuICAgICAgY29uc3QgYWxwaGFiZXRTaXplU3RyID0gdGhpcy5jb2x1bW4uZ2V0VGFnKFRBR1MuYWxwaGFiZXRTaXplKTtcbiAgICAgIGxldCBhbHBoYWJldFNpemU6IG51bWJlcjtcbiAgICAgIGlmIChhbHBoYWJldFNpemVTdHIpIHtcbiAgICAgICAgYWxwaGFiZXRTaXplID0gcGFyc2VJbnQoYWxwaGFiZXRTaXplU3RyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBhbHBoYWJldFNpemUgb24gZGVtYW5kXG4gICAgICAgIGNvbnN0IHNwbGl0dGVyOiBTcGxpdHRlckZ1bmMgPSBnZXRTcGxpdHRlckZvckNvbHVtbih0aGlzLmNvbHVtbik7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gZ2V0U3RhdHModGhpcy5jb2x1bW4sIDEsIHNwbGl0dGVyKTtcbiAgICAgICAgYWxwaGFiZXRTaXplID0gT2JqZWN0LmtleXMoc3RhdHMuZnJlcSkubGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFscGhhYmV0U2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0aGlzLmFscGhhYmV0KSB7XG4gICAgICBjYXNlIEFMUEhBQkVULlBUOlxuICAgICAgICByZXR1cm4gMjA7XG4gICAgICBjYXNlIEFMUEhBQkVULkROQTpcbiAgICAgIGNhc2UgQUxQSEFCRVQuUk5BOlxuICAgICAgICByZXR1cm4gNDtcbiAgICAgIGNhc2UgJ05UJzpcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmV4cGVjdGVkIGFscGhhYmV0ICdOVCcuYCk7XG4gICAgICAgIHJldHVybiA0O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGFscGhhYmV0ICcke3RoaXMuYWxwaGFiZXR9Jy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0QWxwaGFiZXRJc011bHRpY2hhcigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5ub3RhdGlvbiA9PSBOT1RBVElPTi5IRUxNIHx8IHRoaXMuYWxwaGFiZXQgPT0gQUxQSEFCRVQuVU4pXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZ2V0VGFnKFRBR1MuYWxwaGFiZXRJc011bHRpY2hhcikgPT0gJ3RydWUnO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Zhc3RhKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5ub3RhdGlvbiA9PT0gTk9UQVRJT04uRkFTVEE7IH1cblxuICBwdWJsaWMgaXNTZXBhcmF0b3IoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLm5vdGF0aW9uID09PSBOT1RBVElPTi5TRVBBUkFUT1I7IH1cblxuICBwdWJsaWMgaXNIZWxtKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5ub3RhdGlvbiA9PT0gTk9UQVRJT04uSEVMTTsgfVxuXG4gIHB1YmxpYyBpc1JuYSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWxwaGFiZXQgPT09IEFMUEhBQkVULlJOQTsgfVxuXG4gIHB1YmxpYyBpc0RuYSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWxwaGFiZXQgPT09IEFMUEhBQkVULkROQTsgfVxuXG4gIHB1YmxpYyBpc1BlcHRpZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmFscGhhYmV0ID09PSBBTFBIQUJFVC5QVDsgfVxuXG4gIHB1YmxpYyBpc01zYSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWxpZ25lZCA/IHRoaXMuYWxpZ25lZC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdNU0EnKSA6IGZhbHNlOyB9XG5cbiAgLyoqIEFzc29jaWF0ZSBub3RhdGlvbiB0eXBlcyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHVuaXRzICovXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOT1RBVElPTn0gICAgIE5vdGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5pdHMgdHlwZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE5vdGF0aW9uKCk6IE5PVEFUSU9OIHtcbiAgICBpZiAodGhpcy51bml0cy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoTk9UQVRJT04uRkFTVEEpKVxuICAgICAgcmV0dXJuIE5PVEFUSU9OLkZBU1RBO1xuICAgIGVsc2UgaWYgKHRoaXMudW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE5PVEFUSU9OLlNFUEFSQVRPUikpXG4gICAgICByZXR1cm4gTk9UQVRJT04uU0VQQVJBVE9SO1xuICAgIGVsc2UgaWYgKHRoaXMudW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE5PVEFUSU9OLkhFTE0pKVxuICAgICAgcmV0dXJuIE5PVEFUSU9OLkhFTE07XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJyR7dGhpcy5jb2x1bW4ubmFtZX0nIGhhcyB1bmV4cGVjdGVkIG5vdGF0aW9uICcke3RoaXMudW5pdHN9Jy5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgZW1wdHkgY29sdW1uIG9mIHRoZSBzcGVjaWZpZWQgbm90YXRpb24gdHlwZSBhbmQgdGhlIHNhbWVcbiAgICogbGVuZ3RoIGFzIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge05PVEFUSU9OfSB0YXJnZXROb3RhdGlvblxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0TmV3Q29sdW1uKHRhcmdldE5vdGF0aW9uOiBOT1RBVElPTik6IERHLkNvbHVtbiB7XG4gICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW47XG4gICAgY29uc3QgbGVuID0gY29sLmxlbmd0aDtcbiAgICBjb25zdCBuYW1lID0gdGFyZ2V0Tm90YXRpb24udG9Mb3dlckNhc2UoKSArICcoJyArIGNvbC5uYW1lICsgJyknO1xuICAgIGNvbnN0IG5ld0NvbE5hbWUgPSBjb2wuZGF0YUZyYW1lLmNvbHVtbnMuZ2V0VW51c2VkTmFtZShuYW1lKTtcbiAgICBjb25zdCBuZXdDb2x1bW4gPSBERy5Db2x1bW4uZnJvbUxpc3QoJ3N0cmluZycsIG5ld0NvbE5hbWUsIG5ldyBBcnJheShsZW4pLmZpbGwoJycpKTtcbiAgICBuZXdDb2x1bW4uc2VtVHlwZSA9IERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIHRhcmdldE5vdGF0aW9uKTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuQ0VMTF9SRU5ERVJFUiwgJ01hY3JvbW9sZWN1bGUnKTtcblxuICAgIGNvbnN0IHNyY0FsaWduZWQgPSBjb2wuZ2V0VGFnKFRBR1MuYWxpZ25lZCk7XG4gICAgaWYgKHNyY0FsaWduZWQpXG4gICAgICBuZXdDb2x1bW4uc2V0VGFnKFRBR1MuYWxpZ25lZCwgc3JjQWxpZ25lZCk7XG5cbiAgICBjb25zdCBzcmNBbHBoYWJldCA9IGNvbC5nZXRUYWcoVEFHUy5hbHBoYWJldCk7XG4gICAgaWYgKHNyY0FscGhhYmV0KVxuICAgICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLmFscGhhYmV0LCBzcmNBbHBoYWJldCk7XG5cbiAgICBsZXQgc3JjQWxwaGFiZXRTaXplOiBzdHJpbmcgPSBjb2wuZ2V0VGFnKFRBR1MuYWxwaGFiZXRTaXplKTtcbiAgICBpZiAoc3JjQWxwaGFiZXRTaXplKVxuICAgICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLmFscGhhYmV0U2l6ZSwgc3JjQWxwaGFiZXRTaXplKTtcblxuICAgIGNvbnN0IHNyY0FscGhhYmV0SXNNdWx0aWNoYXI6IHN0cmluZyA9IGNvbC5nZXRUYWcoVEFHUy5hbHBoYWJldElzTXVsdGljaGFyKTtcbiAgICBpZiAoc3JjQWxwaGFiZXRJc011bHRpY2hhciAhPT0gdW5kZWZpbmVkKVxuICAgICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLmFscGhhYmV0SXNNdWx0aWNoYXIsIHNyY0FscGhhYmV0SXNNdWx0aWNoYXIpO1xuXG4gICAgaWYgKHRhcmdldE5vdGF0aW9uID09IE5PVEFUSU9OLkhFTE0pIHtcbiAgICAgIHNyY0FscGhhYmV0U2l6ZSA9IHRoaXMuZ2V0QWxwaGFiZXRTaXplKCkudG9TdHJpbmcoKTtcbiAgICAgIG5ld0NvbHVtbi5zZXRUYWcoVEFHUy5hbHBoYWJldFNpemUsIHNyY0FscGhhYmV0U2l6ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgZW1wdHkgY29sdW1uIHVzaW5nIHRlbXBsYXRlQ29sIGFzIGEgdGVtcGxhdGVcbiAgICpcbiAgICogQHBhcmFtIHtERy5Db2x1bW59IHRlbXBsYXRlQ29sICB0aGUgcHJvcGVydGllcyBhbmQgdW5pdHMgb2YgdGhpcyBjb2x1bW4gYXJlIHVzZWQgYXMgYVxuICAgKiB0ZW1wbGF0ZSB0byBidWlsZCB0aGUgbmV3IG9uZVxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldE5ld0NvbHVtbih0ZW1wbGF0ZUNvbDogREcuQ29sdW1uKTogREcuQ29sdW1uIHtcbiAgICBjb25zdCBjb2w6IFVuaXRzSGFuZGxlciA9IG5ldyBVbml0c0hhbmRsZXIodGVtcGxhdGVDb2wpO1xuICAgIGNvbnN0IHRhcmdldE5vdGF0aW9uID0gY29sLm5vdGF0aW9uO1xuICAgIHJldHVybiBjb2wuZ2V0TmV3Q29sdW1uKHRhcmdldE5vdGF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGhlbHBlciBmdW5jdGlvbiBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgdGhlICd1bml0cycgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0cyAgdGhlIHN0cmluZyB0byBiZSB2YWxpZGF0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdW5pdHNTdHJpbmdJc1ZhbGlkKHVuaXRzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB1bml0cyA9IHVuaXRzLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcHJlZml4ZXMgPSBbTk9UQVRJT04uRkFTVEEsIE5PVEFUSU9OLlNFUEFSQVRPUiwgTk9UQVRJT04uSEVMTV07XG4gICAgY29uc3QgcG9zdGZpeGVzID0gWydybmEnLCAnZG5hJywgJ3B0J107XG5cbiAgICBjb25zdCBwcmVmaXhDcml0ZXJpb24gPSBwcmVmaXhlcy5zb21lKChwKSA9PiB1bml0cy5zdGFydHNXaXRoKHAudG9Mb3dlckNhc2UoKSkpO1xuICAgIHJldHVybiBwcmVmaXhDcml0ZXJpb247XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGNvbHVtbiBvZiBzZW1hbnRpYyB0eXBlIE1BQ1JPTU9MRUNVTEUgZnJvbSB0aGUgbGlzdCBvZlxuICAgKiBzcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gICAgbGVuICB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgY29sdW1uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICBuYW1lICB0aGUgbmFtZSBvZiB0aGUgbmV3IGNvbHVtblxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgdW5pdHMgIHRoZSB1bml0cyBvZiB0aGUgbmV3IGNvbHVtblxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldE5ld0NvbHVtbkZyb21QYXJhbXMoXG4gICAgbGVuOiBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHVuaXRzOiBzdHJpbmdcbiAgKTogREcuQ29sdW1uIHtcbiAgICAvLyBXQVJOSU5HOiBpbiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGlzIGltcG9zc2libGUgdG8gdmVyaWZ5IHRoZSB1bmlxdWVuZXNzXG4gICAgLy8gb2YgdGhlIG5ldyBjb2x1bW4ncyBuYW1lXG4gICAgLy8gVE9ETzogdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB1bml0cyBwYXJhbWV0ZXJcbiAgICBpZiAoIVVuaXRzSGFuZGxlci51bml0c1N0cmluZ0lzVmFsaWQodW5pdHMpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZvcm1hdCBvZiBcXCd1bml0c1xcJyBwYXJhbWV0ZXInKTtcbiAgICBjb25zdCBuZXdDb2x1bW4gPSBERy5Db2x1bW4uZnJvbUxpc3QoJ3N0cmluZycsIG5hbWUsIG5ldyBBcnJheShsZW4pLmZpbGwoJycpKTtcbiAgICBuZXdDb2x1bW4uc2VtVHlwZSA9IERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIHVuaXRzKTtcbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbDogREcuQ29sdW1uKSB7XG4gICAgdGhpcy5fY29sdW1uID0gY29sO1xuICAgIGNvbnN0IHVuaXRzID0gdGhpcy5fY29sdW1uLnRhZ3NbREcuVEFHUy5VTklUU107XG4gICAgaWYgKHVuaXRzICE9PSBudWxsKVxuICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcbiAgICBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaXRzIGFyZSBub3Qgc3BlY2lmaWVkIGluIGNvbHVtbicpO1xuICAgIHRoaXMuX25vdGF0aW9uID0gdGhpcy5nZXROb3RhdGlvbigpO1xuICAgIHRoaXMuX2RlZmF1bHRHYXBTeW1ib2wgPSAodGhpcy5pc0Zhc3RhKCkpID8gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuRkFTVEEgOlxuICAgICAgKHRoaXMuaXNIZWxtKCkpID8gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuSEVMTSA6XG4gICAgICAgIFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LlNFUEFSQVRPUjtcblxuICAgIGlmICghdGhpcy5jb2x1bW4udGFncy5oYXMoVEFHUy5hbGlnbmVkKSkge1xuICAgICAgaWYgKHRoaXMuaXNGYXN0YSgpIHx8IHRoaXMuaXNTZXBhcmF0b3IoKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3IgY29sdW1uICcke3RoaXMuY29sdW1uLm5hbWV9JyBvZiBub3RhdGlvbiAnJHt0aGlzLm5vdGF0aW9ufScgYCArXG4gICAgICAgICAgYHRhZyAnJHtUQUdTLmFsaWduZWR9JyBpcyBtYW5kYXRvcnkuYCk7XG4gICAgfVxuXG4gICAgLy8gaWYgKCF0aGlzLmNvbHVtbi50YWdzLmhhcyhUQUdTLmFscGhhYmV0U2l6ZSkpIHtcbiAgICAvLyAgIGlmICh0aGlzLmlzSGVsbSgpKVxuICAgIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvciBjb2x1bW4gJyR7dGhpcy5jb2x1bW4ubmFtZX0nIG9mIG5vdGF0aW9uICcke3RoaXMubm90YXRpb259JyBgICtcbiAgICAvLyAgICAgICBgdGFnICcke1RBR1MuYWxwaGFiZXRTaXplfScgaXMgbWFuZGF0b3J5LmApO1xuICAgIC8vICAgZWxzZSBpZiAoWydVTiddLmluY2x1ZGVzKHRoaXMuYWxwaGFiZXQpKVxuICAgIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvciBjb2x1bW4gJyR7dGhpcy5jb2x1bW4ubmFtZX0nIG9mIGFscGhhYmV0ICcke3RoaXMuYWxwaGFiZXR9JyBgICtcbiAgICAvLyAgICAgICBgdGFnICcke1RBR1MuYWxwaGFiZXRTaXplfScgaXMgbWFuZGF0b3J5LmApO1xuICAgIC8vIH1cblxuICAgIGlmICghdGhpcy5jb2x1bW4udGFncy5oYXMoVEFHUy5hbHBoYWJldElzTXVsdGljaGFyKSkge1xuICAgICAgaWYgKHRoaXMuaXNIZWxtKCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9yIGNvbHVtbiAnJHt0aGlzLmNvbHVtbi5uYW1lfScgb2Ygbm90YXRpb24gJyR7dGhpcy5ub3RhdGlvbn0nIGAgK1xuICAgICAgICAgIGB0YWcgJyR7VEFHUy5hbHBoYWJldElzTXVsdGljaGFyfScgaXMgbWFuZGF0b3J5LmApO1xuICAgICAgZWxzZSBpZiAoWydVTiddLmluY2x1ZGVzKHRoaXMuYWxwaGFiZXQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvciBjb2x1bW4gJyR7dGhpcy5jb2x1bW4ubmFtZX0nIG9mIGFscGhhYmV0ICcke3RoaXMuYWxwaGFiZXR9JyBgICtcbiAgICAgICAgICBgdGFnICcke1RBR1MuYWxwaGFiZXRJc011bHRpY2hhcn0nIGlzIG1hbmRhdG9yeS5gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -33,4 +33,4 @@ export function getPhylocanvasGlService() {
|
|
|
33
33
|
return svc;
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5bG9jYW52YXMtZ2wtdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGh5bG9jYW52YXMtZ2wtdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFXdEMsTUFBTSxDQUFOLElBQVksY0FRWDtBQVJELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixzREFBc0Q7SUFDdEQsNkNBQTJCLENBQUE7SUFDM0IsaUNBQWUsQ0FBQTtJQUNmLHVDQUFxQixDQUFBO0lBQ3JCLHdEQUF3RDtJQUN4RCwyQ0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBUlcsY0FBYyxLQUFkLGNBQWMsUUFRekI7QUFzQkQsTUFBTSxPQUFnQix3QkFBd0I7O0FBQzlCLG1DQUFVLEdBQWdDO0lBQ3RELElBQUksRUFBRSxPQUFPO0lBQ2IsSUFBSSxFQUFFLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUM7Q0FDckQsQ0FBQztBQWtCSixNQUFNLFVBQWdCLHVCQUF1Qjs7UUFDM0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFDLENBQUMsQ0FBQztRQUM3RixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7UUFFOUYsTUFBTSxHQUFHLEdBQTZCLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsRUFBOEIsQ0FBQztRQUM3SCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB7SVZpZXdlcn0gZnJvbSAnLi92aWV3ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7TWpvbG5pclBvaW50ZXJFdmVudH0gZnJvbSAnbWpvbG5pci5qcyc7XG5pbXBvcnQge1BpY2tpbmdJbmZvfSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcblxuXG5leHBvcnQgdHlwZSBOb2RlU3R5bGVUeXBlID0geyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9O1xuZXhwb3J0IHR5cGUgU3R5bGVzVHlwZSA9IHsgW25vZGVOYW1lOiBzdHJpbmddOiBOb2RlU3R5bGVUeXBlIH07XG5cbmV4cG9ydCBlbnVtIFRyZWVUeXBlc05hbWVzIHtcbiAgUmFkaWFsID0gJ1JhZGlhbCcsXG4gIC8qKiBSZWN0YW5ndWxhciBlZGdlcywgbGVhdmVzIGxpc3RlZCBfX3ZlcnRpY2FsbHlfXyAqL1xuICBSZWN0YW5ndWxhciA9ICdSZWN0YW5ndWxhcicsXG4gIFBvbGFyID0gJ1BvbGFyJyxcbiAgRGlhZ29uYWwgPSAnRGlhZ29uYWwnLFxuICAvKiogUmVjdGFuZ3VsYXIgZWRnZXMsIGxlYXZlcyBsaXN0ZWQgX19ob3Jpem9udGFsbHlfXyAqL1xuICBPcnRob2dvbmFsID0gJ09ydGhvZ29uYWwnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQaHlsb2NhbnZhc0dsVmlld2VyIGV4dGVuZHMgSVZpZXdlciB7XG4gIGdldCBud2tEZigpOiBERy5EYXRhRnJhbWU7XG5cbiAgc2V0IG53a0RmKHZhbHVlOiBERy5EYXRhRnJhbWUpO1xuXG4gIHNldFByb3BzKHVwZGF0ZXI6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSk6IHZvaWQ7XG5cbiAgZ2V0IG9uQWZ0ZXJSZW5kZXIoKTogT2JzZXJ2YWJsZTx7IGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQgfT47XG5cbiAgZ2V0IG9uSG92ZXIoKTogT2JzZXJ2YWJsZTx7IGluZm86IFBpY2tpbmdJbmZvLCBldmVudDogTWpvbG5pclBvaW50ZXJFdmVudCB9Pjtcbn1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBJUGh5bG9jYW52YXNHbFJlbmRlcmVyIHtcbi8vICAgZ2V0IG9uQWZ0ZXJSZW5kZXIoKTogT2JzZXJ2YWJsZTxIVE1MQ2FudmFzRWxlbWVudD47XG4vLyB9XG5cbmV4cG9ydCB0eXBlIFBoeWxvY2FudmFzR2xUYXNrID0geyBuYW1lOiBzdHJpbmcsIGJhY2tDb2xvcjogbnVtYmVyLCBwcm9wczogeyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9LCBvbkFmdGVyUmVuZGVyOiBDYW52YXNDYWxsYmFjayB9O1xuXG5leHBvcnQgdHlwZSBDYW52YXNDYWxsYmFjayA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSA9PiB2b2lkO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGh5bG9jYW52YXNHbFNlcnZpY2VCYXNlIHtcbiAgcHVibGljIHN0YXRpYyBub25lU291cmNlOiB7IHR5cGU6IHN0cmluZywgZGF0YTogYW55IH0gPSB7XG4gICAgdHlwZTogJ2Jpb2pzJyxcbiAgICBkYXRhOiB7bmFtZTogJ25vbmUnLCBicmFuY2hfbGVuZ3RoOiAxLCBjaGlsZHJlbjogW119XG4gIH07XG5cbiAgLyoqIFF1ZXVlcyBQaHlsb2NhbnZhc0dMIHJlbmRlciB0YXNrXG4gICAqIEBwYXJhbSBrZXkgIFNwZWNpZnkgdG8gc2tpcCBwcmV2aW91c2x5IHF1ZXVlZCB0YXNrcyB3aXRoIHRoZSBzYW1lIGtleVxuICAgKi9cbiAgYWJzdHJhY3QgcmVuZGVyKGFyZ3M6IFBoeWxvY2FudmFzR2xUYXNrLCBrZXk/
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5bG9jYW52YXMtZ2wtdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGh5bG9jYW52YXMtZ2wtdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFXdEMsTUFBTSxDQUFOLElBQVksY0FRWDtBQVJELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixzREFBc0Q7SUFDdEQsNkNBQTJCLENBQUE7SUFDM0IsaUNBQWUsQ0FBQTtJQUNmLHVDQUFxQixDQUFBO0lBQ3JCLHdEQUF3RDtJQUN4RCwyQ0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBUlcsY0FBYyxLQUFkLGNBQWMsUUFRekI7QUFzQkQsTUFBTSxPQUFnQix3QkFBd0I7O0FBQzlCLG1DQUFVLEdBQWdDO0lBQ3RELElBQUksRUFBRSxPQUFPO0lBQ2IsSUFBSSxFQUFFLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUM7Q0FDckQsQ0FBQztBQWtCSixNQUFNLFVBQWdCLHVCQUF1Qjs7UUFDM0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFDLENBQUMsQ0FBQztRQUM3RixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7UUFFOUYsTUFBTSxHQUFHLEdBQTZCLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsRUFBOEIsQ0FBQztRQUM3SCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB7SVZpZXdlcn0gZnJvbSAnLi92aWV3ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7TWpvbG5pclBvaW50ZXJFdmVudH0gZnJvbSAnbWpvbG5pci5qcyc7XG5pbXBvcnQge1BpY2tpbmdJbmZvfSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcblxuXG5leHBvcnQgdHlwZSBOb2RlU3R5bGVUeXBlID0geyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9O1xuZXhwb3J0IHR5cGUgU3R5bGVzVHlwZSA9IHsgW25vZGVOYW1lOiBzdHJpbmddOiBOb2RlU3R5bGVUeXBlIH07XG5cbmV4cG9ydCBlbnVtIFRyZWVUeXBlc05hbWVzIHtcbiAgUmFkaWFsID0gJ1JhZGlhbCcsXG4gIC8qKiBSZWN0YW5ndWxhciBlZGdlcywgbGVhdmVzIGxpc3RlZCBfX3ZlcnRpY2FsbHlfXyAqL1xuICBSZWN0YW5ndWxhciA9ICdSZWN0YW5ndWxhcicsXG4gIFBvbGFyID0gJ1BvbGFyJyxcbiAgRGlhZ29uYWwgPSAnRGlhZ29uYWwnLFxuICAvKiogUmVjdGFuZ3VsYXIgZWRnZXMsIGxlYXZlcyBsaXN0ZWQgX19ob3Jpem9udGFsbHlfXyAqL1xuICBPcnRob2dvbmFsID0gJ09ydGhvZ29uYWwnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQaHlsb2NhbnZhc0dsVmlld2VyIGV4dGVuZHMgSVZpZXdlciB7XG4gIGdldCBud2tEZigpOiBERy5EYXRhRnJhbWU7XG5cbiAgc2V0IG53a0RmKHZhbHVlOiBERy5EYXRhRnJhbWUpO1xuXG4gIHNldFByb3BzKHVwZGF0ZXI6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSk6IHZvaWQ7XG5cbiAgZ2V0IG9uQWZ0ZXJSZW5kZXIoKTogT2JzZXJ2YWJsZTx7IGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQgfT47XG5cbiAgZ2V0IG9uSG92ZXIoKTogT2JzZXJ2YWJsZTx7IGluZm86IFBpY2tpbmdJbmZvLCBldmVudDogTWpvbG5pclBvaW50ZXJFdmVudCB9Pjtcbn1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBJUGh5bG9jYW52YXNHbFJlbmRlcmVyIHtcbi8vICAgZ2V0IG9uQWZ0ZXJSZW5kZXIoKTogT2JzZXJ2YWJsZTxIVE1MQ2FudmFzRWxlbWVudD47XG4vLyB9XG5cbmV4cG9ydCB0eXBlIFBoeWxvY2FudmFzR2xUYXNrID0geyBuYW1lOiBzdHJpbmcsIGJhY2tDb2xvcjogbnVtYmVyLCBwcm9wczogeyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9LCBvbkFmdGVyUmVuZGVyOiBDYW52YXNDYWxsYmFjayB9O1xuXG5leHBvcnQgdHlwZSBDYW52YXNDYWxsYmFjayA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSA9PiB2b2lkO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGh5bG9jYW52YXNHbFNlcnZpY2VCYXNlIHtcbiAgcHVibGljIHN0YXRpYyBub25lU291cmNlOiB7IHR5cGU6IHN0cmluZywgZGF0YTogYW55IH0gPSB7XG4gICAgdHlwZTogJ2Jpb2pzJyxcbiAgICBkYXRhOiB7bmFtZTogJ25vbmUnLCBicmFuY2hfbGVuZ3RoOiAxLCBjaGlsZHJlbjogW119XG4gIH07XG5cbiAgLyoqIFF1ZXVlcyBQaHlsb2NhbnZhc0dMIHJlbmRlciB0YXNrXG4gICAqIEBwYXJhbSBrZXkgIFNwZWNpZnkgdG8gc2tpcCBwcmV2aW91c2x5IHF1ZXVlZCB0YXNrcyB3aXRoIHRoZSBzYW1lIGtleVxuICAgKi9cbiAgYWJzdHJhY3QgcmVuZGVyKGFyZ3M6IFBoeWxvY2FudmFzR2xUYXNrLCBrZXk/OiBrZXlvZiBhbnkpOiB2b2lkO1xuXG4gIC8qKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHJlbmRlcmluZyB0cmVlIG9uIGdyaWQgY2VsbFxuICAgKiBAcGFyYW0gZ0N0eCAgICBDb250ZXh0IHRvIGRyYXcgb24gZ3JpZFxuICAgKiBAcGFyYW0gYmQgICAgICBCb3VuZCByZWN0IHRvIGNsaXAgZHJhd2luZyBvbiB0YXNrIG1vbWVudFxuICAgKiBAcGFyYW0gZ0NlbGwgICBHcmlkIGNlbGwgdG8gZHJhd1xuICAgKiBAcGFyYW0gY2FudmFzICBJbWFnZSBvZiB0aGUgdHJlZSByZW5kZXJlZFxuICAgKi9cbiAgYWJzdHJhY3QgcmVuZGVyT25HcmlkQ2VsbChcbiAgICBnQ3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGJkOiBERy5SZWN0LCBnQ2VsbDogREcuR3JpZENlbGwsIGNhbnZhczogQ2FudmFzSW1hZ2VTb3VyY2UpOiB2b2lkO1xufVxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQaHlsb2NhbnZhc0dsU2VydmljZSgpOiBQcm9taXNlPFBoeWxvY2FudmFzR2xTZXJ2aWNlQmFzZT4ge1xuICBjb25zdCBmdW5jTGlzdCA9IERHLkZ1bmMuZmluZCh7cGFja2FnZTogJ1BoeWxvVHJlZVZpZXdlcicsIG5hbWU6ICdnZXRQaHlsb2NhbnZhc0dsU2VydmljZSd9KTtcbiAgaWYgKGZ1bmNMaXN0Lmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhY2thZ2UgXCJQaHlsb1RyZWVWaWV3ZXJcIlwiIG11c3QgYmUgaW5zdGFsbGVkIGZvciBQaHlsb2NhbnZhc0dMIHNlcnZpY2VzLicpO1xuXG4gIGNvbnN0IHN2YzogUGh5bG9jYW52YXNHbFNlcnZpY2VCYXNlID0gKGF3YWl0IGZ1bmNMaXN0WzBdLnByZXBhcmUoKS5jYWxsKCkpLmdldE91dHB1dFBhcmFtVmFsdWUoKSBhcyBQaHlsb2NhbnZhc0dsU2VydmljZUJhc2U7XG4gIHJldHVybiBzdmM7XG59XG4iXX0=
|