@glimmer/compiler
Advanced tools
Comparing version 0.23.0-alpha.10 to 0.23.0-alpha.11
@@ -52,5 +52,3 @@ define('@glimmer/compiler', ['exports', '@glimmer/syntax', '@glimmer/util', '@glimmer/wire-format'], function (exports, _glimmer_syntax, _glimmer_util, _glimmer_wireFormat) { 'use strict'; | ||
ProgramSymbolTable.prototype.get = function get(_name) { | ||
throw _glimmer_util.unreachable(); | ||
}; | ||
ProgramSymbolTable.prototype.get = function get(_name) {}; | ||
@@ -358,3 +356,3 @@ ProgramSymbolTable.prototype.getLocalsMap = function getLocalsMap() { | ||
get: function () { | ||
return _glimmer_util.expect(this.getCurrentFrame(), "Expected a current frame"); | ||
return this.getCurrentFrame(); | ||
} | ||
@@ -624,4 +622,2 @@ }]); | ||
var blocks = this.template.block.blocks; | ||
_glimmer_util.assert(typeof template !== 'number' || blocks[template] !== null, 'missing block in the compiler'); | ||
_glimmer_util.assert(typeof inverse !== 'number' || blocks[inverse] !== null, 'missing block in the compiler'); | ||
this.push([_glimmer_wireFormat.Ops.Block, name, params, hash, blocks[template], blocks[inverse]]); | ||
@@ -749,3 +745,2 @@ }; | ||
var component = this.blocks.pop(); | ||
_glimmer_util.assert(component instanceof ComponentBlock, "Compiler bug: endComponent() should end a component"); | ||
return component.toJSON(); | ||
@@ -763,3 +758,2 @@ }; | ||
JavaScriptCompiler.prototype.prepareObject = function prepareObject(size) { | ||
_glimmer_util.assert(this.values.length >= size, "Expected " + size + " values on the stack, found " + this.values.length); | ||
var keys = new Array(size); | ||
@@ -788,3 +782,2 @@ var values = new Array(size); | ||
JavaScriptCompiler.prototype.popValue = function popValue() { | ||
_glimmer_util.assert(this.values.length, "No expression found on stack"); | ||
return this.values.pop(); | ||
@@ -796,3 +789,3 @@ }; | ||
get: function () { | ||
return _glimmer_util.expect(this.blocks.current, 'Expected a block on the stack'); | ||
return this.blocks.current; | ||
} | ||
@@ -1128,3 +1121,2 @@ }]); | ||
var param = params[i]; | ||
_glimmer_util.assert(this[param.type], "Unimplemented " + param.type + " on TemplateCompiler"); | ||
this[param.type](param); | ||
@@ -1146,3 +1138,2 @@ } | ||
_glimmer_util.assert(this[value.type], "Unimplemented " + value.type + " on TemplateCompiler"); | ||
this[value.type](value); | ||
@@ -1203,3 +1194,3 @@ this.opcode('literal', null, key); | ||
get: function () { | ||
return _glimmer_util.expect(this.symbolStack.current, 'Expected a symbol table on the stack'); | ||
return this.symbolStack.current; | ||
} | ||
@@ -1206,0 +1197,0 @@ }]); |
@@ -141,3 +141,3 @@ "use strict"; | ||
get currentBlock() { | ||
return (0, _util.expect)(this.blocks.current, 'Expected a block on the stack'); | ||
return this.blocks.current; | ||
} | ||
@@ -186,4 +186,2 @@ process() { | ||
let blocks = this.template.block.blocks; | ||
(0, _util.assert)(typeof template !== 'number' || blocks[template] !== null, 'missing block in the compiler'); | ||
(0, _util.assert)(typeof inverse !== 'number' || blocks[inverse] !== null, 'missing block in the compiler'); | ||
this.push([_wireFormat.Ops.Block, name, params, hash, blocks[template], blocks[inverse]]); | ||
@@ -284,3 +282,2 @@ } | ||
let component = this.blocks.pop(); | ||
(0, _util.assert)(component instanceof ComponentBlock, "Compiler bug: endComponent() should end a component"); | ||
return component.toJSON(); | ||
@@ -296,3 +293,2 @@ } | ||
prepareObject(size) { | ||
(0, _util.assert)(this.values.length >= size, `Expected ${size} values on the stack, found ${this.values.length}`); | ||
let keys = new Array(size); | ||
@@ -317,3 +313,2 @@ let values = new Array(size); | ||
popValue() { | ||
(0, _util.assert)(this.values.length, "No expression found on stack"); | ||
return this.values.pop(); | ||
@@ -323,2 +318,2 @@ } | ||
exports.default = JavaScriptCompiler; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImphdmFzY3JpcHQtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLEFBQU8sQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUMsQUFDdkMsQUFBTyxBQUFFLEFBQUssQUFBRSxBQUFPLEFBQVUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUkvRCxBQUFPLEFBTUwsQUFBVSxBQUdWLEFBQUcsQUFDSixBQUFNLEFBQXNCLEFBQUMsQUFROUIsQUFBTTs7O0FBQU47QUFDUyxhQUFVLGFBQWdCLEFBQUUsQUFBQyxBQU90QztBQUFDO0FBSEMsQUFBSSxTQUFDLEFBQW9CO0FBQ3ZCLEFBQUksYUFBQyxBQUFVLFdBQUMsQUFBSSxLQUFDLEFBQVMsQUFBQyxBQUFDLEFBQ2xDO0FBQUMsQUFDRixBQUVELEFBQU07OztNQUFtQixvQkFBUSxBQUFLO0FBQ3BDLGdCQUFtQixBQUF1QjtBQUN4QyxBQUFLLEFBQUUsQUFBQztBQURTLGFBQUssUUFBTCxBQUFLLEFBQWtCLEFBRTFDO0FBQUM7QUFFRCxBQUFNO0FBQ0osQUFBTTtBQUNKLEFBQVUsd0JBQUUsQUFBSSxLQUFDLEFBQVU7QUFDM0IsQUFBVSx3QkFBRSxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUssQUFDN0IsQUFBQyxBQUNKO0FBSlM7QUFJUixBQUNGLEFBRUQsQUFBTTs7O01BQXFCLHNCQUFRLEFBQUs7QUFXdEMsZ0JBQW9CLEFBQStCO0FBQ2pELEFBQUssQUFBRSxBQUFDO0FBRFUsYUFBVyxjQUFYLEFBQVcsQUFBb0I7QUFWNUMsYUFBSSxPQUFHLEFBQVUsQUFBQztBQUNsQixhQUFNLFNBQUcsQUFBSSxBQUFPLEFBQVUsQUFBQztBQUMvQixhQUFLLFFBQUcsQUFBSSxBQUFPLEFBQVUsQUFBQztBQUM5QixhQUFPLFVBQWdCLEFBQUUsQUFBQztBQUMxQixhQUFJLE9BQTZCLEFBQUUsQUFB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QUFBQyxBQUFDLEFBQUMsQUFDdkM7QUFBQztBQUVELEFBQWE7QUFFYixBQUFJLFNBQUMsQUFBZTtBQUNsQixlQUFPLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBTSxTQUFHLEFBQUMsQUFBQyxPQUFLLEFBQUksTUFBRSxBQUFDO0FBQ3RDLEFBQUksaUJBQUMsQUFBRyxBQUFFLEFBQUMsQUFDYjtBQUFDO0FBRUQsQUFBSSxhQUFDLEFBQVksYUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUMsQUFDL0I7QUFBQztBQUVELEFBQVMsY0FBdUMsQUFBTTtBQUNwRCxBQUFJLGFBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFHLEFBQUMsQUFBQyxBQUN4QjtBQUFDO0FBRUQsQUFBUTtBQUNOLEFBQU0sMEJBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFNLFFBQUUsQUFBOEIsQUFBQyxBQUFDO0FBQzNELEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUcsQUFBTyxBQUFDLEFBQ2hDO0FBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFdpcmVGb3JtYXQgZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFN0YWNrLCBEaWN0U2V0LCBPcHRpb24sIGV4cGVjdCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQmxvY2tTeW1ib2xUYWJsZSwgUHJvZ3JhbVN5bWJvbFRhYmxlIH0gZnJvbSAnLi90ZW1wbGF0ZS12aXNpdG9yJztcblxuaW1wb3J0IHtcbiAgVGVtcGxhdGVNZXRhLFxuICBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayxcbiAgU2VyaWFsaXplZFRlbXBsYXRlLFxuICBDb3JlLFxuICBTdGF0ZW1lbnQsXG4gIFN0YXRlbWVudHMsXG4gIEV4cHJlc3Npb24sXG4gIEV4cHJlc3Npb25zLFxuICBPcHNcbn0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuXG5leHBvcnQgdHlwZSBzdHIgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBQYXJhbXMgPSBDb3JlLlBhcmFtcztcbmV4cG9ydCB0eXBlIEhhc2ggPSBDb3JlLkhhc2g7XG5leHBvcnQgdHlwZSBQYXRoID0gQ29yZS5QYXRoO1xuZXhwb3J0IHR5cGUgU3RhY2tWYWx1ZSA9IEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoIHwgc3RyO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2sge1xuICBwdWJsaWMgc3RhdGVtZW50czogU3RhdGVtZW50W10gPSBbXTtcblxuICBhYnN0cmFjdCB0b0pTT04oKTogT2JqZWN0O1xuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmxpbmVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgdHlwZSA9IFwidGVtcGxhdGVcIjtcbiAgcHVibGljIHlpZWxkcyA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIG5hbWVkID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgcHJlbHVkZTogU3RhdGVtZW50W10gPSBbXTtcbiAgcHVibGljIGhlYWQ6IFN0YXRlbWVudHMuRWxlbWVudEhlYWRbXSA9IFtdO1xuICBwdWJsaWMgYmxvY2tzOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9ja1tdID0gW107XG4gIHB1YmxpYyBoYXNFdmFsID0gZmFsc2U7XG4gIHByaXZhdGUgc2F3RWxlbWVudCA9IGZhbHNlO1xuICBwcml2YXRlIGluUGFyYW1zID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzeW1ib2xUYWJsZTogUHJvZ3JhbVN5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuc2F3RWxlbWVudCkge1xuICAgICAgaWYgKFN0YXRlbWVudHMuaXNPcGVuRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuc2F3RWxlbWVudCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByZWx1ZGUucHVzaChzdGF0ZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgaWYgKFN0YXRlbWVudHMuaXNGbHVzaEVsZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmluUGFyYW1zID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGVhZC5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNJbkVsZW1lbnRIZWFkKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5oZWFkLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogb25seSBwYXJhbWV0ZXJzIGFsbG93ZWQgYmVmb3JlIGZsdXNoLWVsZW1lbnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xzOiB0aGlzLnN5bWJvbFRhYmxlLnN5bWJvbHMsXG4gICAgICBwcmVsdWRlOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLnByZWx1ZGUgOiBudWxsLFxuICAgICAgaGVhZDogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5oZWFkIDogbnVsbCxcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMuc3RhdGVtZW50cyA6IHRoaXMucHJlbHVkZSxcbiAgICAgIGhhc0V2YWw6IHRoaXMuaGFzRXZhbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgYXR0cmlidXRlczogU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSA9IFtdO1xuICBwdWJsaWMgYXJndW1lbnRzOiBTdGF0ZW1lbnRzLkFyZ3VtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBpblBhcmFtcyA9IHRydWU7XG4gIHB1YmxpYyBwb3NpdGlvbmFsczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgaWYgKFN0YXRlbWVudHMuaXNGbHVzaEVsZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmluUGFyYW1zID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNBcmd1bWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXJndW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0F0dHJpYnV0ZShzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNNb2RpZmllcihzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogRWxlbWVudCBtb2RpZmllcnMgYXJlIG5vdCBhbGxvd2VkIGluIGNvbXBvbmVudHMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogb25seSBwYXJhbWV0ZXJzIGFsbG93ZWQgYmVmb3JlIGZsdXNoLWVsZW1lbnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogW1dpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSwgV2lyZUZvcm1hdC5Db3JlLkhhc2gsIE9wdGlvbjxXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jaz5dIHtcbiAgICBsZXQgYXJncyA9IHRoaXMuYXJndW1lbnRzO1xuICAgIGxldCBrZXlzID0gYXJncy5tYXAoYXJnID0+IGFyZ1sxXSk7XG4gICAgbGV0IHZhbHVlcyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMl0pO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgIFtrZXlzLCB2YWx1ZXNdLFxuICAgICAge1xuICAgICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICAgIH1cbiAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZTxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHB1YmxpYyBibG9jazogVGVtcGxhdGVCbG9jaztcblxuICBjb25zdHJ1Y3RvcihzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIHB1YmxpYyBtZXRhOiBUKSB7XG4gICAgdGhpcy5ibG9jayA9IG5ldyBUZW1wbGF0ZUJsb2NrKHN5bWJvbHMpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRUZW1wbGF0ZTxUPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJsb2NrOiB0aGlzLmJsb2NrLnRvSlNPTigpLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0Q29tcGlsZXI8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ge1xuICBzdGF0aWMgcHJvY2VzczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPihvcGNvZGVzOiBhbnlbXSwgc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlLCBtZXRhOiBUKTogVGVtcGxhdGU8VD4ge1xuICAgIGxldCBjb21waWxlciA9IG5ldyBKYXZhU2NyaXB0Q29tcGlsZXI8VD4ob3Bjb2Rlcywgc3ltYm9scywgbWV0YSk7XG4gICAgcmV0dXJuIGNvbXBpbGVyLnByb2Nlc3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlPFQ+O1xuICBwcml2YXRlIGJsb2NrcyA9IG5ldyBTdGFjazxCbG9jaz4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXTtcbiAgcHJpdmF0ZSB2YWx1ZXM6IFN0YWNrVmFsdWVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIG1ldGE6IFQpIHtcbiAgICB0aGlzLm9wY29kZXMgPSBvcGNvZGVzO1xuICAgIHRoaXMudGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoc3ltYm9scywgbWV0YSk7XG4gIH1cblxuICBnZXQgY3VycmVudEJsb2NrKCk6IEJsb2NrIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tzLmN1cnJlbnQsICdFeHBlY3RlZCBhIGJsb2NrIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZTxUPiB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2sobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogbnVtYmVyLCBpbnZlcnNlOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG4gICAgYXNzZXJ0KHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW3RlbXBsYXRlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG4gICAgYXNzZXJ0KHR5cGVvZiBpbnZlcnNlICE9PSAnbnVtYmVyJyB8fCBibG9ja3NbaW52ZXJzZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuQmxvY2ssIG5hbWUsIHBhcmFtcywgaGFzaCwgYmxvY2tzW3RlbXBsYXRlXSwgYmxvY2tzW2ludmVyc2VdXSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuc3RhcnRDb21wb25lbnQoZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmJsb2NrUGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogPCR7ZWxlbWVudC50YWd9PiBpcyBub3QgYSBjb21wb25lbnQgYW5kIGRvZXNuJ3Qgc3VwcG9ydCBibG9jayBwYXJhbWV0ZXJzYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLk9wZW5FbGVtZW50LCB0YWddKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaEVsZW1lbnQoKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRmx1c2hFbGVtZW50XSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHRhZyA9IGVsZW1lbnQudGFnO1xuXG4gICAgaWYgKHRhZy5pbmRleE9mKCctJykgIT09IC0xKSB7XG4gICAgICBsZXQgW2F0dHJzLCBhcmdzLCBibG9ja10gPSB0aGlzLmVuZENvbXBvbmVudCgpO1xuICAgICAgdGhpcy5wdXNoKFtPcHMuQ29tcG9uZW50LCB0YWcsIGF0dHJzLCBhcmdzLCBibG9ja10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5DbG9zZUVsZW1lbnRdKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWNBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgZHluYW1pY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgdHJ1c3RpbmdBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuVHJ1c3RpbmdBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBzdGF0aWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlN0YXRpY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIGR5bmFtaWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICB5aWVsZCh0bzogbnVtYmVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIHRoaXMucHVzaChbT3BzLllpZWxkLCB0bywgcGFyYW1zXSk7XG4gIH1cblxuICBkZWJ1Z2dlcihldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIHRoaXMucHVzaChbT3BzLkRlYnVnZ2VyLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9jaz4oW09wcy5IYXNCbG9jaywgbmFtZV0pO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMobmFtZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGFzQmxvY2tQYXJhbXM+KFtPcHMuSGFzQmxvY2tQYXJhbXMsIG5hbWVdKTtcbiAgfVxuXG4gIHBhcnRpYWwoZXZhbEluZm86IENvcmUuRXZhbEluZm8pIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuUGFydGlhbCwgcGFyYW1zWzBdLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICAvLy8gRXhwcmVzc2lvbnNcblxuICBsaXRlcmFsKHZhbHVlOiBFeHByZXNzaW9ucy5WYWx1ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5VbmRlZmluZWQ+KFtPcHMuVW5kZWZpbmVkXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlZhbHVlPih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdW5rbm93bihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Vbmtub3duPihbT3BzLlVua25vd24sIG5hbWVdKTtcbiAgfVxuXG4gIGdldChoZWFkOiBudW1iZXIsIHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuR2V0PihbT3BzLkdldCwgaGVhZCwgcGF0aF0pO1xuICB9XG5cbiAgbWF5YmVMb2NhbChwYXRoOiBzdHJpbmdbXSkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLk1heWJlTG9jYWw+KFtPcHMuTWF5YmVMb2NhbCwgcGF0aF0pO1xuICB9XG5cbiAgY29uY2F0KCkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkNvbmNhdD4oW09wcy5Db25jYXQsIHRoaXMucG9wVmFsdWU8UGFyYW1zPigpXSk7XG4gIH1cblxuICBoZWxwZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGVscGVyPihbT3BzLkhlbHBlciwgbmFtZSwgcGFyYW1zLCBoYXNoXSk7XG4gIH1cblxuICAvLy8gU3RhY2sgTWFuYWdlbWVudCBPcGNvZGVzXG5cbiAgc3RhcnRDb21wb25lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRCbG9jayhlbGVtZW50WydzeW1ib2xzJ10pO1xuICAgIHRoaXMuYmxvY2tzLnB1c2goY29tcG9uZW50KTtcbiAgfVxuXG4gIGVuZENvbXBvbmVudCgpOiBbV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBXaXJlRm9ybWF0LkNvcmUuSGFzaCwgT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmJsb2Nrcy5wb3AoKTtcbiAgICBhc3NlcnQoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50QmxvY2ssIFwiQ29tcGlsZXIgYnVnOiBlbmRDb21wb25lbnQoKSBzaG91bGQgZW5kIGEgY29tcG9uZW50XCIpO1xuICAgIHJldHVybiAoY29tcG9uZW50IGFzIENvbXBvbmVudEJsb2NrKS50b0pTT04oKTtcbiAgfVxuXG4gIHByZXBhcmVBcnJheShzaXplOiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkgYXMgRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8UGFyYW1zPih2YWx1ZXMpO1xuICB9XG5cbiAgcHJlcGFyZU9iamVjdChzaXplOiBudW1iZXIpIHtcbiAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoID49IHNpemUsIGBFeHBlY3RlZCAke3NpemV9IHZhbHVlcyBvbiB0aGUgc3RhY2ssIGZvdW5kICR7dGhpcy52YWx1ZXMubGVuZ3RofWApO1xuXG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KHNpemUpO1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBrZXlzW2ldID0gdGhpcy5wb3BWYWx1ZTxzdHI+KCk7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8SGFzaD4oW2tleXMsIHZhbHVlc10pO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIHB1c2goYXJnczogU3RhdGVtZW50KSB7XG4gICAgd2hpbGUgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gbnVsbCkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbG9jay5wdXNoKGFyZ3MpO1xuICB9XG5cbiAgcHVzaFZhbHVlPFMgZXh0ZW5kcyBFeHByZXNzaW9uIHwgUGFyYW1zIHwgSGFzaD4odmFsOiBTKSB7XG4gICAgdGhpcy52YWx1ZXMucHVzaCh2YWwpO1xuICB9XG5cbiAgcG9wVmFsdWU8VCBleHRlbmRzIFN0YWNrVmFsdWU+KCk6IFQge1xuICAgIGFzc2VydCh0aGlzLnZhbHVlcy5sZW5ndGgsIFwiTm8gZXhwcmVzc2lvbiBmb3VuZCBvbiBzdGFja1wiKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMucG9wKCkgYXMgVDtcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImphdmFzY3JpcHQtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLEFBQU8sQUFBRSxBQUFLLEFBQUUsQUFBTyxBQUFVLEFBQU0sQUFBZSxBQUFDOztBQUl2RCxBQUFPLEFBTUwsQUFBVSxBQUdWLEFBQUcsQUFDSixBQUFNLEFBQXNCLEFBQUMsQUFROUIsQUFBTTs7O0FBQU47QUFDUyxhQUFVLGFBQWdCLEFBQUUsQUFBQyxBQU90QztBQUFDO0FBSEMsQUFBSSxTQUFDLEFBQW9CO0FBQ3ZCLEFBQUksYUFBQyxBQUFVLFdBQUMsQUFBSSxLQUFDLEFBQVMsQUFBQyxBQUFDLEFBQ2xDO0FBQUMsQUFDRixBQUVELEFBQU07OztNQUFtQixvQkFBUSxBQUFLO0FBQ3BDLGdCQUFtQixBQUF1QjtBQUN4QyxBQUFLLEFBQUUsQUFBQztBQURTLGFBQUssUUFBTCxBQUFLLEFBQWtCLEFBRTFDO0FBQUM7QUFFRCxBQUFNO0FBQ0osQUFBTTtBQUNKLEFBQVUsd0JBQUUsQUFBSSxLQUFDLEFBQVU7QUFDM0IsQUFBVSx3QkFBRSxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUssQUFDN0IsQUFBQyxBQUNKO0FBSlM7QUFJUixBQUNGLEFBRUQsQUFBTTs7O01BQXFCLHNCQUFRLEFBQUs7QUFXdEMsZ0JBQW9CLEFBQStCO0FBQ2pELEFBQUssQUFBRSxBQUFDO0FBRFUsYUFBVyxjQUFYLEFBQVcsQUFBb0I7QUFWNUMsYUFBSSxPQUFHLEFBQVUsQUFBQztBQUNsQixhQUFNLFNBQUcsQUFBSSxBQUFPLEFBQVUsQUFBQztBQUMvQixhQUFLLFFBQUcsQUFBSSxBQUFPLEFBQVUsQUFBQztBQUM5QixhQUFPLFVBQWdCLEFBQUUsQUFBQztBQUMxQixhQUFJLE9BQTZCLEFBQUUsQUFBQztBQUNwQyxhQUFNLFNBQXVDLEFBQUUsQUFBQztBQUNoRCxhQUFPLFVBQUcsQUFBSyxB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b20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBTdGFjaywgRGljdFNldCwgT3B0aW9uIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBCbG9ja1N5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUgfSBmcm9tICcuL3RlbXBsYXRlLXZpc2l0b3InO1xuXG5pbXBvcnQge1xuICBUZW1wbGF0ZU1ldGEsXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBTZXJpYWxpemVkVGVtcGxhdGUsXG4gIENvcmUsXG4gIFN0YXRlbWVudCxcbiAgU3RhdGVtZW50cyxcbiAgRXhwcmVzc2lvbixcbiAgRXhwcmVzc2lvbnMsXG4gIE9wc1xufSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmV4cG9ydCB0eXBlIHN0ciA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBhcmFtcyA9IENvcmUuUGFyYW1zO1xuZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcbmV4cG9ydCB0eXBlIFBhdGggPSBDb3JlLlBhdGg7XG5leHBvcnQgdHlwZSBTdGFja1ZhbHVlID0gRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2ggfCBzdHI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9jayB7XG4gIHB1YmxpYyBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIGFic3RyYWN0IHRvSlNPTigpOiBPYmplY3Q7XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdG9KU09OKCk6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyB0eXBlID0gXCJ0ZW1wbGF0ZVwiO1xuICBwdWJsaWMgeWllbGRzID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgbmFtZWQgPSBuZXcgRGljdFNldDxzdHJpbmc+KCk7XG4gIHB1YmxpYyBwcmVsdWRlOiBTdGF0ZW1lbnRbXSA9IFtdO1xuICBwdWJsaWMgaGVhZDogU3RhdGVtZW50cy5FbGVtZW50SGVhZFtdID0gW107XG4gIHB1YmxpYyBibG9ja3M6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrW10gPSBbXTtcbiAgcHVibGljIGhhc0V2YWwgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzYXdFbGVtZW50ID0gZmFsc2U7XG4gIHByaXZhdGUgaW5QYXJhbXMgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICghdGhpcy5zYXdFbGVtZW50KSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc09wZW5FbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5zYXdFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pblBhcmFtcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJlbHVkZS5wdXNoKHN0YXRlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oZWFkLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0luRWxlbWVudEhlYWQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmhlYWQucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgIHByZWx1ZGU6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMucHJlbHVkZSA6IG51bGwsXG4gICAgICBoZWFkOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLmhlYWQgOiBudWxsLFxuICAgICAgc3RhdGVtZW50czogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5zdGF0ZW1lbnRzIDogdGhpcy5wcmVsdWRlLFxuICAgICAgaGFzRXZhbDogdGhpcy5oYXNFdmFsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG4gIHB1YmxpYyBhcmd1bWVudHM6IFN0YXRlbWVudHMuQXJndW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIGluUGFyYW1zID0gdHJ1ZTtcbiAgcHVibGljIHBvc2l0aW9uYWxzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0FyZ3VtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChTdGF0ZW1lbnRzLmlzQXR0cmlidXRlKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBFbGVtZW50IG1vZGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBbV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBXaXJlRm9ybWF0LkNvcmUuSGFzaCwgT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBhcmdzID0gdGhpcy5hcmd1bWVudHM7XG4gICAgbGV0IGtleXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzFdKTtcbiAgICBsZXQgdmFsdWVzID0gYXJncy5tYXAoYXJnID0+IGFyZ1syXSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgW2tleXMsIHZhbHVlc10sXG4gICAgICB7XG4gICAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgfVxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgcHVibGljIGJsb2NrOiBUZW1wbGF0ZUJsb2NrO1xuXG4gIGNvbnN0cnVjdG9yKHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSwgcHVibGljIG1ldGE6IFQpIHtcbiAgICB0aGlzLmJsb2NrID0gbmV3IFRlbXBsYXRlQmxvY2soc3ltYm9scyk7XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlPFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYmxvY2s6IHRoaXMuYmxvY2sudG9KU09OKCksXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphdmFTY3JpcHRDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBwcm9jZXNzPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIG1ldGE6IFQpOiBUZW1wbGF0ZTxUPiB7XG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IEphdmFTY3JpcHRDb21waWxlcjxUPihvcGNvZGVzLCBzeW1ib2xzLCBtZXRhKTtcbiAgICByZXR1cm4gY29tcGlsZXIucHJvY2VzcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZTogVGVtcGxhdGU8VD47XG4gIHByaXZhdGUgYmxvY2tzID0gbmV3IFN0YWNrPEJsb2NrPigpO1xuICBwcml2YXRlIG9wY29kZXM6IGFueVtdO1xuICBwcml2YXRlIHZhbHVlczogU3RhY2tWYWx1ZVtdID0gW107XG5cbiAgY29uc3RydWN0b3Iob3Bjb2RlczogYW55W10sIHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSwgbWV0YTogVCkge1xuICAgIHRoaXMub3Bjb2RlcyA9IG9wY29kZXM7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShzeW1ib2xzLCBtZXRhKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50QmxvY2soKTogQmxvY2sge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5jdXJyZW50O1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZTxUPiB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2sobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogbnVtYmVyLCBpbnZlcnNlOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG5cbiAgICB0aGlzLnB1c2goW09wcy5CbG9jaywgbmFtZSwgcGFyYW1zLCBoYXNoLCBibG9ja3NbdGVtcGxhdGVdLCBibG9ja3NbaW52ZXJzZV1dKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmICh0YWcuaW5kZXhPZignLScpICE9PSAtMSkge1xuICAgICAgdGhpcy5zdGFydENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYmxvY2tQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiA8JHtlbGVtZW50LnRhZ30+IGlzIG5vdCBhIGNvbXBvbmVudCBhbmQgZG9lc24ndCBzdXBwb3J0IGJsb2NrIHBhcmFtZXRlcnNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlbkVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICB0aGlzLnB1c2goW09wcy5GbHVzaEVsZW1lbnRdKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgIGxldCBbYXR0cnMsIGFyZ3MsIGJsb2NrXSA9IHRoaXMuZW5kQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLnB1c2goW09wcy5Db21wb25lbnQsIHRhZywgYXR0cnMsIGFyZ3MsIGJsb2NrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLkNsb3NlRWxlbWVudF0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBkeW5hbWljQXR0cihuYW1lOiBzdHIsIG5hbWVzcGFjZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICB0cnVzdGluZ0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5UcnVzdGluZ0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIHN0YXRpY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG5cbiAgZHluYW1pY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuRHluYW1pY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIHlpZWxkKHRvOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuWWllbGQsIHRvLCBwYXJhbXNdKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKGV2YWxJbmZvOiBDb3JlLkV2YWxJbmZvKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRGVidWdnZXIsIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhhc0Jsb2NrPihbT3BzLkhhc0Jsb2NrLCBuYW1lXSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcz4oW09wcy5IYXNCbG9ja1BhcmFtcywgbmFtZV0pO1xuICB9XG5cbiAgcGFydGlhbChldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5QYXJ0aWFsLCBwYXJhbXNbMF0sIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9uc1xuXG4gIGxpdGVyYWwodmFsdWU6IEV4cHJlc3Npb25zLlZhbHVlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVuZGVmaW5lZD4oW09wcy5VbmRlZmluZWRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVmFsdWU+KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1bmtub3duKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVua25vd24+KFtPcHMuVW5rbm93biwgbmFtZV0pO1xuICB9XG5cbiAgZ2V0KGhlYWQ6IG51bWJlciwgcGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5HZXQ+KFtPcHMuR2V0LCBoZWFkLCBwYXRoXSk7XG4gIH1cblxuICBtYXliZUxvY2FsKHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuTWF5YmVMb2NhbD4oW09wcy5NYXliZUxvY2FsLCBwYXRoXSk7XG4gIH1cblxuICBjb25jYXQoKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuQ29uY2F0PihbT3BzLkNvbmNhdCwgdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCldKTtcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IZWxwZXI+KFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcblxuICBzdGFydENvbXBvbmVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEJsb2NrKGVsZW1lbnRbJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChjb21wb25lbnQpO1xuICB9XG5cbiAgZW5kQ29tcG9uZW50KCk6IFtXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXR0cmlidXRlW10sIFdpcmVGb3JtYXQuQ29yZS5IYXNoLCBPcHRpb248V2lyZUZvcm1hdC5TZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgIHJldHVybiAoY29tcG9uZW50IGFzIENvbXBvbmVudEJsb2NrKS50b0pTT04oKTtcbiAgfVxuXG4gIHByZXBhcmVBcnJheShzaXplOiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkgYXMgRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8UGFyYW1zPih2YWx1ZXMpO1xuICB9XG5cbiAgcHJlcGFyZU9iamVjdChzaXplOiBudW1iZXIpIHtcblxuICAgIGxldCBrZXlzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShzaXplKTtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAga2V5c1tpXSA9IHRoaXMucG9wVmFsdWU8c3RyPigpO1xuICAgICAgdmFsdWVzW2ldID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFZhbHVlPEhhc2g+KFtrZXlzLCB2YWx1ZXNdKTtcbiAgfVxuXG4gIC8vLyBVdGlsaXRpZXNcblxuICBwdXNoKGFyZ3M6IFN0YXRlbWVudCkge1xuICAgIHdoaWxlIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IG51bGwpIHtcbiAgICAgIGFyZ3MucG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50QmxvY2sucHVzaChhcmdzKTtcbiAgfVxuXG4gIHB1c2hWYWx1ZTxTIGV4dGVuZHMgRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2g+KHZhbDogUykge1xuICAgIHRoaXMudmFsdWVzLnB1c2godmFsKTtcbiAgfVxuXG4gIHBvcFZhbHVlPFQgZXh0ZW5kcyBTdGFja1ZhbHVlPigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMucG9wKCkgYXMgVDtcbiAgfVxufVxuIl19 |
@@ -41,3 +41,3 @@ "use strict"; | ||
get symbols() { | ||
return (0, _util.expect)(this.symbolStack.current, 'Expected a symbol table on the stack'); | ||
return this.symbolStack.current; | ||
} | ||
@@ -265,3 +265,2 @@ process(actions) { | ||
let param = params[i]; | ||
(0, _util.assert)(this[param.type], `Unimplemented ${param.type} on TemplateCompiler`); | ||
this[param.type](param); | ||
@@ -279,3 +278,2 @@ } | ||
let { key, value } = pairs[i]; | ||
(0, _util.assert)(this[value.type], `Unimplemented ${value.type} on TemplateCompiler`); | ||
this[value.type](value); | ||
@@ -409,2 +407,2 @@ this.opcode('literal', null, key); | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxBQUFPLEFBQXdDLEFBQU0sQUFBb0IsQUFBQzs7OztBQUMxRSxBQUFPLEFBQWdDLEFBQU0sQUFBdUIsQUFBQzs7OztBQUNyRSxBQUFPLEFBQUUsQUFBSyxBQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFlLEFBQUMsQUFDeEQsQUFBTyxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBRS9DLEFBQU8sQUFBTyxBQUFTLEFBQUUsQUFBTSxBQUFpQixBQUFDOzs7O0FBTWpELHdCQUF3QixBQUFVO0FBQ2hDLEFBQU0sV0FBQyxBQUFLLE1BQUMsQUFBTyxZQUFLLEFBQVMsYUFBSSxDQUFDLEFBQUssTUFBQyxBQUFPLEFBQUMsQUFDdkQ7QUFBQyxBQUVELEFBQU0sQUFBQyxBQUFPOztBQWlCWixnQkFBWSxBQUEwQjtBQU45QixhQUFVLGFBQUcsQUFBQyxBQUFDO0FBQ2YsYUFBVyxjQUFhLEFBQUUsQUFBQztBQUMzQixhQUFXLGNBQUcsQUFBSSxBQUFLLEFBQWUsQUFBQztBQUN2QyxhQUFPLFVBQVUsQUFBRSxBQUFDO0FBQ3BCLGFBQVcsY0FBRyxBQUFLLEFBQUM7QUFHMUIsQUFBSSxhQUFDLEFBQU8sVUFBRyxBQUFPLFdBQUksQUFBRSxBQUFDLEFBQy9CO0FBQUM7QUFsQkQsQUFBTSxXQUFDLEFBQU8sUUFBeUIsQUFBMEIsU0FBRSxBQUFnQjtBQUNqRixZQUFJLEFBQWUsa0JBQUcsQUFBSSxBQUFlLEFBQUUsQUFBQztBQUM1QyxBQUFlLHdCQUFDLEFBQUssTUFBQyxBQUFHLEFBQUMsQUFBQztBQUUzQixZQUFJLEFBQVEsV0FBRyxJQUFJLEFBQWdCLGlCQUFDLEFBQU8sQUFBQyxBQUFDO0FBQzdDLFlBQUksQUFBTyxVQUFHLEFBQVEsU0FBQyxBQUFPLFFBQUMs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QUFBTSxXQUFLLEFBQUMsQUFBQyxHQUFDLEFBQUM7QUFDeEIsQUFBTSxlQUFDLEFBQVMsQUFBQyxBQUNuQjtBQUFDLEFBQUMsQUFBSSxXQUFDLEFBQUM7QUFDTixjQUFNLElBQUksQUFBSyxBQUFDLE1BQWlELEFBQUMsQUFBQyxBQUNyRTtBQUFDLEFBQ0g7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZW1wbGF0ZVZpc2l0b3IsIHsgU3ltYm9sVGFibGUsIEFjdGlvbiB9IGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIsIHsgVGVtcGxhdGUgfSBmcm9tIFwiLi9qYXZhc2NyaXB0LWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBTdGFjaywgZ2V0QXR0ck5hbWVzcGFjZSB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBhc3NlcnQsIGV4cGVjdCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1ldGEgfSBmcm9tIFwiQGdsaW1tZXIvd2lyZS1mb3JtYXRcIjtcbmltcG9ydCB7IEFTVCwgaXNMaXRlcmFsIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcblxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlT3B0aW9uczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIG1ldGE6IFQ7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1c3RlZFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlLmVzY2FwZWQgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUuZXNjYXBlZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBjb21waWxlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+LCBhc3Q6IEFTVC5Qcm9ncmFtKTogVGVtcGxhdGU8VD4ge1xuICAgIGxldCB0ZW1wbGF0ZVZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKCk7XG4gICAgdGVtcGxhdGVWaXNpdG9yLnZpc2l0KGFzdCk7XG5cbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgVGVtcGxhdGVDb21waWxlcihvcHRpb25zKTtcbiAgICBsZXQgb3Bjb2RlcyA9IGNvbXBpbGVyLnByb2Nlc3ModGVtcGxhdGVWaXNpdG9yLmFjdGlvbnMpO1xuICAgIHJldHVybiBKYXZhU2NyaXB0Q29tcGlsZXIucHJvY2VzczxUPihvcGNvZGVzLCBhc3RbJ3N5bWJvbHMnXSwgb3B0aW9ucy5tZXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgb3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD47XG4gIHByaXZhdGUgdGVtcGxhdGVJZCA9IDA7XG4gIHByaXZhdGUgdGVtcGxhdGVJZHM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgc3ltYm9sU3RhY2sgPSBuZXcgU3RhY2s8U3ltYm9sVGFibGU+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBpbmNsdWRlTWV0YSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIGdldCBzeW1ib2xzKCk6IFN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuc3ltYm9sU3RhY2suY3VycmVudCwgJ0V4cGVjdGVkIGEgc3ltYm9sIHRhYmxlIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcyhhY3Rpb25zOiBBY3Rpb25bXSk6IEFjdGlvbltdIHtcbiAgICBhY3Rpb25zLmZvckVhY2goKFtuYW1lLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW25hbWVdKSB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCAke25hbWV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTsgfVxuICAgICAgKHRoaXNbbmFtZV0gYXMgYW55KSguLi5hcmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5vcGNvZGVzO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKHByb2dyYW06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICB0aGlzLm9wY29kZSgnc3RhcnRQcm9ncmFtJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2VuZFByb2dyYW0nLCBudWxsKTtcbiAgfVxuXG4gIHN0YXJ0QmxvY2socHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMudGVtcGxhdGVJZCsrO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMudGVtcGxhdGVJZHMucHVzaCh0aGlzLnRlbXBsYXRlSWQgLSAxKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kQmxvY2snLCBudWxsKTtcbiAgfVxuXG4gIHRleHQoW2FjdGlvbl06IFtBU1QuVGV4dE5vZGVdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3RleHQnLCBhY3Rpb24sIGFjdGlvbi5jaGFycyk7XG4gIH1cblxuICBjb21tZW50KFthY3Rpb25dOiBbQVNULkNvbW1lbnRTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2NvbW1lbnQnLCBhY3Rpb24sIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcblxuICAgIHRoaXMub3Bjb2RlKCdvcGVuRWxlbWVudCcsIGFjdGlvbiwgYWN0aW9uKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZShbYWN0aW9uLmF0dHJpYnV0ZXNbaV1dKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5tb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubW9kaWZpZXIoW2FjdGlvbi5tb2RpZmllcnNbaV1dKTtcbiAgICB9XG4gICAgdGhpcy5vcGNvZGUoJ2ZsdXNoRWxlbWVudCcsIG51bGwpO1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChhY3Rpb25bJ3N5bWJvbHMnXSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoW2FjdGlvbl06IFtBU1QuRWxlbWVudE5vZGVdKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnY2xvc2VFbGVtZW50JywgbnVsbCwgYWN0aW9uKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZShbYWN0aW9uXTogW0FTVC5BdHRyTm9kZV0pIHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gYWN0aW9uO1xuXG4gICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG5cbiAgICBsZXQgaXNTdGF0aWMgPSB0aGlzLnByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgLy8gQXJndW1lbnRzXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlzVHJ1c3RpbmcgPSBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVzdGluZykge1xuICAgICAgICB0aGlzLm9wY29kZSgndHJ1c3RpbmdBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vZGlmaWVyKFthY3Rpb25dOiBbQVNULkVsZW1lbnRNb2RpZmllclN0YXRlbWVudF0pIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoYWN0aW9uLnBhdGgsIGFjdGlvbi5sb2MsICdtb2RpZmllcicpO1xuXG4gICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG5cbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICB0aGlzLm9wY29kZSgnbW9kaWZpZXInLCBhY3Rpb24sIHBhcnRzWzBdKTtcbiAgfVxuXG4gIG11c3RhY2hlKFthY3Rpb25dOiBbQVNULk11c3RhY2hlU3RhdGVtZW50XSkge1xuICAgIGxldCB7IHBhdGggfSA9IGFjdGlvbjtcblxuICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNZaWVsZChwYXRoKSkge1xuICAgICAgbGV0IHRvID0gYXNzZXJ0VmFsaWRZaWVsZChhY3Rpb24pO1xuICAgICAgdGhpcy55aWVsZCh0bywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVidWdnZXIocGF0aCkpIHtcbiAgICAgIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShhY3Rpb24pO1xuICAgICAgdGhpcy5kZWJ1Z2dlcignZGVidWdnZXInLCBhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICB9XG4gIH1cblxuICBibG9jayhbYWN0aW9uLyosIGluZGV4LCBjb3VudCovXTogW0FTVC5CbG9ja1N0YXRlbWVudF0pIHtcbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICBsZXQgdGVtcGxhdGVJZCA9IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0c1swXSwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG5cbiAgYXJnKFtwYXRoXTogW0FTVC5QYXRoRXhwcmVzc2lvbl0pIHtcbiAgICBsZXQgeyBwYXJ0czogW2hlYWQsIC4uLnJlc3RdIH0gPSBwYXRoO1xuICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChoZWFkKTtcbiAgICB0aGlzLm9wY29kZSgnZ2V0JywgcGF0aCwgc3ltYm9sLCByZXN0KTtcbiAgfVxuXG4gIG11c3RhY2hlRXhwcmVzc2lvbihleHByOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBleHByLCBwYXRoLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzQnVpbHRJbkhlbHBlcihwYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIgYXMgQVNULkNhbGwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgfSBlbHNlIGlmIChpc0hlbHBlckludm9jYXRpb24oZXhwcikpIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICB9IGVsc2UgaWYgKHBhdGgudGhpcykge1xuICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgdGhpcy5zeW1ib2xzLmdldChoZWFkKSwgcGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgndW5rbm93bicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbWF5YmVMb2NhbCcsIGV4cHIsIHBhdGgucGFydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBTeW50YXhcblxuICB5aWVsZCh0bzogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgneWllbGQnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKHRvKSk7XG4gIH1cblxuICBkZWJ1Z2dlcihfbmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMub3Bjb2RlKCdkZWJ1Z2dlcicsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2hhc0Jsb2NrJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhuYW1lKSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2tQYXJhbXMnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIHBhcnRpYWwoX3BhcmFtczogQVNULkV4cHJlc3Npb25bXSwgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoJ3BhcnRpYWwnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5nZXRFdmFsSW5mbygpKTtcbiAgfVxuXG4gIGJ1aWx0SW5IZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgIGlmIChpc0hhc0Jsb2NrKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9jayhuYW1lLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzSGFzQmxvY2tQYXJhbXMocGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrUGFyYW1zKG5hbWUsIGV4cHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9ucywgaW52b2tlZCByZWN1cnNpdmVseSBmcm9tIHByZXBhcmVQYXJhbXMgYW5kIHByZXBhcmVIYXNoXG5cbiAgU3ViRXhwcmVzc2lvbihleHByOiBBU1QuU3ViRXhwcmVzc2lvbikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwci5wYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgZXhwci5wYXRoLnBhcnRzWzBdKTtcbiAgICB9XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbihleHByOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwci5kYXRhKSB7XG4gICAgICB0aGlzLmFyZyhbZXhwcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBzeW1ib2xzIH0gPSB0aGlzO1xuICAgICAgbGV0IFtoZWFkXSA9IGV4cHIucGFydHM7XG5cbiAgICAgIGlmIChleHByLnRoaXMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfSBlbHNlICBpZiAoc3ltYm9scy5oYXMoaGVhZCkpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIHN5bWJvbHMuZ2V0KGhlYWQpLCBleHByLnBhcnRzLnNsaWNlKDEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBleHByLnBhcnRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBTdHJpbmdMaXRlcmFsKGFjdGlvbjogQVNULlN0cmluZ0xpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBCb29sZWFuTGl0ZXJhbChhY3Rpb246IEFTVC5Cb29sZWFuTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bWJlckxpdGVyYWwoYWN0aW9uOiBBU1QuTnVtYmVyTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bGxMaXRlcmFsKGFjdGlvbjogQVNULk51bGxMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgVW5kZWZpbmVkTGl0ZXJhbChhY3Rpb246IEFTVC5VbmRlZmluZWRMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIG9wY29kZShuYW1lOiBhbnksIGFjdGlvbjogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGxldCBvcGNvZGUgPSBbbmFtZSwgLi4uYXJnc107XG4gICAgaWYgKHRoaXMuaW5jbHVkZU1ldGEgJiYgYWN0aW9uKSB7XG4gICAgICBvcGNvZGUucHVzaCh0aGlzLm1ldGEoYWN0aW9uKSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgfVxuXG4gIHByZXBhcmVIZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoZXhwci5wYXRoLCBleHByLmxvYywgJ2hlbHBlcicpO1xuXG4gICAgbGV0IHsgcGFyYW1zLCBoYXNoIH0gPSBleHByO1xuXG4gICAgdGhpcy5wcmVwYXJlSGFzaChoYXNoKTtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIHByZXBhcmVQYXJhbXMocGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdKSB7XG4gICAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBwYXJhbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBwYXJhbSA9IHBhcmFtc1tpXTtcblxuICAgICAgYXNzZXJ0KHRoaXNbcGFyYW0udHlwZV0sIGBVbmltcGxlbWVudGVkICR7cGFyYW0udHlwZX0gb24gVGVtcGxhdGVDb21waWxlcmApO1xuICAgICAgKHRoaXNbcGFyYW0udHlwZV0gYXMgYW55KShwYXJhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcmFtcy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUhhc2goaGFzaDogQVNULkhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gICAgaWYgKCFwYWlycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhaXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgeyBrZXksIHZhbHVlIH0gPSBwYWlyc1tpXTtcblxuICAgICAgYXNzZXJ0KHRoaXNbdmFsdWUudHlwZV0sIGBVbmltcGxlbWVudGVkICR7dmFsdWUudHlwZX0gb24gVGVtcGxhdGVDb21waWxlcmApO1xuICAgICAgKHRoaXNbdmFsdWUudHlwZV0gYXMgYW55KSh2YWx1ZSk7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGtleSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVPYmplY3QnLCBudWxsLCBwYWlycy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlOiBBU1QuQXR0ck5vZGVbJ3ZhbHVlJ10pIHtcbiAgICAvLyByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgaWYgdGhlIHZhbHVlIGlzIHN0YXRpY1xuXG4gICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgdmFsdWUsIHZhbHVlLmNoYXJzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdNdXN0YWNoZVN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3ZhbHVlXSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMucHJlcGFyZUNvbmNhdFBhcnRzKHZhbHVlLnBhcnRzKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2NvbmNhdCcsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVDb25jYXRQYXJ0cyhwYXJ0czogQVNULkNvbmNhdFN0YXRlbWVudFsncGFydHMnXSkge1xuICAgIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgaWYgKHBhcnQudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFtwYXJ0XSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIHBhcnQuY2hhcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJ0cy5sZW5ndGgpO1xuICB9XG5cbiAgYXR0cmlidXRlTXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgfVxuXG4gIG1ldGEobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgbGV0IGxvYyA9IG5vZGUubG9jO1xuICAgIGlmICghbG9jKSB7IHJldHVybiBbXTsgfVxuXG4gICAgbGV0IHsgc291cmNlLCBzdGFydCwgZW5kIH0gPSBsb2M7XG4gICAgcmV0dXJuIFsgJ2xvYycsIFtzb3VyY2UgfHwgbnVsbCwgW3N0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbl0sIFtlbmQubGluZSwgZW5kLmNvbHVtbl1dIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWxwZXJJbnZvY2F0aW9uKG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBtdXN0YWNoZSBpcyBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgJiB7IHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiB9IHtcbiAgcmV0dXJuIChtdXN0YWNoZS5wYXJhbXMgJiYgbXVzdGFjaGUucGFyYW1zLmxlbmd0aCA+IDApIHx8XG4gICAgKG11c3RhY2hlLmhhc2ggJiYgbXVzdGFjaGUuaGFzaC5wYWlycy5sZW5ndGggPiAwKTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVQYXRoKHsgcGFydHMgfTogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDE7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWwoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24sIHN5bWJvbHM6IFN5bWJvbFRhYmxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzeW1ib2xzICYmIC8qIHBhcnRzLmxlbmd0aCAmJiAqLyBzeW1ib2xzLmhhcyhwYXJ0c1swXSk7XG59XG5cbmZ1bmN0aW9uIGlzWWllbGQocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAneWllbGQnO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRpYWwocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAncGFydGlhbCc7XG59XG5cbmZ1bmN0aW9uIGlzRGVidWdnZXIocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnZGVidWdnZXInO1xufVxuXG5mdW5jdGlvbiBpc0hhc0Jsb2NrKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jayc7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2tQYXJhbXMocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrLXBhcmFtcyc7XG59XG5cbmZ1bmN0aW9uIGlzQnVpbHRJbkhlbHBlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIGlzSGFzQmxvY2socGF0aCkgfHwgaXNIYXNCbG9ja1BhcmFtcyhwYXRoKTtcbn1cblxuZnVuY3Rpb24gaXNBcmcocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXBhdGhbJ2RhdGEnXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNTaW1wbGVQYXRoKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiwgbG9jOiBBU1QuU291cmNlTG9jYXRpb24sIGNvbnRleHQ6IHN0cmluZykge1xuICBpZiAoIWlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgXFxgJHtwYXRoLm9yaWdpbmFsfVxcYCBpcyBub3QgYSB2YWxpZCBuYW1lIGZvciBhICR7Y29udGV4dH0gb24gbGluZSAke2xvYy5zdGFydC5saW5lfS5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFlpZWxkKHsgaGFzaCB9OiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBzdHJpbmcge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gIGlmICgocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLmtleSAhPT0gJ3RvJykgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeWllbGQgb25seSB0YWtlcyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudDogJ3RvJ2ApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWVgKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAocGFpcnNbMF0udmFsdWUgYXMgQVNULlN0cmluZ0xpdGVyYWwpLnZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbCh7IHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgbG9jIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkgLyogOiBleHByICovIHtcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXJ0aWFsIGZvdW5kIHdpdGggbm8gYXJndW1lbnRzLiBZb3UgbXVzdCBzcGVjaWZ5IGEgdGVtcGxhdGUgbmFtZS4gKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcnRpYWwgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9IGVsc2UgaWYgKCFlc2NhcGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB7e3twYXJ0aWFsIC4uLn19fSBpcyBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIHt7cGFydGlhbCAuLi59fSBpbnN0ZWFkIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKHR5cGU6IHN0cmluZywgeyBwYXJhbXMsIGhhc2gsIGxvYyB9OiBBU1QuQ2FsbCk6IHN0cmluZyB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfSBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IHBhcmFtID0gcGFyYW1zWzBdO1xuICAgIGlmIChwYXJhbS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgIHJldHVybiBwYXJhbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gb25seSB0YWtlcyBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZSh7IHBhcmFtcywgaGFzaCB9OiB7IHBhcmFtczogQVNULkV4cHJlc3Npb25bXSwgaGFzaDogQVNULkhhc2ggfSkge1xuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHNgKTtcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxBQUFPLEFBQXdDLEFBQU0sQUFBb0IsQUFBQzs7OztBQUMxRSxBQUFPLEFBQWdDLEFBQU0sQUFBdUIsQUFBQzs7OztBQUNyRSxBQUFPLEFBQUUsQUFBSyxBQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBRXhELEFBQU8sQUFBTyxBQUFTLEFBQUUsQUFBTSxBQUFpQixBQUFDOzs7O0FBTWpELHdCQUF3QixBQUFVO0FBQ2hDLEFBQU0sV0FBQyxBQUFLLE1BQUMsQUFBTyxZQUFLLEFBQVMsYUFBSSxDQUFDLEFBQUssTUFBQyxBQUFPLEFBQUMsQUFDdkQ7QUFBQyxBQUVELEFBQU0sQUFBQyxBQUFPOztBQWlCWixnQkFBWSxBQUEwQjtBQU45QixhQUFVLGFBQUcsQUFBQyxBQUFDO0FBQ2YsYUFBVyxjQUFhLEFBQUUsQUFBQztBQUMzQixhQUFXLGNBQUcsQUFBSSxBQUFLLEFBQWUsQUFBQztBQUN2QyxhQUFPLFVBQVUsQUFBRSxBQUFDO0FBQ3BCLGFBQVcsY0FBRyxBQUFLLEFBQUM7QUFHMUIsQUFBSSxhQUFDLEFBQU8sVUFBRyxBQUFPLFdBQUksQUFBRSxBQUFDLEFBQy9CO0FBQUM7QUFsQkQsQUFBTSxXQUFDLEFBQU8sUUFBeUIsQUFBMEIsU0FBRSxBQUFnQjtBQUNqRixZQUFJLEFBQWUsa0JBQUcsQUFBSSxBQUFlLEFBQUUsQUFBQztBQUM1QyxBQUFlLHdCQUFDLEFBQUssTUFBQyxBQUFHLEFBQUMsQUFBQztBQUUzQixZQUFJLEFBQVEsV0FBRyxJQUFJLEFBQWdCLGlCQUFDLEFBQU8sQUFBQyxBQUFDO0FBQzdDLFlBQUksQUFBTyxVQUFHLEFBQVEsU0FBQyxBQUFPLFFBQUMsQUFBZSxnQkFBQyxBQUFPLEFBQUMsQUFBQztBQUN4RCxBQUFNLGVBQUMsQUFBa0IsNkJB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QyxBQUFNLFdBQUssQUFBQyxBQUFDLEdBQUMsQUFBQztBQUMvQixZQUFJLEFBQUssUUFBRyxBQUFNLE9BQUMsQUFBQyxBQUFDLEFBQUM7QUFDdEIsQUFBRSxBQUFDLFlBQUMsQUFBSyxNQUFDLEFBQUksU0FBSyxBQUFlLEFBQUMsaUJBQUMsQUFBQztBQUNuQyxBQUFNLG1CQUFDLEFBQUssTUFBQyxBQUFLLEFBQUMsQUFDckI7QUFBQyxBQUFDLEFBQUksZUFBQyxBQUFDO0FBQ04sa0JBQU0sSUFBSSxBQUFLLEFBQUMsd0RBQWtELEFBQUcsSUFBQyxBQUFLLE1BQUMsQUFBSSxJQUFHLEFBQUMsQUFBQyxBQUN2RjtBQUFDLEFBQ0g7QUFBQyxBQUFDLEFBQUksS0FQQyxBQUFFLEFBQUMsTUFPSCxBQUFDO0FBQ04sY0FBTSxJQUFJLEFBQUssQUFBQyxTQUFHLEFBQUkseURBQXFELEFBQUcsSUFBQyxBQUFLLE1BQUMsQUFBSSxJQUFHLEFBQUMsQUFBQyxBQUNqRztBQUFDLEFBQ0g7QUFBQztBQUVELGtDQUFrQyxFQUFFLEFBQU0sUUFBRSxBQUFJLEFBQWdEO0FBQzlGLEFBQUUsQUFBQyxRQUFDLEFBQUksUUFBSSxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQU0sU0FBRyxBQUFDLEFBQUMsR0FBQyxBQUFDO0FBQ2xDLGNBQU0sSUFBSSxBQUFLLEFBQUMsTUFBNEMsQUFBQyxBQUFDLEFBQ2hFO0FBQUM7QUFFRCxBQUFFLEFBQUMsUUFBQyxBQUFNLE9BQUMsQUFBTSxXQUFLLEFBQUMsQUFBQyxHQUFDLEFBQUM7QUFDeEIsQUFBTSxlQUFDLEFBQVMsQUFBQyxBQUNuQjtBQUFDLEFBQUMsQUFBSSxXQUFDLEFBQUM7QUFDTixjQUFNLElBQUksQUFBSyxBQUFDLE1BQWlELEFBQUMsQUFBQyxBQUNyRTtBQUFDLEFBQ0g7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZW1wbGF0ZVZpc2l0b3IsIHsgU3ltYm9sVGFibGUsIEFjdGlvbiB9IGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIsIHsgVGVtcGxhdGUgfSBmcm9tIFwiLi9qYXZhc2NyaXB0LWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBTdGFjaywgZ2V0QXR0ck5hbWVzcGFjZSB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1ldGEgfSBmcm9tIFwiQGdsaW1tZXIvd2lyZS1mb3JtYXRcIjtcbmltcG9ydCB7IEFTVCwgaXNMaXRlcmFsIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcblxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlT3B0aW9uczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIG1ldGE6IFQ7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1c3RlZFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlLmVzY2FwZWQgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUuZXNjYXBlZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBjb21waWxlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+LCBhc3Q6IEFTVC5Qcm9ncmFtKTogVGVtcGxhdGU8VD4ge1xuICAgIGxldCB0ZW1wbGF0ZVZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKCk7XG4gICAgdGVtcGxhdGVWaXNpdG9yLnZpc2l0KGFzdCk7XG5cbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgVGVtcGxhdGVDb21waWxlcihvcHRpb25zKTtcbiAgICBsZXQgb3Bjb2RlcyA9IGNvbXBpbGVyLnByb2Nlc3ModGVtcGxhdGVWaXNpdG9yLmFjdGlvbnMpO1xuICAgIHJldHVybiBKYXZhU2NyaXB0Q29tcGlsZXIucHJvY2VzczxUPihvcGNvZGVzLCBhc3RbJ3N5bWJvbHMnXSwgb3B0aW9ucy5tZXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgb3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD47XG4gIHByaXZhdGUgdGVtcGxhdGVJZCA9IDA7XG4gIHByaXZhdGUgdGVtcGxhdGVJZHM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgc3ltYm9sU3RhY2sgPSBuZXcgU3RhY2s8U3ltYm9sVGFibGU+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBpbmNsdWRlTWV0YSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIGdldCBzeW1ib2xzKCk6IFN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xTdGFjay5jdXJyZW50O1xuICB9XG5cbiAgcHJvY2VzcyhhY3Rpb25zOiBBY3Rpb25bXSk6IEFjdGlvbltdIHtcbiAgICBhY3Rpb25zLmZvckVhY2goKFtuYW1lLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW25hbWVdKSB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCAke25hbWV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTsgfVxuICAgICAgKHRoaXNbbmFtZV0gYXMgYW55KSguLi5hcmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5vcGNvZGVzO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKHByb2dyYW06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICB0aGlzLm9wY29kZSgnc3RhcnRQcm9ncmFtJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2VuZFByb2dyYW0nLCBudWxsKTtcbiAgfVxuXG4gIHN0YXJ0QmxvY2socHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMudGVtcGxhdGVJZCsrO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMudGVtcGxhdGVJZHMucHVzaCh0aGlzLnRlbXBsYXRlSWQgLSAxKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kQmxvY2snLCBudWxsKTtcbiAgfVxuXG4gIHRleHQoW2FjdGlvbl06IFtBU1QuVGV4dE5vZGVdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3RleHQnLCBhY3Rpb24sIGFjdGlvbi5jaGFycyk7XG4gIH1cblxuICBjb21tZW50KFthY3Rpb25dOiBbQVNULkNvbW1lbnRTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2NvbW1lbnQnLCBhY3Rpb24sIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcblxuICAgIHRoaXMub3Bjb2RlKCdvcGVuRWxlbWVudCcsIGFjdGlvbiwgYWN0aW9uKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZShbYWN0aW9uLmF0dHJpYnV0ZXNbaV1dKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5tb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubW9kaWZpZXIoW2FjdGlvbi5tb2RpZmllcnNbaV1dKTtcbiAgICB9XG4gICAgdGhpcy5vcGNvZGUoJ2ZsdXNoRWxlbWVudCcsIG51bGwpO1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChhY3Rpb25bJ3N5bWJvbHMnXSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoW2FjdGlvbl06IFtBU1QuRWxlbWVudE5vZGVdKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnY2xvc2VFbGVtZW50JywgbnVsbCwgYWN0aW9uKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZShbYWN0aW9uXTogW0FTVC5BdHRyTm9kZV0pIHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gYWN0aW9uO1xuXG4gICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG5cbiAgICBsZXQgaXNTdGF0aWMgPSB0aGlzLnByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgLy8gQXJndW1lbnRzXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlzVHJ1c3RpbmcgPSBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVzdGluZykge1xuICAgICAgICB0aGlzLm9wY29kZSgndHJ1c3RpbmdBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vZGlmaWVyKFthY3Rpb25dOiBbQVNULkVsZW1lbnRNb2RpZmllclN0YXRlbWVudF0pIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoYWN0aW9uLnBhdGgsIGFjdGlvbi5sb2MsICdtb2RpZmllcicpO1xuXG4gICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG5cbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICB0aGlzLm9wY29kZSgnbW9kaWZpZXInLCBhY3Rpb24sIHBhcnRzWzBdKTtcbiAgfVxuXG4gIG11c3RhY2hlKFthY3Rpb25dOiBbQVNULk11c3RhY2hlU3RhdGVtZW50XSkge1xuICAgIGxldCB7IHBhdGggfSA9IGFjdGlvbjtcblxuICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNZaWVsZChwYXRoKSkge1xuICAgICAgbGV0IHRvID0gYXNzZXJ0VmFsaWRZaWVsZChhY3Rpb24pO1xuICAgICAgdGhpcy55aWVsZCh0bywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVidWdnZXIocGF0aCkpIHtcbiAgICAgIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShhY3Rpb24pO1xuICAgICAgdGhpcy5kZWJ1Z2dlcignZGVidWdnZXInLCBhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICB9XG4gIH1cblxuICBibG9jayhbYWN0aW9uLyosIGluZGV4LCBjb3VudCovXTogW0FTVC5CbG9ja1N0YXRlbWVudF0pIHtcbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICBsZXQgdGVtcGxhdGVJZCA9IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0c1swXSwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG5cbiAgYXJnKFtwYXRoXTogW0FTVC5QYXRoRXhwcmVzc2lvbl0pIHtcbiAgICBsZXQgeyBwYXJ0czogW2hlYWQsIC4uLnJlc3RdIH0gPSBwYXRoO1xuICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChoZWFkKTtcbiAgICB0aGlzLm9wY29kZSgnZ2V0JywgcGF0aCwgc3ltYm9sLCByZXN0KTtcbiAgfVxuXG4gIG11c3RhY2hlRXhwcmVzc2lvbihleHByOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBleHByLCBwYXRoLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzQnVpbHRJbkhlbHBlcihwYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIgYXMgQVNULkNhbGwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgfSBlbHNlIGlmIChpc0hlbHBlckludm9jYXRpb24oZXhwcikpIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICB9IGVsc2UgaWYgKHBhdGgudGhpcykge1xuICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgdGhpcy5zeW1ib2xzLmdldChoZWFkKSwgcGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgndW5rbm93bicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbWF5YmVMb2NhbCcsIGV4cHIsIHBhdGgucGFydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBTeW50YXhcblxuICB5aWVsZCh0bzogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgneWllbGQnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKHRvKSk7XG4gIH1cblxuICBkZWJ1Z2dlcihfbmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMub3Bjb2RlKCdkZWJ1Z2dlcicsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2hhc0Jsb2NrJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhuYW1lKSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2tQYXJhbXMnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIHBhcnRpYWwoX3BhcmFtczogQVNULkV4cHJlc3Npb25bXSwgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoJ3BhcnRpYWwnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5nZXRFdmFsSW5mbygpKTtcbiAgfVxuXG4gIGJ1aWx0SW5IZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgIGlmIChpc0hhc0Jsb2NrKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9jayhuYW1lLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzSGFzQmxvY2tQYXJhbXMocGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrUGFyYW1zKG5hbWUsIGV4cHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9ucywgaW52b2tlZCByZWN1cnNpdmVseSBmcm9tIHByZXBhcmVQYXJhbXMgYW5kIHByZXBhcmVIYXNoXG5cbiAgU3ViRXhwcmVzc2lvbihleHByOiBBU1QuU3ViRXhwcmVzc2lvbikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwci5wYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgZXhwci5wYXRoLnBhcnRzWzBdKTtcbiAgICB9XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbihleHByOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwci5kYXRhKSB7XG4gICAgICB0aGlzLmFyZyhbZXhwcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBzeW1ib2xzIH0gPSB0aGlzO1xuICAgICAgbGV0IFtoZWFkXSA9IGV4cHIucGFydHM7XG5cbiAgICAgIGlmIChleHByLnRoaXMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfSBlbHNlICBpZiAoc3ltYm9scy5oYXMoaGVhZCkpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIHN5bWJvbHMuZ2V0KGhlYWQpLCBleHByLnBhcnRzLnNsaWNlKDEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBleHByLnBhcnRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBTdHJpbmdMaXRlcmFsKGFjdGlvbjogQVNULlN0cmluZ0xpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBCb29sZWFuTGl0ZXJhbChhY3Rpb246IEFTVC5Cb29sZWFuTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bWJlckxpdGVyYWwoYWN0aW9uOiBBU1QuTnVtYmVyTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bGxMaXRlcmFsKGFjdGlvbjogQVNULk51bGxMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgVW5kZWZpbmVkTGl0ZXJhbChhY3Rpb246IEFTVC5VbmRlZmluZWRMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIG9wY29kZShuYW1lOiBhbnksIGFjdGlvbjogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGxldCBvcGNvZGUgPSBbbmFtZSwgLi4uYXJnc107XG4gICAgaWYgKHRoaXMuaW5jbHVkZU1ldGEgJiYgYWN0aW9uKSB7XG4gICAgICBvcGNvZGUucHVzaCh0aGlzLm1ldGEoYWN0aW9uKSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgfVxuXG4gIHByZXBhcmVIZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoZXhwci5wYXRoLCBleHByLmxvYywgJ2hlbHBlcicpO1xuXG4gICAgbGV0IHsgcGFyYW1zLCBoYXNoIH0gPSBleHByO1xuXG4gICAgdGhpcy5wcmVwYXJlSGFzaChoYXNoKTtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIHByZXBhcmVQYXJhbXMocGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdKSB7XG4gICAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBwYXJhbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBwYXJhbSA9IHBhcmFtc1tpXTtcblxuICAgICAgKHRoaXNbcGFyYW0udHlwZV0gYXMgYW55KShwYXJhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcmFtcy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUhhc2goaGFzaDogQVNULkhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gICAgaWYgKCFwYWlycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhaXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgeyBrZXksIHZhbHVlIH0gPSBwYWlyc1tpXTtcblxuICAgICAgKHRoaXNbdmFsdWUudHlwZV0gYXMgYW55KSh2YWx1ZSk7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGtleSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVPYmplY3QnLCBudWxsLCBwYWlycy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlOiBBU1QuQXR0ck5vZGVbJ3ZhbHVlJ10pIHtcbiAgICAvLyByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgaWYgdGhlIHZhbHVlIGlzIHN0YXRpY1xuXG4gICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgdmFsdWUsIHZhbHVlLmNoYXJzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdNdXN0YWNoZVN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3ZhbHVlXSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMucHJlcGFyZUNvbmNhdFBhcnRzKHZhbHVlLnBhcnRzKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2NvbmNhdCcsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVDb25jYXRQYXJ0cyhwYXJ0czogQVNULkNvbmNhdFN0YXRlbWVudFsncGFydHMnXSkge1xuICAgIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgaWYgKHBhcnQudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFtwYXJ0XSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIHBhcnQuY2hhcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJ0cy5sZW5ndGgpO1xuICB9XG5cbiAgYXR0cmlidXRlTXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgfVxuXG4gIG1ldGEobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgbGV0IGxvYyA9IG5vZGUubG9jO1xuICAgIGlmICghbG9jKSB7IHJldHVybiBbXTsgfVxuXG4gICAgbGV0IHsgc291cmNlLCBzdGFydCwgZW5kIH0gPSBsb2M7XG4gICAgcmV0dXJuIFsgJ2xvYycsIFtzb3VyY2UgfHwgbnVsbCwgW3N0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbl0sIFtlbmQubGluZSwgZW5kLmNvbHVtbl1dIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWxwZXJJbnZvY2F0aW9uKG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBtdXN0YWNoZSBpcyBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgJiB7IHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiB9IHtcbiAgcmV0dXJuIChtdXN0YWNoZS5wYXJhbXMgJiYgbXVzdGFjaGUucGFyYW1zLmxlbmd0aCA+IDApIHx8XG4gICAgKG11c3RhY2hlLmhhc2ggJiYgbXVzdGFjaGUuaGFzaC5wYWlycy5sZW5ndGggPiAwKTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVQYXRoKHsgcGFydHMgfTogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDE7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWwoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24sIHN5bWJvbHM6IFN5bWJvbFRhYmxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzeW1ib2xzICYmIC8qIHBhcnRzLmxlbmd0aCAmJiAqLyBzeW1ib2xzLmhhcyhwYXJ0c1swXSk7XG59XG5cbmZ1bmN0aW9uIGlzWWllbGQocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAneWllbGQnO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRpYWwocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAncGFydGlhbCc7XG59XG5cbmZ1bmN0aW9uIGlzRGVidWdnZXIocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnZGVidWdnZXInO1xufVxuXG5mdW5jdGlvbiBpc0hhc0Jsb2NrKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jayc7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2tQYXJhbXMocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrLXBhcmFtcyc7XG59XG5cbmZ1bmN0aW9uIGlzQnVpbHRJbkhlbHBlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIGlzSGFzQmxvY2socGF0aCkgfHwgaXNIYXNCbG9ja1BhcmFtcyhwYXRoKTtcbn1cblxuZnVuY3Rpb24gaXNBcmcocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXBhdGhbJ2RhdGEnXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNTaW1wbGVQYXRoKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiwgbG9jOiBBU1QuU291cmNlTG9jYXRpb24sIGNvbnRleHQ6IHN0cmluZykge1xuICBpZiAoIWlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgXFxgJHtwYXRoLm9yaWdpbmFsfVxcYCBpcyBub3QgYSB2YWxpZCBuYW1lIGZvciBhICR7Y29udGV4dH0gb24gbGluZSAke2xvYy5zdGFydC5saW5lfS5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFlpZWxkKHsgaGFzaCB9OiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBzdHJpbmcge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gIGlmICgocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLmtleSAhPT0gJ3RvJykgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeWllbGQgb25seSB0YWtlcyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudDogJ3RvJ2ApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWVgKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAocGFpcnNbMF0udmFsdWUgYXMgQVNULlN0cmluZ0xpdGVyYWwpLnZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbCh7IHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgbG9jIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkgLyogOiBleHByICovIHtcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXJ0aWFsIGZvdW5kIHdpdGggbm8gYXJndW1lbnRzLiBZb3UgbXVzdCBzcGVjaWZ5IGEgdGVtcGxhdGUgbmFtZS4gKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcnRpYWwgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9IGVsc2UgaWYgKCFlc2NhcGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB7e3twYXJ0aWFsIC4uLn19fSBpcyBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIHt7cGFydGlhbCAuLi59fSBpbnN0ZWFkIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKHR5cGU6IHN0cmluZywgeyBwYXJhbXMsIGhhc2gsIGxvYyB9OiBBU1QuQ2FsbCk6IHN0cmluZyB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfSBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IHBhcmFtID0gcGFyYW1zWzBdO1xuICAgIGlmIChwYXJhbS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgIHJldHVybiBwYXJhbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gb25seSB0YWtlcyBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZSh7IHBhcmFtcywgaGFzaCB9OiB7IHBhcmFtczogQVNULkV4cHJlc3Npb25bXSwgaGFzaDogQVNULkhhc2ggfSkge1xuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHNgKTtcbiAgfVxufVxuIl19 |
@@ -31,5 +31,3 @@ 'use strict'; | ||
} | ||
get(_name) { | ||
throw (0, _util.unreachable)(); | ||
} | ||
get(_name) {} | ||
getLocalsMap() { | ||
@@ -280,3 +278,3 @@ return {}; | ||
get currentFrame() { | ||
return (0, _util.expect)(this.getCurrentFrame(), "Expected a current frame"); | ||
return this.getCurrentFrame(); | ||
} | ||
@@ -313,2 +311,2 @@ getCurrentFrame() { | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLEFBQU8sQUFBZ0IsQUFBSSxBQUFFLEFBQVcsQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUMsQUFFeEUsQUFBTTs7O0FBQ0osQUFBTSxXQUFDLEFBQUc7QUFDUixBQUFNLGVBQUMsSUFBSSxBQUFrQixBQUFFLEFBQUMsQUFDbEM7QUFBQztBQVlELEFBQUssVUFBQyxBQUFnQjtBQUNwQixZQUFJLEFBQU8sVUFBRyxBQUFNLE9BQUMsQUFBRyxJQUFDLEFBQUksUUFBSSxBQUFJLEtBQUMsQUFBUSxTQUFDLEFBQUksQUFBQyxBQUFDLEFBQUM7QUFDdEQsQUFBTSxlQUFDLElBQUksQUFBZ0IsaUJBQUMsQUFBSSxNQUFFLEFBQU0sUUFBRSxBQUFPLEFBQUMsQUFBQyxBQUNyRDtBQUFDLEFBQ0YsQUFFRCxBQUFNOzs7TUFBMEIsMkJBQVEsQUFBVztBQUFuRDs7QUFDUyxhQUFPLFVBQWEsQUFBRSxBQUFDO0FBRXRCLGFBQUksT0FBRyxBQUFDLEFBQUM7QUFDVCxhQUFLLFFBQUcsQUFBSSxBQUFVLEFBQUM7QUFDdkIsYUFBTSxTQUFHLEFBQUksQUFBVSxBQUFDLEFBMENsQztBQUFDO0FBeENDLEFBQUcsUUFBQyxBQUFhO0FBQ2YsQUFBTSxlQUFDLEFBQUssQUFBQyxBQUNmO0FBQUM7QUFFRCxBQUFHLFFBQUMsQUFBYTtBQUNmLGNBQU0sQUFBVyxBQUFFLEFBQUMsQUFDdEI7QUFBQztBQUVELEFBQVk7QUFDVixBQUFNLGVBQUMsQUFBRSxBQUFDLEFBQ1o7QUFBQztBQUVELEFBQVc7QUFDVCxBQUFNLGVBQUMsQUFBRSxBQUFDLEFBQ1o7QUFBQztBQUVELEFBQWEsa0JBQUMsQUFBWTtBQUN4QixZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUksQUFBQyxBQUFDO0FB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bnRheCc7XG5pbXBvcnQgeyBDb3JlIH0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgRGljdCwgT3B0aW9uLCBkaWN0LCB1bnJlYWNoYWJsZSwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTeW1ib2xUYWJsZSB7XG4gIHN0YXRpYyB0b3AoKTogUHJvZ3JhbVN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gbmV3IFByb2dyYW1TeW1ib2xUYWJsZSgpO1xuICB9XG5cbiAgYWJzdHJhY3QgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG4gIGFic3RyYWN0IGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPjtcbiAgYWJzdHJhY3QgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbztcblxuICBhYnN0cmFjdCBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYWJzdHJhY3QgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlcjtcblxuICBjaGlsZChsb2NhbHM6IHN0cmluZ1tdKTogQmxvY2tTeW1ib2xUYWJsZSB7XG4gICAgbGV0IHN5bWJvbHMgPSBsb2NhbHMubWFwKG5hbWUgPT4gdGhpcy5hbGxvY2F0ZShuYW1lKSk7XG4gICAgcmV0dXJuIG5ldyBCbG9ja1N5bWJvbFRhYmxlKHRoaXMsIGxvY2Fscywgc3ltYm9scyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW1TeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgcHVibGljIHN5bWJvbHM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSBzaXplID0gMTtcbiAgcHJpdmF0ZSBuYW1lZCA9IGRpY3Q8bnVtYmVyPigpO1xuICBwcml2YXRlIGJsb2NrcyA9IGRpY3Q8bnVtYmVyPigpO1xuXG4gIGhhcyhfbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0KF9uYW1lOiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgdW5yZWFjaGFibGUoKTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdO1xuXG4gICAgaWYgKCFuYW1lZCkge1xuICAgICAgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgQCR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZWQ7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV07XG5cbiAgICBpZiAoIWJsb2NrKSB7XG4gICAgICBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgJiR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2s7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuc3ltYm9scy5wdXNoKGlkZW50aWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnNpemUrKztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFN5bWJvbFRhYmxlLCBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10sIHB1YmxpYyBzbG90czogbnVtYmVyW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSkgIT09IC0xKSB8fCB0aGlzLnBhcmVudC5oYXMobmFtZSk7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgc2xvdCA9IHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpO1xuICAgIHJldHVybiBzbG90ID09PSAtMSA/IHRoaXMucGFyZW50LmdldChuYW1lKSA6IHRoaXMuc2xvdHNbc2xvdF07XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICBsZXQgZGljdCA9IHRoaXMucGFyZW50LmdldExvY2Fsc01hcCgpO1xuICAgIHRoaXMuc3ltYm9scy5mb3JFYWNoKHN5bWJvbCA9PiBkaWN0W3N5bWJvbF0gPSB0aGlzLmdldChzeW1ib2wpKTtcbiAgICByZXR1cm4gZGljdDtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIGxldCBsb2NhbHMgPSB0aGlzLmdldExvY2Fsc01hcCgpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhsb2NhbHMpLm1hcChzeW1ib2wgPT4gbG9jYWxzW3N5bWJvbF0pO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZU5hbWVkKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZUJsb2NrKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGUoaWRlbnRpZmllcik7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBpbiBhbiBBU1QgYW5kIG91dHB1dHMgYSBsaXN0IG9mIGFjdGlvbnMgdG8gYmUgY29uc3VtZWRcbiAqIGJ5IGEgY29tcGlsZXIuIEZvciBleGFtcGxlLCB0aGUgdGVtcGxhdGVcbiAqXG4gKiAgICAgZm9ve3tiYXJ9fTxkaXY+YmF6PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgM11dLFxuICogICAgICBbJ211c3RhY2hlJywgW211c3RhY2hlTm9kZSwgMSwgM11dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgM10sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoaXMgdmlzaXRvciB3YWxrcyB0aGUgQVNUIGRlcHRoIGZpcnN0IGFuZCBiYWNrd2FyZHMuIEFzXG4gKiBhIHJlc3VsdCB0aGUgYm90dG9tLW1vc3QgY2hpbGQgdGVtcGxhdGUgd2lsbCBhcHBlYXIgYXQgdGhlXG4gKiB0b3Agb2YgdGhlIGFjdGlvbnMgbGlzdCB3aGVyZWFzIHRoZSByb290IHRlbXBsYXRlIHdpbGwgYXBwZWFyXG4gKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgICAgPGRpdj57eyNpZn19Zm9ve3tlbHNlfX1iYXI8Yj48L2I+e3svaWZ9fTwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDIsIDBdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMiwgMF1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMl1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMl1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxLCAxXV0sXG4gKiAgICAgIFsnYmxvY2snLCBbYmxvY2tOb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIGlzIG1haW50YWluZWQgYnkgYSBzdGFjayBvZiBmcmFtZXMuXG4gKiBXaGVuZXZlciBhIG5vZGUgd2l0aCBjaGlsZHJlbiBpcyBlbnRlcmVkIChlaXRoZXIgYSBQcm9ncmFtTm9kZVxuICogb3IgYW4gRWxlbWVudE5vZGUpIGEgZnJhbWUgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIG9mIHRoYXRcbiAqIG5vZGUuIEZvciBleGFtcGxlLFxuICpcbiAqICAgLSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGlsZCBub2RlIGJlaW5nIHZpc2l0ZWRcbiAqICAgLSB0aGUgbnVtYmVyIG9mIG11c3RhY2hlcyBjb250YWluZWQgd2l0aGluIGl0cyBjaGlsZCBub2Rlc1xuICogICAtIHRoZSBsaXN0IG9mIGFjdGlvbnMgZ2VuZXJhdGVkIGJ5IGl0cyBjaGlsZCBub2Rlc1xuICovXG5cbmNsYXNzIEZyYW1lIHtcbiAgcHVibGljIHBhcmVudE5vZGU6IE9wdGlvbjxPYmplY3Q+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkcmVuOiBPcHRpb248QVNULk5vZGVbXT4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRJbmRleDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRDb3VudDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRUZW1wbGF0ZUNvdW50ID0gMDtcbiAgcHVibGljIG11c3RhY2hlQ291bnQgPSAwO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHVibGljIGJsYW5rQ2hpbGRUZXh0Tm9kZXM6IE9wdGlvbjxudW1iZXJbXT4gPSBudWxsO1xuICBwdWJsaWMgc3ltYm9sczogT3B0aW9uPFN5bWJvbFRhYmxlPiA9IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWN0aW9uIHtcbiAgZXhwb3J0IHR5cGUgU3RhcnRQcm9ncmFtID0gWydzdGFydFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kUHJvZ3JhbSA9IFsnZW5kUHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFN0YXJ0QmxvY2sgPSBbJ3N0YXJ0QmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kQmxvY2sgPSBbJ2VuZEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQmxvY2sgPSBbJ2Jsb2NrJywgW0FTVC5CbG9ja1N0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgTXVzdGFjaGUgPSBbJ211c3RhY2hlJywgW0FTVC5NdXN0YWNoZVN0YXRlbWVudCB8IEFTVC5QYXJ0aWFsU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBPcGVuRWxlbWVudCA9IFsnb3BlbkVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBDbG9zZUVsZW1lbnQgPSBbJ2Nsb3NlRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFRleHQgPSBbJ3RleHQnLCBbQVNULlRleHROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBDb21tZW50ID0gWydjb21tZW50JywgW0FTVC5Db21tZW50U3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbiA9XG4gICAgICBTdGFydFByb2dyYW1cbiAgICB8IEVuZFByb2dyYW1cbiAgICB8IFN0YXJ0QmxvY2tcbiAgICB8IEVuZEJsb2NrXG4gICAgfCBCbG9ja1xuICAgIHwgTXVzdGFjaGVcbiAgICB8IE9wZW5FbGVtZW50XG4gICAgfCBDbG9zZUVsZW1lbnRcbiAgICB8IFRleHRcbiAgICB8IENvbW1lbnRcbiAgICA7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IEFjdGlvbi5BY3Rpb247XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlVmlzaXRvciB7XG4gIHByaXZhdGUgZnJhbWVTdGFjazogRnJhbWVbXSA9IFtdO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBwcm9ncmFtRGVwdGggPSAtMTtcblxuICB2aXNpdChub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gIH1cblxuICAvLyBUcmF2ZXJzYWwgbWV0aG9kc1xuXG4gIFByb2dyYW0ocHJvZ3JhbTogQVNULlByb2dyYW0pIHtcbiAgICB0aGlzLnByb2dyYW1EZXB0aCsrO1xuXG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgICBsZXQgcHJvZ3JhbUZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGlmICghcGFyZW50RnJhbWUpIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IFN5bWJvbFRhYmxlLnRvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhcnRUeXBlLCBlbmRUeXBlO1xuXG4gICAgaWYgKHRoaXMucHJvZ3JhbURlcHRoID09PSAwKSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRQcm9ncmFtJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kUHJvZ3JhbSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydEJsb2NrJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kQmxvY2snO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5wYXJlbnROb2RlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRyZW4gPSBwcm9ncmFtLmJvZHk7XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkQ291bnQgPSBwcm9ncmFtLmJvZHkubGVuZ3RoO1xuICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbZW5kVHlwZSwgW3Byb2dyYW0sIHRoaXMucHJvZ3JhbURlcHRoXV0gYXMgQWN0aW9uKTtcbiAgICBwcm9ncmFtRnJhbWUuc3ltYm9scyA9IHByb2dyYW1bJ3N5bWJvbHMnXTtcblxuICAgIGZvciAobGV0IGkgPSBwcm9ncmFtLmJvZHkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHByb2dyYW1GcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQocHJvZ3JhbS5ib2R5W2ldKTtcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtzdGFydFR5cGUsIFtcbiAgICAgIHByb2dyYW0sIHByb2dyYW1GcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQsXG4gICAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKClcbiAgICBdXSBhcyBBY3Rpb24pO1xuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIHRoaXMucHJvZ3JhbURlcHRoLS07XG5cbiAgICAvLyBQdXNoIHRoZSBjb21wbGV0ZWQgdGVtcGxhdGUgaW50byB0aGUgZ2xvYmFsIGFjdGlvbnMgbGlzdFxuICAgIGlmIChwYXJlbnRGcmFtZSkgeyBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQrKzsgfVxuICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLnByb2dyYW1GcmFtZS5hY3Rpb25zLnJldmVyc2UoKSk7XG4gIH1cblxuICBFbGVtZW50Tm9kZShlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBsZXQgZWxlbWVudEZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGVsZW1lbnRGcmFtZS5wYXJlbnROb2RlID0gZWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuO1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZENvdW50ID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgKz0gZWxlbWVudC5tb2RpZmllcnMubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgZWxlbWVudEZyYW1lLnN5bWJvbHMgPSBlbGVtZW50WydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChlbGVtZW50LmJsb2NrUGFyYW1zKTtcblxuICAgIGxldCBhY3Rpb25BcmdzOiBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICBlbGVtZW50LFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRJbmRleCEsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZENvdW50IVxuICAgIF07XG5cbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKFsnY2xvc2VFbGVtZW50JywgYWN0aW9uQXJnc10pO1xuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmF0dHJpYnV0ZXNbaV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBlbGVtZW50RnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuY2hpbGRyZW5baV0pO1xuICAgIH1cblxuICAgIGxldCBvcGVuID0gWydvcGVuRWxlbWVudCcsIFsuLi5hY3Rpb25BcmdzLCBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCwgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXV0gYXMgQWN0aW9uLk9wZW5FbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2gob3Blbik7XG5cbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICAvLyBQcm9wYWdhdGUgdGhlIGVsZW1lbnQncyBmcmFtZSBzdGF0ZSB0byB0aGUgcGFyZW50IGZyYW1lXG4gICAgaWYgKGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ID4gMCkgeyBwYXJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7IH1cbiAgICBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQgKz0gZWxlbWVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudDtcbiAgICBwYXJlbnRGcmFtZS5hY3Rpb25zLnB1c2goLi4uZWxlbWVudEZyYW1lLmFjdGlvbnMpO1xuICB9XG5cbiAgQXR0ck5vZGUoYXR0cjogQVNULkF0dHJOb2RlKSB7XG4gICAgaWYgKGF0dHIudmFsdWUudHlwZSAhPT0gJ1RleHROb2RlJykge1xuICAgICAgdGhpcy5jdXJyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIH1cbiAgfTtcblxuICBUZXh0Tm9kZSh0ZXh0OiBBU1QuVGV4dE5vZGUpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBpZiAodGV4dC5jaGFycyA9PT0gJycpIHtcbiAgICAgIGZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMhLnB1c2goZG9tSW5kZXhPZihmcmFtZS5jaGlsZHJlbiEsIHRleHQpKTtcbiAgICB9XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsndGV4dCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBCbG9ja1N0YXRlbWVudChub2RlOiBBU1QuQmxvY2tTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydibG9jaycsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcblxuICAgIGlmIChub2RlLmludmVyc2UpIHsgdGhpcy52aXNpdChub2RlLmludmVyc2UpOyB9XG4gICAgaWYgKG5vZGUucHJvZ3JhbSkgeyB0aGlzLnZpc2l0KG5vZGUucHJvZ3JhbSk7IH1cbiAgfTtcblxuICBQYXJ0aWFsU3RhdGVtZW50KG5vZGU6IEFTVC5QYXJ0aWFsU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIENvbW1lbnRTdGF0ZW1lbnQodGV4dDogQVNULkNvbW1lbnRTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydjb21tZW50JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIE11c3RhY2hlQ29tbWVudFN0YXRlbWVudCgpIHtcbiAgICAvLyBJbnRlbnRpb25hbCBlbXB0eTogSGFuZGxlYmFycyBjb21tZW50cyBzaG91bGQgbm90IGFmZmVjdCBvdXRwdXQuXG4gIH07XG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQobXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFttdXN0YWNoZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgLy8gRnJhbWUgaGVscGVyc1xuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRGcmFtZSgpOiBGcmFtZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmdldEN1cnJlbnRGcmFtZSgpLCBcIkV4cGVjdGVkIGEgY3VycmVudCBmcmFtZVwiKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZyYW1lKCk6IE9wdGlvbjxGcmFtZT4ge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2tbdGhpcy5mcmFtZVN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoRnJhbWUoKSB7XG4gICAgbGV0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5mcmFtZVN0YWNrLnB1c2goZnJhbWUpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wRnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBgZG9tTm9kZWAgaW4gdGhlIGBub2Rlc2AgYXJyYXksIHNraXBwaW5nXG4vLyBvdmVyIGFueSBub2RlcyB3aGljaCBkbyBub3QgcmVwcmVzZW50IERPTSBub2Rlcy5cbmZ1bmN0aW9uIGRvbUluZGV4T2Yobm9kZXM6IEFTVC5Ob2RlW10sIGRvbU5vZGU6IEFTVC5UZXh0Tm9kZSB8IEFTVC5FbGVtZW50Tm9kZSkge1xuICBsZXQgaW5kZXggPSAtMTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcblxuICAgIGlmIChub2RlLnR5cGUgIT09ICdUZXh0Tm9kZScgJiYgbm9kZS50eXBlICE9PSAnRWxlbWVudE5vZGUnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gZG9tTm9kZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLEFBQU8sQUFBZ0IsQUFBSSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBRW5ELEFBQU07OztBQUNKLEFBQU0sV0FBQyxBQUFHO0FBQ1IsQUFBTSxlQUFDLElBQUksQUFBa0IsQUFBRSxBQUFDLEFBQ2xDO0FBQUM7QUFZRCxBQUFLLFVBQUMsQUFBZ0I7QUFDcEIsWUFBSSxBQUFPLFVBQUcsQUFBTSxPQUFDLEFBQUcsSUFBQyxBQUFJLFFBQUksQUFBSSxLQUFDLEFBQVEsU0FBQyxBQUFJLEFBQUMsQUFBQyxBQUFDO0FBQ3RELEFBQU0sZUFBQyxJQUFJLEFBQWdCLGlCQUFDLEFBQUksTUFBRSxBQUFNLFFBQUUsQUFBTyxBQUFDLEFBQUMsQUFDckQ7QUFBQyxBQUNGLEFBRUQsQUFBTTs7O01BQTBCLDJCQUFRLEFBQVc7QUFBbkQ7O0FBQ1MsYUFBTyxVQUFhLEFBQUUsQUFBQztBQUV0QixhQUFJLE9BQUcsQUFBQyxBQUFDO0FBQ1QsYUFBSyxRQUFHLEFBQUksQUFBVSxBQUFDO0FBQ3ZCLGFBQU0sU0FBRyxBQUFJLEFBQVUsQUFBQyxBQXlDbEM7QUFBQztBQXZDQyxBQUFHLFFBQUMsQUFBYTtBQUNmLEFBQU0sZUFBQyxBQUFLLEFBQUMsQUFDZjtBQUFDO0FBRUQsQUFBRyxRQUFDLEFBQWEsT0FDakIsQ0FBQztBQUVELEFBQVk7QUFDVixBQUFNLGVBQUMsQUFBRSxBQUFDLEFBQ1o7QUFBQztBQUVELEFBQVc7QUFDVCxBQUFNLGVBQUMsQUFBRSxBQUFDLEFBQ1o7QUFBQztBQUVELEFBQWEsa0JBQUMsQUFBWTtBQUN4QixZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUksQUFBQyxBQUFDO0FBRTdCLEFBQUUsQUFBQyxZQUFDLENBQUMsQUFBSyxBQUFDLE9BQUMsQUFBQztB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QUFDLEFBQUMsQUFBQyxBQUNyRDtBQUFDO0FBRU8sQUFBUztBQUNmLFlBQUksQUFBSyxRQUFHLElBQUksQUFBSyxBQUFFLEFBQUM7QUFDeEIsQUFBSSxhQUFDLEFBQVUsV0FBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUM7QUFDNUIsQUFBTSxlQUFDLEFBQUssQUFBQyxBQUNmO0FBQUM7QUFFTyxBQUFRO0FBQ2QsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFVLFdBQUMsQUFBRyxBQUFFLEFBQUMsQUFDL0I7QUFBQyxBQUNGOzttQ0FFRCxBQUFnRTtBQUNoRSxBQUFtRDs7QUFDbkQsb0JBQW9CLEFBQWlCLE9BQUUsQUFBdUM7QUFDNUUsUUFBSSxBQUFLLFFBQUcsQ0FBQyxBQUFDLEFBQUM7QUFFZixBQUFHLEFBQUMsU0FBQyxJQUFJLEFBQUMsSUFBRyxBQUFDLEdBQUUsQUFBQyxJQUFHLEFBQUssTUFBQyxBQUFNLFFBQUUsQUFBQyxBQUFFLEtBQUUsQUFBQztBQUN0QyxZQUFJLEFBQUksT0FBRyxBQUFLLE1BQUMsQUFBQyxBQUFDLEFBQUM7QUFFcEIsQUFBRSxBQUFDLFlBQUMsQUFBSSxLQUFDLEFBQUksU0FBSyxBQUFVLGNBQUksQUFBSSxLQUFDLEFBQUksU0FBSyxBQUFhLEFBQUMsZUFBQyxBQUFDO0FBQzVELEFBQVEsQUFBQyxBQUNYO0FBQUMsQUFBQyxBQUFJLGVBQUMsQUFBQztBQUNOLEFBQUssQUFBRSxBQUFDLEFBQ1Y7QUFBQztBQUVELEFBQUUsQUFBQyxZQUFDLEFBQUksU0FBSyxBQUFPLEFBQUMsU0FBQyxBQUFDO0FBQ3JCLEFBQU0sbUJBQUMsQUFBSyxBQUFDLEFBQ2Y7QUFBQyxBQUNIO0FBQUM7QUFFRCxBQUFNLFdBQUMsQ0FBQyxBQUFDLEFBQUMsQUFDWjtBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVNUIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcbmltcG9ydCB7IENvcmUgfSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBEaWN0LCBPcHRpb24sIGRpY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN5bWJvbFRhYmxlIHtcbiAgc3RhdGljIHRvcCgpOiBQcm9ncmFtU3ltYm9sVGFibGUge1xuICAgIHJldHVybiBuZXcgUHJvZ3JhbVN5bWJvbFRhYmxlKCk7XG4gIH1cblxuICBhYnN0cmFjdCBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgYWJzdHJhY3QgZ2V0KG5hbWU6IHN0cmluZyk6IG51bWJlcjtcblxuICBhYnN0cmFjdCBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+O1xuICBhYnN0cmFjdCBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvO1xuXG4gIGFic3RyYWN0IGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYWJzdHJhY3QgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGNoaWxkKGxvY2Fsczogc3RyaW5nW10pOiBCbG9ja1N5bWJvbFRhYmxlIHtcbiAgICBsZXQgc3ltYm9scyA9IGxvY2Fscy5tYXAobmFtZSA9PiB0aGlzLmFsbG9jYXRlKG5hbWUpKTtcbiAgICByZXR1cm4gbmV3IEJsb2NrU3ltYm9sVGFibGUodGhpcywgbG9jYWxzLCBzeW1ib2xzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbVN5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10gPSBbXTtcblxuICBwcml2YXRlIHNpemUgPSAxO1xuICBwcml2YXRlIG5hbWVkID0gZGljdDxudW1iZXI+KCk7XG4gIHByaXZhdGUgYmxvY2tzID0gZGljdDxudW1iZXI+KCk7XG5cbiAgaGFzKF9uYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQoX25hbWU6IHN0cmluZyk6IG5ldmVyIHtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdO1xuXG4gICAgaWYgKCFuYW1lZCkge1xuICAgICAgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgQCR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZWQ7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV07XG5cbiAgICBpZiAoIWJsb2NrKSB7XG4gICAgICBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgJiR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2s7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuc3ltYm9scy5wdXNoKGlkZW50aWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnNpemUrKztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFN5bWJvbFRhYmxlLCBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10sIHB1YmxpYyBzbG90czogbnVtYmVyW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSkgIT09IC0xKSB8fCB0aGlzLnBhcmVudC5oYXMobmFtZSk7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgc2xvdCA9IHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpO1xuICAgIHJldHVybiBzbG90ID09PSAtMSA/IHRoaXMucGFyZW50LmdldChuYW1lKSA6IHRoaXMuc2xvdHNbc2xvdF07XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICBsZXQgZGljdCA9IHRoaXMucGFyZW50LmdldExvY2Fsc01hcCgpO1xuICAgIHRoaXMuc3ltYm9scy5mb3JFYWNoKHN5bWJvbCA9PiBkaWN0W3N5bWJvbF0gPSB0aGlzLmdldChzeW1ib2wpKTtcbiAgICByZXR1cm4gZGljdDtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIGxldCBsb2NhbHMgPSB0aGlzLmdldExvY2Fsc01hcCgpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhsb2NhbHMpLm1hcChzeW1ib2wgPT4gbG9jYWxzW3N5bWJvbF0pO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZU5hbWVkKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZUJsb2NrKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGUoaWRlbnRpZmllcik7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBpbiBhbiBBU1QgYW5kIG91dHB1dHMgYSBsaXN0IG9mIGFjdGlvbnMgdG8gYmUgY29uc3VtZWRcbiAqIGJ5IGEgY29tcGlsZXIuIEZvciBleGFtcGxlLCB0aGUgdGVtcGxhdGVcbiAqXG4gKiAgICAgZm9ve3tiYXJ9fTxkaXY+YmF6PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgM11dLFxuICogICAgICBbJ211c3RhY2hlJywgW211c3RhY2hlTm9kZSwgMSwgM11dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgM10sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoaXMgdmlzaXRvciB3YWxrcyB0aGUgQVNUIGRlcHRoIGZpcnN0IGFuZCBiYWNrd2FyZHMuIEFzXG4gKiBhIHJlc3VsdCB0aGUgYm90dG9tLW1vc3QgY2hpbGQgdGVtcGxhdGUgd2lsbCBhcHBlYXIgYXQgdGhlXG4gKiB0b3Agb2YgdGhlIGFjdGlvbnMgbGlzdCB3aGVyZWFzIHRoZSByb290IHRlbXBsYXRlIHdpbGwgYXBwZWFyXG4gKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgICAgPGRpdj57eyNpZn19Zm9ve3tlbHNlfX1iYXI8Yj48L2I+e3svaWZ9fTwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDIsIDBdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMiwgMF1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMl1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMl1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxLCAxXV0sXG4gKiAgICAgIFsnYmxvY2snLCBbYmxvY2tOb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIGlzIG1haW50YWluZWQgYnkgYSBzdGFjayBvZiBmcmFtZXMuXG4gKiBXaGVuZXZlciBhIG5vZGUgd2l0aCBjaGlsZHJlbiBpcyBlbnRlcmVkIChlaXRoZXIgYSBQcm9ncmFtTm9kZVxuICogb3IgYW4gRWxlbWVudE5vZGUpIGEgZnJhbWUgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIG9mIHRoYXRcbiAqIG5vZGUuIEZvciBleGFtcGxlLFxuICpcbiAqICAgLSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGlsZCBub2RlIGJlaW5nIHZpc2l0ZWRcbiAqICAgLSB0aGUgbnVtYmVyIG9mIG11c3RhY2hlcyBjb250YWluZWQgd2l0aGluIGl0cyBjaGlsZCBub2Rlc1xuICogICAtIHRoZSBsaXN0IG9mIGFjdGlvbnMgZ2VuZXJhdGVkIGJ5IGl0cyBjaGlsZCBub2Rlc1xuICovXG5cbmNsYXNzIEZyYW1lIHtcbiAgcHVibGljIHBhcmVudE5vZGU6IE9wdGlvbjxPYmplY3Q+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkcmVuOiBPcHRpb248QVNULk5vZGVbXT4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRJbmRleDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRDb3VudDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRUZW1wbGF0ZUNvdW50ID0gMDtcbiAgcHVibGljIG11c3RhY2hlQ291bnQgPSAwO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHVibGljIGJsYW5rQ2hpbGRUZXh0Tm9kZXM6IE9wdGlvbjxudW1iZXJbXT4gPSBudWxsO1xuICBwdWJsaWMgc3ltYm9sczogT3B0aW9uPFN5bWJvbFRhYmxlPiA9IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWN0aW9uIHtcbiAgZXhwb3J0IHR5cGUgU3RhcnRQcm9ncmFtID0gWydzdGFydFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kUHJvZ3JhbSA9IFsnZW5kUHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFN0YXJ0QmxvY2sgPSBbJ3N0YXJ0QmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kQmxvY2sgPSBbJ2VuZEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQmxvY2sgPSBbJ2Jsb2NrJywgW0FTVC5CbG9ja1N0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgTXVzdGFjaGUgPSBbJ211c3RhY2hlJywgW0FTVC5NdXN0YWNoZVN0YXRlbWVudCB8IEFTVC5QYXJ0aWFsU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBPcGVuRWxlbWVudCA9IFsnb3BlbkVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBDbG9zZUVsZW1lbnQgPSBbJ2Nsb3NlRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFRleHQgPSBbJ3RleHQnLCBbQVNULlRleHROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBDb21tZW50ID0gWydjb21tZW50JywgW0FTVC5Db21tZW50U3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbiA9XG4gICAgICBTdGFydFByb2dyYW1cbiAgICB8IEVuZFByb2dyYW1cbiAgICB8IFN0YXJ0QmxvY2tcbiAgICB8IEVuZEJsb2NrXG4gICAgfCBCbG9ja1xuICAgIHwgTXVzdGFjaGVcbiAgICB8IE9wZW5FbGVtZW50XG4gICAgfCBDbG9zZUVsZW1lbnRcbiAgICB8IFRleHRcbiAgICB8IENvbW1lbnRcbiAgICA7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IEFjdGlvbi5BY3Rpb247XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlVmlzaXRvciB7XG4gIHByaXZhdGUgZnJhbWVTdGFjazogRnJhbWVbXSA9IFtdO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBwcm9ncmFtRGVwdGggPSAtMTtcblxuICB2aXNpdChub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gIH1cblxuICAvLyBUcmF2ZXJzYWwgbWV0aG9kc1xuXG4gIFByb2dyYW0ocHJvZ3JhbTogQVNULlByb2dyYW0pIHtcbiAgICB0aGlzLnByb2dyYW1EZXB0aCsrO1xuXG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgICBsZXQgcHJvZ3JhbUZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGlmICghcGFyZW50RnJhbWUpIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IFN5bWJvbFRhYmxlLnRvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhcnRUeXBlLCBlbmRUeXBlO1xuXG4gICAgaWYgKHRoaXMucHJvZ3JhbURlcHRoID09PSAwKSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRQcm9ncmFtJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kUHJvZ3JhbSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydEJsb2NrJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kQmxvY2snO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5wYXJlbnROb2RlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRyZW4gPSBwcm9ncmFtLmJvZHk7XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkQ291bnQgPSBwcm9ncmFtLmJvZHkubGVuZ3RoO1xuICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbZW5kVHlwZSwgW3Byb2dyYW0sIHRoaXMucHJvZ3JhbURlcHRoXV0gYXMgQWN0aW9uKTtcbiAgICBwcm9ncmFtRnJhbWUuc3ltYm9scyA9IHByb2dyYW1bJ3N5bWJvbHMnXTtcblxuICAgIGZvciAobGV0IGkgPSBwcm9ncmFtLmJvZHkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHByb2dyYW1GcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQocHJvZ3JhbS5ib2R5W2ldKTtcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtzdGFydFR5cGUsIFtcbiAgICAgIHByb2dyYW0sIHByb2dyYW1GcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQsXG4gICAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKClcbiAgICBdXSBhcyBBY3Rpb24pO1xuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIHRoaXMucHJvZ3JhbURlcHRoLS07XG5cbiAgICAvLyBQdXNoIHRoZSBjb21wbGV0ZWQgdGVtcGxhdGUgaW50byB0aGUgZ2xvYmFsIGFjdGlvbnMgbGlzdFxuICAgIGlmIChwYXJlbnRGcmFtZSkgeyBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQrKzsgfVxuICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLnByb2dyYW1GcmFtZS5hY3Rpb25zLnJldmVyc2UoKSk7XG4gIH1cblxuICBFbGVtZW50Tm9kZShlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBsZXQgZWxlbWVudEZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGVsZW1lbnRGcmFtZS5wYXJlbnROb2RlID0gZWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuO1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZENvdW50ID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgKz0gZWxlbWVudC5tb2RpZmllcnMubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgZWxlbWVudEZyYW1lLnN5bWJvbHMgPSBlbGVtZW50WydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChlbGVtZW50LmJsb2NrUGFyYW1zKTtcblxuICAgIGxldCBhY3Rpb25BcmdzOiBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICBlbGVtZW50LFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRJbmRleCEsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZENvdW50IVxuICAgIF07XG5cbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKFsnY2xvc2VFbGVtZW50JywgYWN0aW9uQXJnc10pO1xuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmF0dHJpYnV0ZXNbaV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBlbGVtZW50RnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuY2hpbGRyZW5baV0pO1xuICAgIH1cblxuICAgIGxldCBvcGVuID0gWydvcGVuRWxlbWVudCcsIFsuLi5hY3Rpb25BcmdzLCBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCwgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXV0gYXMgQWN0aW9uLk9wZW5FbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2gob3Blbik7XG5cbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICAvLyBQcm9wYWdhdGUgdGhlIGVsZW1lbnQncyBmcmFtZSBzdGF0ZSB0byB0aGUgcGFyZW50IGZyYW1lXG4gICAgaWYgKGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ID4gMCkgeyBwYXJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7IH1cbiAgICBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQgKz0gZWxlbWVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudDtcbiAgICBwYXJlbnRGcmFtZS5hY3Rpb25zLnB1c2goLi4uZWxlbWVudEZyYW1lLmFjdGlvbnMpO1xuICB9XG5cbiAgQXR0ck5vZGUoYXR0cjogQVNULkF0dHJOb2RlKSB7XG4gICAgaWYgKGF0dHIudmFsdWUudHlwZSAhPT0gJ1RleHROb2RlJykge1xuICAgICAgdGhpcy5jdXJyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIH1cbiAgfTtcblxuICBUZXh0Tm9kZSh0ZXh0OiBBU1QuVGV4dE5vZGUpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBpZiAodGV4dC5jaGFycyA9PT0gJycpIHtcbiAgICAgIGZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMhLnB1c2goZG9tSW5kZXhPZihmcmFtZS5jaGlsZHJlbiEsIHRleHQpKTtcbiAgICB9XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsndGV4dCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBCbG9ja1N0YXRlbWVudChub2RlOiBBU1QuQmxvY2tTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydibG9jaycsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcblxuICAgIGlmIChub2RlLmludmVyc2UpIHsgdGhpcy52aXNpdChub2RlLmludmVyc2UpOyB9XG4gICAgaWYgKG5vZGUucHJvZ3JhbSkgeyB0aGlzLnZpc2l0KG5vZGUucHJvZ3JhbSk7IH1cbiAgfTtcblxuICBQYXJ0aWFsU3RhdGVtZW50KG5vZGU6IEFTVC5QYXJ0aWFsU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIENvbW1lbnRTdGF0ZW1lbnQodGV4dDogQVNULkNvbW1lbnRTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydjb21tZW50JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIE11c3RhY2hlQ29tbWVudFN0YXRlbWVudCgpIHtcbiAgICAvLyBJbnRlbnRpb25hbCBlbXB0eTogSGFuZGxlYmFycyBjb21tZW50cyBzaG91bGQgbm90IGFmZmVjdCBvdXRwdXQuXG4gIH07XG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQobXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFttdXN0YWNoZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgLy8gRnJhbWUgaGVscGVyc1xuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRGcmFtZSgpOiBGcmFtZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGcmFtZSgpOiBPcHRpb248RnJhbWU+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEZyYW1lKCkge1xuICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBwcml2YXRlIHBvcEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzOiBBU1QuTm9kZVtdLCBkb21Ob2RlOiBBU1QuVGV4dE5vZGUgfCBBU1QuRWxlbWVudE5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0= |
@@ -281,4 +281,2 @@ "use strict"; | ||
var blocks = this.template.block.blocks; | ||
(0, _util.assert)(typeof template !== 'number' || blocks[template] !== null, 'missing block in the compiler'); | ||
(0, _util.assert)(typeof inverse !== 'number' || blocks[inverse] !== null, 'missing block in the compiler'); | ||
this.push([_wireFormat.Ops.Block, name, params, hash, blocks[template], blocks[inverse]]); | ||
@@ -406,3 +404,2 @@ }; | ||
var component = this.blocks.pop(); | ||
(0, _util.assert)(component instanceof ComponentBlock, "Compiler bug: endComponent() should end a component"); | ||
return component.toJSON(); | ||
@@ -420,3 +417,2 @@ }; | ||
JavaScriptCompiler.prototype.prepareObject = function prepareObject(size) { | ||
(0, _util.assert)(this.values.length >= size, "Expected " + size + " values on the stack, found " + this.values.length); | ||
var keys = new Array(size); | ||
@@ -445,3 +441,2 @@ var values = new Array(size); | ||
JavaScriptCompiler.prototype.popValue = function popValue() { | ||
(0, _util.assert)(this.values.length, "No expression found on stack"); | ||
return this.values.pop(); | ||
@@ -453,3 +448,3 @@ }; | ||
get: function () { | ||
return (0, _util.expect)(this.blocks.current, 'Expected a block on the stack'); | ||
return this.blocks.current; | ||
} | ||
@@ -462,2 +457,2 @@ }]); | ||
exports.default = JavaScriptCompiler; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImphdmFzY3JpcHQtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLEFBQU8sQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUMsQUFDdkMsQUFBTyxBQUFFLEFBQUssQUFBRSxBQUFPLEFBQVUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUkvRCxBQUFPLEFBTUwsQUFBVSxBQUdWLEFBQUcsQUFDSixBQUFNLEFBQXNCLEFBQUMsQUFROUIsQUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7d0NBQU47OzhCQUNTOzthQUFVLGFBQWdCLEFBQUUsQUFBQyxBQU90QyxBQUFDOzs7b0JBSEMsQUFBSSxxQkFBQyxBQUFvQixXQUN2QixBQUFJO2FBQUMsQUFBVSxXQUFDLEFBQUksS0FBQyxBQUFTLEFBQUMsQUFBQyxBQUNsQyxBQUFDLEFBQ0Y7Ozs7QUFFRCxBQUFNO0lBQW1COzJCQUN2Qjs7eUJBQW1CLEFBQXVCOzs7cURBQ3hDLEFBQUssQUFBRSxBQUFDLFlBRFM7O2NBQUssUUFBTCxBQUFLLEFBQWtCLEFBRTFDO2VBQUM7OzswQkFFRCxBQUFNLDJCQUNKLEFBQU07O3dCQUNRLEFBQUksS0FBQyxBQUFVLEFBQzNCLEFBQVU7d0JBQUUsQUFBSSxLQUFDLEFBQUssTUFGakIsQUFFa0IsQUFBSyxBQUM3QixBQUFDLEFBQ0osQUFBQyxBQUNGO0FBSkssQUFBVTs7OztFQVBpQixBQUFLLEFBYXRDLEFBQU07SUFBcUI7NkJBV3pCOzsyQkFBb0IsQUFBK0I7OztzREFDakQsQUFBSyxBQUFFLEFBQUMsYUFEVTs7ZUFBVyxjQVZ4QixBQVVhLEFBQVcsQUFBb0I7ZUFWeEMsT0FBRyxBQUFVLEFBQUMsQUFDbEI7ZUFBTSxTQUFHLEFBQUksQUFBTyxBQUFVLEFBQUMsQUFDL0I7ZUFBSyxRQUFHLEFBQUksQUFBTyxBQUFVLEFB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QUMsQUFBRSxLQUFFLEFBQUMsQUFDOUIsQUFBSTtpQkFBQyxBQUFDLEFBQUMsS0FBRyxBQUFJLEtBQUMsQUFBUSxBQUFPLEFBQUMsQUFDL0IsQUFBTTttQkFBQyxBQUFDLEFBQUMsS0FBRyxBQUFJLEtBQUMsQUFBUSxBQUFjLEFBQUMsQUFDMUMsQUFBQztBQUVELEFBQUk7YUFBQyxBQUFTLFVBQU8sQ0FBQyxBQUFJLE1BQUUsQUFBTSxBQUFDLEFBQUMsQUFBQyxBQUN2QyxBQUFDO0FBRUQsQUFBYTs7OztpQ0FFYixBQUFJLHFCQUFDLEFBQWUsTUFDbEI7ZUFBTyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQU0sU0FBRyxBQUFDLEFBQUMsT0FBSyxBQUFJLE1BQUUsQUFBQyxBQUN0QyxBQUFJO2lCQUFDLEFBQUcsQUFBRSxBQUFDLEFBQ2IsQUFBQztBQUVELEFBQUk7YUFBQyxBQUFZLGFBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDLEFBQy9CLEFBQUM7OztpQ0FFRCxBQUFTLCtCQUF1QyxBQUFNLEtBQ3BELEFBQUk7YUFBQyxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQUcsQUFBQyxBQUFDLEFBQ3hCLEFBQUM7OztpQ0FFRCxBQUFRLCtCQUNOLEFBQU07MEJBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFNLFFBQUUsQUFBOEIsQUFBQyxBQUFDLEFBQzNELEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUcsQUFBTyxBQUFDLEFBQ2hDLEFBQUMsQUFDRjs7Ozs7eUJBck9HLEFBQU07bUJBQUMsQUFBTSxrQkFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQU8sU0FBRSxBQUErQixBQUFDLEFBQUMsQUFDdEUsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFdpcmVGb3JtYXQgZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFN0YWNrLCBEaWN0U2V0LCBPcHRpb24sIGV4cGVjdCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQmxvY2tTeW1ib2xUYWJsZSwgUHJvZ3JhbVN5bWJvbFRhYmxlIH0gZnJvbSAnLi90ZW1wbGF0ZS12aXNpdG9yJztcblxuaW1wb3J0IHtcbiAgVGVtcGxhdGVNZXRhLFxuICBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayxcbiAgU2VyaWFsaXplZFRlbXBsYXRlLFxuICBDb3JlLFxuICBTdGF0ZW1lbnQsXG4gIFN0YXRlbWVudHMsXG4gIEV4cHJlc3Npb24sXG4gIEV4cHJlc3Npb25zLFxuICBPcHNcbn0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuXG5leHBvcnQgdHlwZSBzdHIgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBQYXJhbXMgPSBDb3JlLlBhcmFtcztcbmV4cG9ydCB0eXBlIEhhc2ggPSBDb3JlLkhhc2g7XG5leHBvcnQgdHlwZSBQYXRoID0gQ29yZS5QYXRoO1xuZXhwb3J0IHR5cGUgU3RhY2tWYWx1ZSA9IEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoIHwgc3RyO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2sge1xuICBwdWJsaWMgc3RhdGVtZW50czogU3RhdGVtZW50W10gPSBbXTtcblxuICBhYnN0cmFjdCB0b0pTT04oKTogT2JqZWN0O1xuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmxpbmVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgdHlwZSA9IFwidGVtcGxhdGVcIjtcbiAgcHVibGljIHlpZWxkcyA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIG5hbWVkID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgcHJlbHVkZTogU3RhdGVtZW50W10gPSBbXTtcbiAgcHVibGljIGhlYWQ6IFN0YXRlbWVudHMuRWxlbWVudEhlYWRbXSA9IFtdO1xuICBwdWJsaWMgYmxvY2tzOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9ja1tdID0gW107XG4gIHB1YmxpYyBoYXNFdmFsID0gZmFsc2U7XG4gIHByaXZhdGUgc2F3RWxlbWVudCA9IGZhbHNlO1xuICBwcml2YXRlIGluUGFyYW1zID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzeW1ib2xUYWJsZTogUHJvZ3JhbVN5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuc2F3RWxlbWVudCkge1xuICAgICAgaWYgKFN0YXRlbWVudHMuaXNPcGVuRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuc2F3RWxlbWVudCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByZWx1ZGUucHVzaChzdGF0ZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgaWYgKFN0YXRlbWVudHMuaXNGbHVzaEVsZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmluUGFyYW1zID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGVhZC5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNJbkVsZW1lbnRIZWFkKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5oZWFkLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogb25seSBwYXJhbWV0ZXJzIGFsbG93ZWQgYmVmb3JlIGZsdXNoLWVsZW1lbnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xzOiB0aGlzLnN5bWJvbFRhYmxlLnN5bWJvbHMsXG4gICAgICBwcmVsdWRlOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLnByZWx1ZGUgOiBudWxsLFxuICAgICAgaGVhZDogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5oZWFkIDogbnVsbCxcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMuc3RhdGVtZW50cyA6IHRoaXMucHJlbHVkZSxcbiAgICAgIGhhc0V2YWw6IHRoaXMuaGFzRXZhbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgYXR0cmlidXRlczogU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSA9IFtdO1xuICBwdWJsaWMgYXJndW1lbnRzOiBTdGF0ZW1lbnRzLkFyZ3VtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBpblBhcmFtcyA9IHRydWU7XG4gIHB1YmxpYyBwb3NpdGlvbmFsczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgaWYgKFN0YXRlbWVudHMuaXNGbHVzaEVsZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmluUGFyYW1zID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNBcmd1bWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXJndW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0F0dHJpYnV0ZShzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNNb2RpZmllcihzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogRWxlbWVudCBtb2RpZmllcnMgYXJlIG5vdCBhbGxvd2VkIGluIGNvbXBvbmVudHMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogb25seSBwYXJhbWV0ZXJzIGFsbG93ZWQgYmVmb3JlIGZsdXNoLWVsZW1lbnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogW1dpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSwgV2lyZUZvcm1hdC5Db3JlLkhhc2gsIE9wdGlvbjxXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jaz5dIHtcbiAgICBsZXQgYXJncyA9IHRoaXMuYXJndW1lbnRzO1xuICAgIGxldCBrZXlzID0gYXJncy5tYXAoYXJnID0+IGFyZ1sxXSk7XG4gICAgbGV0IHZhbHVlcyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMl0pO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgIFtrZXlzLCB2YWx1ZXNdLFxuICAgICAge1xuICAgICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICAgIH1cbiAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZTxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHB1YmxpYyBibG9jazogVGVtcGxhdGVCbG9jaztcblxuICBjb25zdHJ1Y3RvcihzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIHB1YmxpYyBtZXRhOiBUKSB7XG4gICAgdGhpcy5ibG9jayA9IG5ldyBUZW1wbGF0ZUJsb2NrKHN5bWJvbHMpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRUZW1wbGF0ZTxUPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJsb2NrOiB0aGlzLmJsb2NrLnRvSlNPTigpLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0Q29tcGlsZXI8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ge1xuICBzdGF0aWMgcHJvY2VzczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPihvcGNvZGVzOiBhbnlbXSwgc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlLCBtZXRhOiBUKTogVGVtcGxhdGU8VD4ge1xuICAgIGxldCBjb21waWxlciA9IG5ldyBKYXZhU2NyaXB0Q29tcGlsZXI8VD4ob3Bjb2Rlcywgc3ltYm9scywgbWV0YSk7XG4gICAgcmV0dXJuIGNvbXBpbGVyLnByb2Nlc3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlPFQ+O1xuICBwcml2YXRlIGJsb2NrcyA9IG5ldyBTdGFjazxCbG9jaz4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXTtcbiAgcHJpdmF0ZSB2YWx1ZXM6IFN0YWNrVmFsdWVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIG1ldGE6IFQpIHtcbiAgICB0aGlzLm9wY29kZXMgPSBvcGNvZGVzO1xuICAgIHRoaXMudGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoc3ltYm9scywgbWV0YSk7XG4gIH1cblxuICBnZXQgY3VycmVudEJsb2NrKCk6IEJsb2NrIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tzLmN1cnJlbnQsICdFeHBlY3RlZCBhIGJsb2NrIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZTxUPiB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2sobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogbnVtYmVyLCBpbnZlcnNlOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG4gICAgYXNzZXJ0KHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW3RlbXBsYXRlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG4gICAgYXNzZXJ0KHR5cGVvZiBpbnZlcnNlICE9PSAnbnVtYmVyJyB8fCBibG9ja3NbaW52ZXJzZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuQmxvY2ssIG5hbWUsIHBhcmFtcywgaGFzaCwgYmxvY2tzW3RlbXBsYXRlXSwgYmxvY2tzW2ludmVyc2VdXSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuc3RhcnRDb21wb25lbnQoZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmJsb2NrUGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogPCR7ZWxlbWVudC50YWd9PiBpcyBub3QgYSBjb21wb25lbnQgYW5kIGRvZXNuJ3Qgc3VwcG9ydCBibG9jayBwYXJhbWV0ZXJzYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLk9wZW5FbGVtZW50LCB0YWddKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaEVsZW1lbnQoKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRmx1c2hFbGVtZW50XSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHRhZyA9IGVsZW1lbnQudGFnO1xuXG4gICAgaWYgKHRhZy5pbmRleE9mKCctJykgIT09IC0xKSB7XG4gICAgICBsZXQgW2F0dHJzLCBhcmdzLCBibG9ja10gPSB0aGlzLmVuZENvbXBvbmVudCgpO1xuICAgICAgdGhpcy5wdXNoKFtPcHMuQ29tcG9uZW50LCB0YWcsIGF0dHJzLCBhcmdzLCBibG9ja10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5DbG9zZUVsZW1lbnRdKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWNBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgZHluYW1pY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgdHJ1c3RpbmdBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuVHJ1c3RpbmdBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBzdGF0aWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlN0YXRpY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIGR5bmFtaWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICB5aWVsZCh0bzogbnVtYmVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIHRoaXMucHVzaChbT3BzLllpZWxkLCB0bywgcGFyYW1zXSk7XG4gIH1cblxuICBkZWJ1Z2dlcihldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIHRoaXMucHVzaChbT3BzLkRlYnVnZ2VyLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9jaz4oW09wcy5IYXNCbG9jaywgbmFtZV0pO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMobmFtZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGFzQmxvY2tQYXJhbXM+KFtPcHMuSGFzQmxvY2tQYXJhbXMsIG5hbWVdKTtcbiAgfVxuXG4gIHBhcnRpYWwoZXZhbEluZm86IENvcmUuRXZhbEluZm8pIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuUGFydGlhbCwgcGFyYW1zWzBdLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICAvLy8gRXhwcmVzc2lvbnNcblxuICBsaXRlcmFsKHZhbHVlOiBFeHByZXNzaW9ucy5WYWx1ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5VbmRlZmluZWQ+KFtPcHMuVW5kZWZpbmVkXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlZhbHVlPih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdW5rbm93bihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Vbmtub3duPihbT3BzLlVua25vd24sIG5hbWVdKTtcbiAgfVxuXG4gIGdldChoZWFkOiBudW1iZXIsIHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuR2V0PihbT3BzLkdldCwgaGVhZCwgcGF0aF0pO1xuICB9XG5cbiAgbWF5YmVMb2NhbChwYXRoOiBzdHJpbmdbXSkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLk1heWJlTG9jYWw+KFtPcHMuTWF5YmVMb2NhbCwgcGF0aF0pO1xuICB9XG5cbiAgY29uY2F0KCkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkNvbmNhdD4oW09wcy5Db25jYXQsIHRoaXMucG9wVmFsdWU8UGFyYW1zPigpXSk7XG4gIH1cblxuICBoZWxwZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGVscGVyPihbT3BzLkhlbHBlciwgbmFtZSwgcGFyYW1zLCBoYXNoXSk7XG4gIH1cblxuICAvLy8gU3RhY2sgTWFuYWdlbWVudCBPcGNvZGVzXG5cbiAgc3RhcnRDb21wb25lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRCbG9jayhlbGVtZW50WydzeW1ib2xzJ10pO1xuICAgIHRoaXMuYmxvY2tzLnB1c2goY29tcG9uZW50KTtcbiAgfVxuXG4gIGVuZENvbXBvbmVudCgpOiBbV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBXaXJlRm9ybWF0LkNvcmUuSGFzaCwgT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmJsb2Nrcy5wb3AoKTtcbiAgICBhc3NlcnQoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50QmxvY2ssIFwiQ29tcGlsZXIgYnVnOiBlbmRDb21wb25lbnQoKSBzaG91bGQgZW5kIGEgY29tcG9uZW50XCIpO1xuICAgIHJldHVybiAoY29tcG9uZW50IGFzIENvbXBvbmVudEJsb2NrKS50b0pTT04oKTtcbiAgfVxuXG4gIHByZXBhcmVBcnJheShzaXplOiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkgYXMgRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8UGFyYW1zPih2YWx1ZXMpO1xuICB9XG5cbiAgcHJlcGFyZU9iamVjdChzaXplOiBudW1iZXIpIHtcbiAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoID49IHNpemUsIGBFeHBlY3RlZCAke3NpemV9IHZhbHVlcyBvbiB0aGUgc3RhY2ssIGZvdW5kICR7dGhpcy52YWx1ZXMubGVuZ3RofWApO1xuXG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KHNpemUpO1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBrZXlzW2ldID0gdGhpcy5wb3BWYWx1ZTxzdHI+KCk7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8SGFzaD4oW2tleXMsIHZhbHVlc10pO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIHB1c2goYXJnczogU3RhdGVtZW50KSB7XG4gICAgd2hpbGUgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gbnVsbCkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbG9jay5wdXNoKGFyZ3MpO1xuICB9XG5cbiAgcHVzaFZhbHVlPFMgZXh0ZW5kcyBFeHByZXNzaW9uIHwgUGFyYW1zIHwgSGFzaD4odmFsOiBTKSB7XG4gICAgdGhpcy52YWx1ZXMucHVzaCh2YWwpO1xuICB9XG5cbiAgcG9wVmFsdWU8VCBleHRlbmRzIFN0YWNrVmFsdWU+KCk6IFQge1xuICAgIGFzc2VydCh0aGlzLnZhbHVlcy5sZW5ndGgsIFwiTm8gZXhwcmVzc2lvbiBmb3VuZCBvbiBzdGFja1wiKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMucG9wKCkgYXMgVDtcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImphdmFzY3JpcHQtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLEFBQU8sQUFBRSxBQUFLLEFBQUUsQUFBTyxBQUFVLEFBQU0sQUFBZSxBQUFDOztBQUl2RCxBQUFPLEFBTUwsQUFBVSxBQUdWLEFBQUcsQUFDSixBQUFNLEFBQXNCLEFBQUMsQUFROUIsQUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7d0NBQU47OzhCQUNTOzthQUFVLGFBQWdCLEFBQUUsQUFBQyxBQU90QyxBQUFDOzs7b0JBSEMsQUFBSSxxQkFBQyxBQUFvQixXQUN2QixBQUFJO2FBQUMsQUFBVSxXQUFDLEFBQUksS0FBQyxBQUFTLEFBQUMsQUFBQyxBQUNsQyxBQUFDLEFBQ0Y7Ozs7QUFFRCxBQUFNO0lBQW1COzJCQUN2Qjs7eUJBQW1CLEFBQXVCOzs7cURBQ3hDLEFBQUssQUFBRSxBQUFDLFlBRFM7O2NBQUssUUFBTCxBQUFLLEFBQWtCLEFBRTFDO2VBQUM7OzswQkFFRCxBQUFNLDJCQUNKLEFBQU07O3dCQUNRLEFBQUksS0FBQyxBQUFVLEFBQzNCLEFBQVU7d0JBQUUsQUFBSSxLQUFDLEFBQUssTUFGakIsQUFFa0IsQUFBSyxBQUM3QixBQUFDLEFBQ0osQUFBQyxBQUNGO0FBSkssQUFBVTs7OztFQVBpQixBQUFLLEFBYXRDLEFBQU07SUFBcUI7NkJBV3pCOzsyQkFBb0IsQUFBK0I7OztzREFDakQsQUFBSyxBQUFFLEFBQUMsYUFEVTs7ZUFBVyxjQVZ4QixBQVVhLEFBQVcsQUFBb0I7ZUFWeEMsT0FBRyxBQUFVLEFBQUMsQUFDbEI7ZUFBTSxTQUFHLEFBQUksQUFBTyxBQUFVLEFBQUMsQUFDL0I7ZUFBSyxRQUFHLEFBQUksQUFBTyxBQUFVLEFBQUMsQUFDOUI7ZUFBTyxVQUFnQixBQUFFLEFBQUMsQUFDMUI7ZUFBSSxPQUE2QixBQUFF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QUFBQyxBQUMvQixBQUFDOzs7aUNBRUQsQUFBUywrQkFBdUMsQUFBTSxLQUNwRCxBQUFJO2FBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFHLEFBQUMsQUFBQyxBQUN4QixBQUFDOzs7aUNBRUQsQUFBUSwrQkFDTixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFHLEFBQU8sQUFBQyxBQUNoQyxBQUFDLEFBQ0Y7Ozs7O3lCQWhPRyxBQUFNO21CQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBTyxBQUFDLEFBQzdCLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBTdGFjaywgRGljdFNldCwgT3B0aW9uIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBCbG9ja1N5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUgfSBmcm9tICcuL3RlbXBsYXRlLXZpc2l0b3InO1xuXG5pbXBvcnQge1xuICBUZW1wbGF0ZU1ldGEsXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBTZXJpYWxpemVkVGVtcGxhdGUsXG4gIENvcmUsXG4gIFN0YXRlbWVudCxcbiAgU3RhdGVtZW50cyxcbiAgRXhwcmVzc2lvbixcbiAgRXhwcmVzc2lvbnMsXG4gIE9wc1xufSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmV4cG9ydCB0eXBlIHN0ciA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBhcmFtcyA9IENvcmUuUGFyYW1zO1xuZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcbmV4cG9ydCB0eXBlIFBhdGggPSBDb3JlLlBhdGg7XG5leHBvcnQgdHlwZSBTdGFja1ZhbHVlID0gRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2ggfCBzdHI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9jayB7XG4gIHB1YmxpYyBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIGFic3RyYWN0IHRvSlNPTigpOiBPYmplY3Q7XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdG9KU09OKCk6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyB0eXBlID0gXCJ0ZW1wbGF0ZVwiO1xuICBwdWJsaWMgeWllbGRzID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgbmFtZWQgPSBuZXcgRGljdFNldDxzdHJpbmc+KCk7XG4gIHB1YmxpYyBwcmVsdWRlOiBTdGF0ZW1lbnRbXSA9IFtdO1xuICBwdWJsaWMgaGVhZDogU3RhdGVtZW50cy5FbGVtZW50SGVhZFtdID0gW107XG4gIHB1YmxpYyBibG9ja3M6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrW10gPSBbXTtcbiAgcHVibGljIGhhc0V2YWwgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzYXdFbGVtZW50ID0gZmFsc2U7XG4gIHByaXZhdGUgaW5QYXJhbXMgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICghdGhpcy5zYXdFbGVtZW50KSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc09wZW5FbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5zYXdFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pblBhcmFtcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJlbHVkZS5wdXNoKHN0YXRlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oZWFkLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0luRWxlbWVudEhlYWQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmhlYWQucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgIHByZWx1ZGU6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMucHJlbHVkZSA6IG51bGwsXG4gICAgICBoZWFkOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLmhlYWQgOiBudWxsLFxuICAgICAgc3RhdGVtZW50czogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5zdGF0ZW1lbnRzIDogdGhpcy5wcmVsdWRlLFxuICAgICAgaGFzRXZhbDogdGhpcy5oYXNFdmFsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG4gIHB1YmxpYyBhcmd1bWVudHM6IFN0YXRlbWVudHMuQXJndW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIGluUGFyYW1zID0gdHJ1ZTtcbiAgcHVibGljIHBvc2l0aW9uYWxzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0FyZ3VtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChTdGF0ZW1lbnRzLmlzQXR0cmlidXRlKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBFbGVtZW50IG1vZGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBbV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBXaXJlRm9ybWF0LkNvcmUuSGFzaCwgT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBhcmdzID0gdGhpcy5hcmd1bWVudHM7XG4gICAgbGV0IGtleXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzFdKTtcbiAgICBsZXQgdmFsdWVzID0gYXJncy5tYXAoYXJnID0+IGFyZ1syXSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgW2tleXMsIHZhbHVlc10sXG4gICAgICB7XG4gICAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgfVxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgcHVibGljIGJsb2NrOiBUZW1wbGF0ZUJsb2NrO1xuXG4gIGNvbnN0cnVjdG9yKHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSwgcHVibGljIG1ldGE6IFQpIHtcbiAgICB0aGlzLmJsb2NrID0gbmV3IFRlbXBsYXRlQmxvY2soc3ltYm9scyk7XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlPFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYmxvY2s6IHRoaXMuYmxvY2sudG9KU09OKCksXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphdmFTY3JpcHRDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBwcm9jZXNzPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIG1ldGE6IFQpOiBUZW1wbGF0ZTxUPiB7XG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IEphdmFTY3JpcHRDb21waWxlcjxUPihvcGNvZGVzLCBzeW1ib2xzLCBtZXRhKTtcbiAgICByZXR1cm4gY29tcGlsZXIucHJvY2VzcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZTogVGVtcGxhdGU8VD47XG4gIHByaXZhdGUgYmxvY2tzID0gbmV3IFN0YWNrPEJsb2NrPigpO1xuICBwcml2YXRlIG9wY29kZXM6IGFueVtdO1xuICBwcml2YXRlIHZhbHVlczogU3RhY2tWYWx1ZVtdID0gW107XG5cbiAgY29uc3RydWN0b3Iob3Bjb2RlczogYW55W10sIHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSwgbWV0YTogVCkge1xuICAgIHRoaXMub3Bjb2RlcyA9IG9wY29kZXM7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShzeW1ib2xzLCBtZXRhKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50QmxvY2soKTogQmxvY2sge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5jdXJyZW50O1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZTxUPiB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2sobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogbnVtYmVyLCBpbnZlcnNlOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG5cbiAgICB0aGlzLnB1c2goW09wcy5CbG9jaywgbmFtZSwgcGFyYW1zLCBoYXNoLCBibG9ja3NbdGVtcGxhdGVdLCBibG9ja3NbaW52ZXJzZV1dKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmICh0YWcuaW5kZXhPZignLScpICE9PSAtMSkge1xuICAgICAgdGhpcy5zdGFydENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYmxvY2tQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiA8JHtlbGVtZW50LnRhZ30+IGlzIG5vdCBhIGNvbXBvbmVudCBhbmQgZG9lc24ndCBzdXBwb3J0IGJsb2NrIHBhcmFtZXRlcnNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlbkVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICB0aGlzLnB1c2goW09wcy5GbHVzaEVsZW1lbnRdKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgIGxldCBbYXR0cnMsIGFyZ3MsIGJsb2NrXSA9IHRoaXMuZW5kQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLnB1c2goW09wcy5Db21wb25lbnQsIHRhZywgYXR0cnMsIGFyZ3MsIGJsb2NrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLkNsb3NlRWxlbWVudF0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBkeW5hbWljQXR0cihuYW1lOiBzdHIsIG5hbWVzcGFjZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICB0cnVzdGluZ0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5UcnVzdGluZ0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIHN0YXRpY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG5cbiAgZHluYW1pY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuRHluYW1pY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIHlpZWxkKHRvOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuWWllbGQsIHRvLCBwYXJhbXNdKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKGV2YWxJbmZvOiBDb3JlLkV2YWxJbmZvKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRGVidWdnZXIsIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhhc0Jsb2NrPihbT3BzLkhhc0Jsb2NrLCBuYW1lXSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcz4oW09wcy5IYXNCbG9ja1BhcmFtcywgbmFtZV0pO1xuICB9XG5cbiAgcGFydGlhbChldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5QYXJ0aWFsLCBwYXJhbXNbMF0sIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9uc1xuXG4gIGxpdGVyYWwodmFsdWU6IEV4cHJlc3Npb25zLlZhbHVlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVuZGVmaW5lZD4oW09wcy5VbmRlZmluZWRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVmFsdWU+KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1bmtub3duKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVua25vd24+KFtPcHMuVW5rbm93biwgbmFtZV0pO1xuICB9XG5cbiAgZ2V0KGhlYWQ6IG51bWJlciwgcGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5HZXQ+KFtPcHMuR2V0LCBoZWFkLCBwYXRoXSk7XG4gIH1cblxuICBtYXliZUxvY2FsKHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuTWF5YmVMb2NhbD4oW09wcy5NYXliZUxvY2FsLCBwYXRoXSk7XG4gIH1cblxuICBjb25jYXQoKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuQ29uY2F0PihbT3BzLkNvbmNhdCwgdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCldKTtcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IZWxwZXI+KFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcblxuICBzdGFydENvbXBvbmVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEJsb2NrKGVsZW1lbnRbJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChjb21wb25lbnQpO1xuICB9XG5cbiAgZW5kQ29tcG9uZW50KCk6IFtXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXR0cmlidXRlW10sIFdpcmVGb3JtYXQuQ29yZS5IYXNoLCBPcHRpb248V2lyZUZvcm1hdC5TZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgIHJldHVybiAoY29tcG9uZW50IGFzIENvbXBvbmVudEJsb2NrKS50b0pTT04oKTtcbiAgfVxuXG4gIHByZXBhcmVBcnJheShzaXplOiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkgYXMgRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8UGFyYW1zPih2YWx1ZXMpO1xuICB9XG5cbiAgcHJlcGFyZU9iamVjdChzaXplOiBudW1iZXIpIHtcblxuICAgIGxldCBrZXlzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShzaXplKTtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAga2V5c1tpXSA9IHRoaXMucG9wVmFsdWU8c3RyPigpO1xuICAgICAgdmFsdWVzW2ldID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFZhbHVlPEhhc2g+KFtrZXlzLCB2YWx1ZXNdKTtcbiAgfVxuXG4gIC8vLyBVdGlsaXRpZXNcblxuICBwdXNoKGFyZ3M6IFN0YXRlbWVudCkge1xuICAgIHdoaWxlIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IG51bGwpIHtcbiAgICAgIGFyZ3MucG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50QmxvY2sucHVzaChhcmdzKTtcbiAgfVxuXG4gIHB1c2hWYWx1ZTxTIGV4dGVuZHMgRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2g+KHZhbDogUykge1xuICAgIHRoaXMudmFsdWVzLnB1c2godmFsKTtcbiAgfVxuXG4gIHBvcFZhbHVlPFQgZXh0ZW5kcyBTdGFja1ZhbHVlPigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMucG9wKCkgYXMgVDtcbiAgfVxufVxuIl19 |
@@ -357,3 +357,2 @@ "use strict"; | ||
var param = params[i]; | ||
(0, _util.assert)(this[param.type], "Unimplemented " + param.type + " on TemplateCompiler"); | ||
this[param.type](param); | ||
@@ -375,3 +374,2 @@ } | ||
(0, _util.assert)(this[value.type], "Unimplemented " + value.type + " on TemplateCompiler"); | ||
this[value.type](value); | ||
@@ -432,3 +430,3 @@ this.opcode('literal', null, key); | ||
get: function () { | ||
return (0, _util.expect)(this.symbolStack.current, 'Expected a symbol table on the stack'); | ||
return this.symbolStack.current; | ||
} | ||
@@ -545,2 +543,2 @@ }]); | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxBQUFPLEFBQXdDLEFBQU0sQUFBb0IsQUFBQzs7OztBQUMxRSxBQUFPLEFBQWdDLEFBQU0sQUFBdUIsQUFBQzs7OztBQUNyRSxBQUFPLEFBQUUsQUFBSyxBQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFlLEFBQUMsQUFDeEQsQUFBTyxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBRS9DLEFBQU8sQUFBTyxBQUFTLEFBQUUsQUFBTSxBQUFpQixBQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1qRCx3QkFBd0IsQUFBVSxPQUNoQyxBQUFNO1dBQUMsQUFBSyxNQUFDLEFBQU8sWUFBSyxBQUFTLGFBQUksQ0FBQyxBQUFLLE1BQUMsQUFBTyxBQUFDLEFBQ3ZELEFBQUMsQUFFRCxBQUFNLEFBQUMsQUFBTzs7O21DQWlCWjs4QkFBWSxBQUEwQjs4QkFOOUI7O2FBQVUsYUFBRyxBQUFDLEFBQUMsQUFDZjthQUFXLGNBQWEsQUFBRSxBQUFDLEFBQzNCO2FBQVcsY0FBRyxBQUFJLEFBQUssQUFBZSxBQUFDLEFBQ3ZDO2FBQU8sVUFBVSxBQUFFLEFBQUMsQUFDcEI7YUFBVyxjQUFHLEFBQUssQUFBQyxBQUcxQixBQUFJO2FBQUMsQUFBTyxVQUFHLEFBQU8sV0FBSSxBQUFFLEFBQUMsQUFDL0IsQUFsQkEsQUFBTSxBQWtCTDs7O3FCQWxCTSxBQUFPLDJCQUF5QixBQUEwQixTQUFFLEFBQWdCLEtBQ2pGO1lBQUksQUFBZSxrQkFBRyxBQUFJLEFBQWUsQUFBRSxBQUFDLEFBQzVDLEFBQWU7d0JBQUMsQUFBSyxNQUFDLEFBQUcsQUFBQyxBQUFDLEFBRTNCO1lBQUksQUFBUSxXQUFHLElBQUksQUFBZ0IsaUJBQUMsQUFBTyxBQUFDLEFBQUMsQUFDN0M7WUFBSSxBQUFP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QUFBRyxBQUFDLEFBQUMsQUFDakcsT0FBQyxBQUNIO0FBQUM7O0FBRUQsU0FBa0M7UUFBRSxBQUFNO1FBQUUsQUFBSSxBQUFnRCxjQUM5RixBQUFFLEFBQUM7O1FBQUMsQUFBSSxRQUFJLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBTSxTQUFHLEFBQUMsQUFBQyxHQUFDLEFBQUMsQUFDbEM7Y0FBTSxJQUFJLEFBQUssQUFBQyxBQUE0QyxBQUFDLEFBQUMsQUFDaEUsTUFBQztBQUVELEFBQUUsQUFBQztRQUFDLEFBQU0sT0FBQyxBQUFNLFdBQUssQUFBQyxBQUFDLEdBQUMsQUFBQyxBQUN4QixBQUFNO2VBQUMsQUFBUyxBQUFDLEFBQ25CLEFBQUMsQUFBQyxBQUFJO1dBQUMsQUFBQyxBQUNOO2NBQU0sSUFBSSxBQUFLLEFBQUMsQUFBaUQsQUFBQyxBQUFDLEFBQ3JFLE1BQUMsQUFDSDtBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVmlzaXRvciwgeyBTeW1ib2xUYWJsZSwgQWN0aW9uIH0gZnJvbSBcIi4vdGVtcGxhdGUtdmlzaXRvclwiO1xuaW1wb3J0IEphdmFTY3JpcHRDb21waWxlciwgeyBUZW1wbGF0ZSB9IGZyb20gXCIuL2phdmFzY3JpcHQtY29tcGlsZXJcIjtcbmltcG9ydCB7IFN0YWNrLCBnZXRBdHRyTmFtZXNwYWNlIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IGFzc2VydCwgZXhwZWN0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gXCJAZ2xpbW1lci93aXJlLWZvcm1hdFwiO1xuaW1wb3J0IHsgQVNULCBpc0xpdGVyYWwgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgbWV0YTogVDtcbn1cblxuZnVuY3Rpb24gaXNUcnVzdGVkVmFsdWUodmFsdWU6IGFueSkge1xuICByZXR1cm4gdmFsdWUuZXNjYXBlZCAhPT0gdW5kZWZpbmVkICYmICF2YWx1ZS5lc2NhcGVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZUNvbXBpbGVyPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgc3RhdGljIGNvbXBpbGU8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4sIGFzdDogQVNULlByb2dyYW0pOiBUZW1wbGF0ZTxUPiB7XG4gICAgbGV0IHRlbXBsYXRlVmlzaXRvciA9IG5ldyBUZW1wbGF0ZVZpc2l0b3IoKTtcbiAgICB0ZW1wbGF0ZVZpc2l0b3IudmlzaXQoYXN0KTtcblxuICAgIGxldCBjb21waWxlciA9IG5ldyBUZW1wbGF0ZUNvbXBpbGVyKG9wdGlvbnMpO1xuICAgIGxldCBvcGNvZGVzID0gY29tcGlsZXIucHJvY2Vzcyh0ZW1wbGF0ZVZpc2l0b3IuYWN0aW9ucyk7XG4gICAgcmV0dXJuIEphdmFTY3JpcHRDb21waWxlci5wcm9jZXNzPFQ+KG9wY29kZXMsIGFzdFsnc3ltYm9scyddLCBvcHRpb25zLm1ldGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcHRpb25zOiBDb21waWxlT3B0aW9uczxUPjtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkID0gMDtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkczogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBzeW1ib2xTdGFjayA9IG5ldyBTdGFjazxTeW1ib2xUYWJsZT4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGluY2x1ZGVNZXRhID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB9XG5cbiAgZ2V0IHN5bWJvbHMoKTogU3ltYm9sVGFibGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5zeW1ib2xTdGFjay5jdXJyZW50LCAnRXhwZWN0ZWQgYSBzeW1ib2wgdGFibGUgb24gdGhlIHN0YWNrJyk7XG4gIH1cblxuICBwcm9jZXNzKGFjdGlvbnM6IEFjdGlvbltdKTogQWN0aW9uW10ge1xuICAgIGFjdGlvbnMuZm9yRWFjaCgoW25hbWUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbbmFtZV0pIHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkICR7bmFtZX0gb24gVGVtcGxhdGVDb21waWxlcmApOyB9XG4gICAgICAodGhpc1tuYW1lXSBhcyBhbnkpKC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm9wY29kZXM7XG4gIH1cblxuICBzdGFydFByb2dyYW0ocHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydFByb2dyYW0nLCBwcm9ncmFtLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kUHJvZ3JhbScsIG51bGwpO1xuICB9XG5cbiAgc3RhcnRCbG9jayhwcm9ncmFtOiBbQVNULlByb2dyYW1dKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKHByb2dyYW1bMF1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy50ZW1wbGF0ZUlkKys7XG4gICAgdGhpcy5vcGNvZGUoJ3N0YXJ0QmxvY2snLCBwcm9ncmFtLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZEJsb2NrKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy50ZW1wbGF0ZUlkcy5wdXNoKHRoaXMudGVtcGxhdGVJZCAtIDEpO1xuICAgIHRoaXMub3Bjb2RlKCdlbmRCbG9jaycsIG51bGwpO1xuICB9XG5cbiAgdGV4dChbYWN0aW9uXTogW0FTVC5UZXh0Tm9kZV0pIHtcbiAgICB0aGlzLm9wY29kZSgndGV4dCcsIGFjdGlvbiwgYWN0aW9uLmNoYXJzKTtcbiAgfVxuXG4gIGNvbW1lbnQoW2FjdGlvbl06IFtBU1QuQ29tbWVudFN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm9wY29kZSgnY29tbWVudCcsIGFjdGlvbiwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KFthY3Rpb25dOiBbQVNULkVsZW1lbnROb2RlXSkge1xuXG4gICAgdGhpcy5vcGNvZGUoJ29wZW5FbGVtZW50JywgYWN0aW9uLCBhY3Rpb24pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlKFthY3Rpb24uYXR0cmlidXRlc1tpXV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLm1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tb2RpZmllcihbYWN0aW9uLm1vZGlmaWVyc1tpXV0pO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgnZmx1c2hFbGVtZW50JywgbnVsbCk7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKGFjdGlvblsnc3ltYm9scyddKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMub3Bjb2RlKCdjbG9zZUVsZW1lbnQnLCBudWxsLCBhY3Rpb24pO1xuICB9XG5cbiAgYXR0cmlidXRlKFthY3Rpb25dOiBbQVNULkF0dHJOb2RlXSkge1xuICAgIGxldCB7IG5hbWUsIHZhbHVlIH0gPSBhY3Rpb247XG5cbiAgICBsZXQgbmFtZXNwYWNlID0gZ2V0QXR0ck5hbWVzcGFjZShuYW1lKTtcblxuICAgIGxldCBpc1N0YXRpYyA9IHRoaXMucHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAvLyBBcmd1bWVudHNcbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaXNUcnVzdGluZyA9IGlzVHJ1c3RlZFZhbHVlKHZhbHVlKTtcblxuICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdzdGF0aWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChpc1RydXN0aW5nKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCd0cnVzdGluZ0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXR0cicsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW9kaWZpZXIoW2FjdGlvbl06IFtBU1QuRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50XSkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChhY3Rpb24ucGF0aCwgYWN0aW9uLmxvYywgJ21vZGlmaWVyJyk7XG5cbiAgICBsZXQgeyBwYXRoOiB7IHBhcnRzIH0gfSA9IGFjdGlvbjtcblxuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIHRoaXMub3Bjb2RlKCdtb2RpZmllcicsIGFjdGlvbiwgcGFydHNbMF0pO1xuICB9XG5cbiAgbXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgbGV0IHsgcGF0aCB9ID0gYWN0aW9uO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnLCBhY3Rpb24sICFhY3Rpb24uZXNjYXBlZCk7XG4gICAgfSBlbHNlIGlmIChpc1lpZWxkKHBhdGgpKSB7XG4gICAgICBsZXQgdG8gPSBhc3NlcnRWYWxpZFlpZWxkKGFjdGlvbik7XG4gICAgICB0aGlzLnlpZWxkKHRvLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNQYXJ0aWFsKHBhdGgpKSB7XG4gICAgICBsZXQgcGFyYW1zID0gYXNzZXJ0VmFsaWRQYXJ0aWFsKGFjdGlvbik7XG4gICAgICB0aGlzLnBhcnRpYWwocGFyYW1zLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNEZWJ1Z2dlcihwYXRoKSkge1xuICAgICAgYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKGFjdGlvbik7XG4gICAgICB0aGlzLmRlYnVnZ2VyKCdkZWJ1Z2dlcicsIGFjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrKFthY3Rpb24vKiwgaW5kZXgsIGNvdW50Ki9dOiBbQVNULkJsb2NrU3RhdGVtZW50XSkge1xuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIGxldCB0ZW1wbGF0ZUlkID0gdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICBsZXQgaW52ZXJzZUlkID0gYWN0aW9uLmludmVyc2UgPT09IG51bGwgPyBudWxsIDogdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnYmxvY2snLCBhY3Rpb24sIGFjdGlvbi5wYXRoLnBhcnRzWzBdLCB0ZW1wbGF0ZUlkLCBpbnZlcnNlSWQpO1xuICB9XG5cbiAgLy8vIEludGVybmFsIGFjdGlvbnMsIG5vdCBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgcHJvY2Vzc2VkIGFjdGlvbnNcblxuICBhcmcoW3BhdGhdOiBbQVNULlBhdGhFeHByZXNzaW9uXSkge1xuICAgIGxldCB7IHBhcnRzOiBbaGVhZCwgLi4ucmVzdF0gfSA9IHBhdGg7XG4gICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9scy5hbGxvY2F0ZU5hbWVkKGhlYWQpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBwYXRoLCBzeW1ib2wsIHJlc3QpO1xuICB9XG5cbiAgbXVzdGFjaGVFeHByZXNzaW9uKGV4cHI6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG5cbiAgICBpZiAoaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIGV4cHIsIHBhdGgudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaXNCdWlsdEluSGVscGVyKHBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwciBhcyBBU1QuQ2FsbCk7XG4gICAgfSBlbHNlIGlmIChpc0FyZyhwYXRoKSkge1xuICAgICAgdGhpcy5hcmcoW3BhdGhdKTtcbiAgICB9IGVsc2UgaWYgKGlzSGVscGVySW52b2NhdGlvbihleHByKSkge1xuICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2hlbHBlcicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSBpZiAocGF0aC50aGlzKSB7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc0xvY2FsKHBhdGgsIHRoaXMuc3ltYm9scykpIHtcbiAgICAgIGxldCBbaGVhZCwgLi4ucGFydHNdID0gcGF0aC5wYXJ0cztcbiAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCB0aGlzLnN5bWJvbHMuZ2V0KGhlYWQpLCBwYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc1NpbXBsZVBhdGgocGF0aCkpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCd1bmtub3duJywgZXhwciwgcGF0aC5wYXJ0c1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdtYXliZUxvY2FsJywgZXhwciwgcGF0aC5wYXJ0cyk7XG4gICAgfVxuICB9XG5cbiAgLy8vIEludGVybmFsIFN5bnRheFxuXG4gIHlpZWxkKHRvOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgIHRoaXMub3Bjb2RlKCd5aWVsZCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sodG8pKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKF9uYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5vcGNvZGUoJ2RlYnVnZ2VyJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKSk7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2snLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIGhhc0Jsb2NrUGFyYW1zKG5hbWU6IHN0cmluZywgYWN0aW9uOiBBU1QuQ2FsbCkge1xuICAgIHRoaXMub3Bjb2RlKCdoYXNCbG9ja1BhcmFtcycsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sobmFtZSkpO1xuICB9XG5cbiAgcGFydGlhbChfcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgncGFydGlhbCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgYnVpbHRJbkhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG4gICAgaWYgKGlzSGFzQmxvY2socGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrKG5hbWUsIGV4cHIpO1xuICAgIH0gZWxzZSBpZiAoaXNIYXNCbG9ja1BhcmFtcyhwYXRoKSkge1xuICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgIHRoaXMuaGFzQmxvY2tQYXJhbXMobmFtZSwgZXhwcik7XG4gICAgfVxuICB9XG5cbiAgLy8vIEV4cHJlc3Npb25zLCBpbnZva2VkIHJlY3Vyc2l2ZWx5IGZyb20gcHJlcGFyZVBhcmFtcyBhbmQgcHJlcGFyZUhhc2hcblxuICBTdWJFeHByZXNzaW9uKGV4cHI6IEFTVC5TdWJFeHByZXNzaW9uKSB7XG4gICAgaWYgKGlzQnVpbHRJbkhlbHBlcihleHByLnBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBleHByLnBhdGgucGFydHNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIFBhdGhFeHByZXNzaW9uKGV4cHI6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICAgIGlmIChleHByLmRhdGEpIHtcbiAgICAgIHRoaXMuYXJnKFtleHByXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB7IHN5bWJvbHMgfSA9IHRoaXM7XG4gICAgICBsZXQgW2hlYWRdID0gZXhwci5wYXJ0cztcblxuICAgICAgaWYgKGV4cHIudGhpcykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgZXhwci5wYXJ0cyk7XG4gICAgICB9IGVsc2UgIGlmIChzeW1ib2xzLmhhcyhoZWFkKSkge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgc3ltYm9scy5nZXQoaGVhZCksIGV4cHIucGFydHMuc2xpY2UoMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFN0cmluZ0xpdGVyYWwoYWN0aW9uOiBBU1QuU3RyaW5nTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIEJvb2xlYW5MaXRlcmFsKGFjdGlvbjogQVNULkJvb2xlYW5MaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVtYmVyTGl0ZXJhbChhY3Rpb246IEFTVC5OdW1iZXJMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVsbExpdGVyYWwoYWN0aW9uOiBBU1QuTnVsbExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBVbmRlZmluZWRMaXRlcmFsKGFjdGlvbjogQVNULlVuZGVmaW5lZExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgb3Bjb2RlKG5hbWU6IGFueSwgYWN0aW9uOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbGV0IG9wY29kZSA9IFtuYW1lLCAuLi5hcmdzXTtcbiAgICBpZiAodGhpcy5pbmNsdWRlTWV0YSAmJiBhY3Rpb24pIHtcbiAgICAgIG9wY29kZS5wdXNoKHRoaXMubWV0YShhY3Rpb24pKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMucHVzaChvcGNvZGUpO1xuICB9XG5cbiAgcHJlcGFyZUhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChleHByLnBhdGgsIGV4cHIubG9jLCAnaGVscGVyJyk7XG5cbiAgICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IGV4cHI7XG5cbiAgICB0aGlzLnByZXBhcmVIYXNoKGhhc2gpO1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgcHJlcGFyZVBhcmFtcyhwYXJhbXM6IEFTVC5FeHByZXNzaW9uW10pIHtcbiAgICBpZiAoIXBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhcmFtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcmFtID0gcGFyYW1zW2ldO1xuXG4gICAgICBhc3NlcnQodGhpc1twYXJhbS50eXBlXSwgYFVuaW1wbGVtZW50ZWQgJHtwYXJhbS50eXBlfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7XG4gICAgICAodGhpc1twYXJhbS50eXBlXSBhcyBhbnkpKHBhcmFtKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZUFycmF5JywgbnVsbCwgcGFyYW1zLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlSGFzaChoYXNoOiBBU1QuSGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgICBpZiAoIXBhaXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuXG4gICAgICBhc3NlcnQodGhpc1t2YWx1ZS50eXBlXSwgYFVuaW1wbGVtZW50ZWQgJHt2YWx1ZS50eXBlfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7XG4gICAgICAodGhpc1t2YWx1ZS50eXBlXSBhcyBhbnkpKHZhbHVlKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwga2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZU9iamVjdCcsIG51bGwsIHBhaXJzLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWU6IEFTVC5BdHRyTm9kZVsndmFsdWUnXSkge1xuICAgIC8vIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBpZiB0aGUgdmFsdWUgaXMgc3RhdGljXG5cbiAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1RleHROb2RlJzpcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCB2YWx1ZSwgdmFsdWUuY2hhcnMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5wcmVwYXJlQ29uY2F0UGFydHModmFsdWUucGFydHMpO1xuICAgICAgICB0aGlzLm9wY29kZSgnY29uY2F0JywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZUNvbmNhdFBhcnRzKHBhcnRzOiBBU1QuQ29uY2F0U3RhdGVtZW50WydwYXJ0cyddKSB7XG4gICAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3BhcnRdKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgcGFydC5jaGFycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcnRzLmxlbmd0aCk7XG4gIH1cblxuICBhdHRyaWJ1dGVNdXN0YWNoZShbYWN0aW9uXTogW0FTVC5NdXN0YWNoZVN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICB9XG5cbiAgbWV0YShub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICBsZXQgbG9jID0gbm9kZS5sb2M7XG4gICAgaWYgKCFsb2MpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICBsZXQgeyBzb3VyY2UsIHN0YXJ0LCBlbmQgfSA9IGxvYztcbiAgICByZXR1cm4gWyAnbG9jJywgW3NvdXJjZSB8fCBudWxsLCBbc3RhcnQubGluZSwgc3RhcnQuY29sdW1uXSwgW2VuZC5saW5lLCBlbmQuY29sdW1uXV0gXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hlbHBlckludm9jYXRpb24obXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IG11c3RhY2hlIGlzIEFTVC5NdXN0YWNoZVN0YXRlbWVudCAmIHsgcGF0aDogQVNULlBhdGhFeHByZXNzaW9uIH0ge1xuICByZXR1cm4gKG11c3RhY2hlLnBhcmFtcyAmJiBtdXN0YWNoZS5wYXJhbXMubGVuZ3RoID4gMCkgfHxcbiAgICAobXVzdGFjaGUuaGFzaCAmJiBtdXN0YWNoZS5oYXNoLnBhaXJzLmxlbmd0aCA+IDApO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZVBhdGgoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbCh7IHBhcnRzIH06IEFTVC5QYXRoRXhwcmVzc2lvbiwgc3ltYm9sczogU3ltYm9sVGFibGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN5bWJvbHMgJiYgLyogcGFydHMubGVuZ3RoICYmICovIHN5bWJvbHMuaGFzKHBhcnRzWzBdKTtcbn1cblxuZnVuY3Rpb24gaXNZaWVsZChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICd5aWVsZCc7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdwYXJ0aWFsJztcbn1cblxuZnVuY3Rpb24gaXNEZWJ1Z2dlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdkZWJ1Z2dlcic7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2socGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrJztcbn1cblxuZnVuY3Rpb24gaXNIYXNCbG9ja1BhcmFtcyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2stcGFyYW1zJztcbn1cblxuZnVuY3Rpb24gaXNCdWlsdEluSGVscGVyKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gaXNIYXNCbG9jayhwYXRoKSB8fCBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBpc0FyZyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcGF0aFsnZGF0YSddO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc1NpbXBsZVBhdGgocGF0aDogQVNULlBhdGhFeHByZXNzaW9uLCBsb2M6IEFTVC5Tb3VyY2VMb2NhdGlvbiwgY29udGV4dDogc3RyaW5nKSB7XG4gIGlmICghaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBcXGAke3BhdGgub3JpZ2luYWx9XFxgIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgJHtjb250ZXh0fSBvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9LmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkWWllbGQoeyBoYXNoIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IHN0cmluZyB7XG4gIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgaWYgKChwYWlycy5sZW5ndGggPT09IDEgJiYgcGFpcnNbMF0ua2V5ICE9PSAndG8nKSB8fCBwYWlycy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB5aWVsZCBvbmx5IHRha2VzIGEgc2luZ2xlIG5hbWVkIGFyZ3VtZW50OiAndG8nYCk7XG4gIH0gZWxzZSBpZiAocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLnZhbHVlLnR5cGUgIT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZWApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChwYWlyc1swXS52YWx1ZSBhcyBBU1QuU3RyaW5nTGl0ZXJhbCkudmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQYXJ0aWFsKHsgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBsb2MgfTogQVNULk11c3RhY2hlU3RhdGVtZW50KSAvKiA6IGV4cHIgKi8ge1xuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcnRpYWwgZm91bmQgd2l0aCBubyBhcmd1bWVudHMuIFlvdSBtdXN0IHNwZWNpZnkgYSB0ZW1wbGF0ZSBuYW1lLiAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgfSBlbHNlIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgcGFydGlhbCBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHMgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoIWVzY2FwZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHt7e3BhcnRpYWwgLi4ufX19IGlzIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSB1c2Uge3twYXJ0aWFsIC4uLn19IGluc3RlYWQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UodHlwZTogc3RyaW5nLCB7IHBhcmFtcywgaGFzaCwgbG9jIH06IEFTVC5DYWxsKTogc3RyaW5nIHtcbiAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R5cGV9IGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEpIHtcbiAgICBsZXQgcGFyYW0gPSBwYXJhbXNbMF07XG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgcmV0dXJuIHBhcmFtLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWUgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKHsgcGFyYW1zLCBoYXNoIH06IHsgcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBoYXNoOiBBU1QuSGFzaCB9KSB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZWJ1Z2dlciBkb2VzIG5vdCB0YWtlIGFueSBwb3NpdGlvbmFsIGFyZ3VtZW50c2ApO1xuICB9XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxBQUFPLEFBQXdDLEFBQU0sQUFBb0IsQUFBQzs7OztBQUMxRSxBQUFPLEFBQWdDLEFBQU0sQUFBdUIsQUFBQzs7OztBQUNyRSxBQUFPLEFBQUUsQUFBSyxBQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBRXhELEFBQU8sQUFBTyxBQUFTLEFBQUUsQUFBTSxBQUFpQixBQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1qRCx3QkFBd0IsQUFBVSxPQUNoQyxBQUFNO1dBQUMsQUFBSyxNQUFDLEFBQU8sWUFBSyxBQUFTLGFBQUksQ0FBQyxBQUFLLE1BQUMsQUFBTyxBQUFDLEFBQ3ZELEFBQUMsQUFFRCxBQUFNLEFBQUMsQUFBTzs7O21DQWlCWjs4QkFBWSxBQUEwQjs4QkFOOUI7O2FBQVUsYUFBRyxBQUFDLEFBQUMsQUFDZjthQUFXLGNBQWEsQUFBRSxBQUFDLEFBQzNCO2FBQVcsY0FBRyxBQUFJLEFBQUssQUFBZSxBQUFDLEFBQ3ZDO2FBQU8sVUFBVSxBQUFFLEFBQUMsQUFDcEI7YUFBVyxjQUFHLEFBQUssQUFBQyxBQUcxQixBQUFJO2FBQUMsQUFBTyxVQUFHLEFBQU8sV0FBSSxBQUFFLEFBQUMsQUFDL0IsQUFsQkEsQUFBTSxBQWtCTDs7O3FCQWxCTSxBQUFPLDJCQUF5QixBQUEwQixTQUFFLEFBQWdCLEtBQ2pGO1lBQUksQUFBZSxrQkFBRyxBQUFJLEFBQWUsQUFBRSxBQUFDLEFBQzVDLEFBQWU7d0JBQUMsQUFBSyxNQUFDLEFBQUcsQUFBQyxBQUFDLEFBRTNCO1lBQUksQUFBUSxXQUFHLElBQUksQUFBZ0IsaUJBQUMsQUFBTyxBQUFDLEFBQUMsQUFDN0M7WUFBSSxBQUFPLFVBQUcsQUFBUSxTQUFDLEFBQU8sUUFBQyxBQUFlLGdCQUFDLEFBQU8sQUFBQyxBQUFD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LEdBQUMsQUFBQyxBQUN4QixBQUFNO2VBQUMsQUFBUyxBQUFDLEFBQ25CLEFBQUMsQUFBQyxBQUFJO1dBQUMsQUFBQyxBQUNOO2NBQU0sSUFBSSxBQUFLLEFBQUMsQUFBaUQsQUFBQyxBQUFDLEFBQ3JFLE1BQUMsQUFDSDtBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVmlzaXRvciwgeyBTeW1ib2xUYWJsZSwgQWN0aW9uIH0gZnJvbSBcIi4vdGVtcGxhdGUtdmlzaXRvclwiO1xuaW1wb3J0IEphdmFTY3JpcHRDb21waWxlciwgeyBUZW1wbGF0ZSB9IGZyb20gXCIuL2phdmFzY3JpcHQtY29tcGlsZXJcIjtcbmltcG9ydCB7IFN0YWNrLCBnZXRBdHRyTmFtZXNwYWNlIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gXCJAZ2xpbW1lci93aXJlLWZvcm1hdFwiO1xuaW1wb3J0IHsgQVNULCBpc0xpdGVyYWwgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgbWV0YTogVDtcbn1cblxuZnVuY3Rpb24gaXNUcnVzdGVkVmFsdWUodmFsdWU6IGFueSkge1xuICByZXR1cm4gdmFsdWUuZXNjYXBlZCAhPT0gdW5kZWZpbmVkICYmICF2YWx1ZS5lc2NhcGVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZUNvbXBpbGVyPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgc3RhdGljIGNvbXBpbGU8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4sIGFzdDogQVNULlByb2dyYW0pOiBUZW1wbGF0ZTxUPiB7XG4gICAgbGV0IHRlbXBsYXRlVmlzaXRvciA9IG5ldyBUZW1wbGF0ZVZpc2l0b3IoKTtcbiAgICB0ZW1wbGF0ZVZpc2l0b3IudmlzaXQoYXN0KTtcblxuICAgIGxldCBjb21waWxlciA9IG5ldyBUZW1wbGF0ZUNvbXBpbGVyKG9wdGlvbnMpO1xuICAgIGxldCBvcGNvZGVzID0gY29tcGlsZXIucHJvY2Vzcyh0ZW1wbGF0ZVZpc2l0b3IuYWN0aW9ucyk7XG4gICAgcmV0dXJuIEphdmFTY3JpcHRDb21waWxlci5wcm9jZXNzPFQ+KG9wY29kZXMsIGFzdFsnc3ltYm9scyddLCBvcHRpb25zLm1ldGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcHRpb25zOiBDb21waWxlT3B0aW9uczxUPjtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkID0gMDtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkczogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBzeW1ib2xTdGFjayA9IG5ldyBTdGFjazxTeW1ib2xUYWJsZT4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGluY2x1ZGVNZXRhID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB9XG5cbiAgZ2V0IHN5bWJvbHMoKTogU3ltYm9sVGFibGUge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFN0YWNrLmN1cnJlbnQ7XG4gIH1cblxuICBwcm9jZXNzKGFjdGlvbnM6IEFjdGlvbltdKTogQWN0aW9uW10ge1xuICAgIGFjdGlvbnMuZm9yRWFjaCgoW25hbWUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbbmFtZV0pIHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkICR7bmFtZX0gb24gVGVtcGxhdGVDb21waWxlcmApOyB9XG4gICAgICAodGhpc1tuYW1lXSBhcyBhbnkpKC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm9wY29kZXM7XG4gIH1cblxuICBzdGFydFByb2dyYW0ocHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydFByb2dyYW0nLCBwcm9ncmFtLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kUHJvZ3JhbScsIG51bGwpO1xuICB9XG5cbiAgc3RhcnRCbG9jayhwcm9ncmFtOiBbQVNULlByb2dyYW1dKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKHByb2dyYW1bMF1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy50ZW1wbGF0ZUlkKys7XG4gICAgdGhpcy5vcGNvZGUoJ3N0YXJ0QmxvY2snLCBwcm9ncmFtLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZEJsb2NrKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy50ZW1wbGF0ZUlkcy5wdXNoKHRoaXMudGVtcGxhdGVJZCAtIDEpO1xuICAgIHRoaXMub3Bjb2RlKCdlbmRCbG9jaycsIG51bGwpO1xuICB9XG5cbiAgdGV4dChbYWN0aW9uXTogW0FTVC5UZXh0Tm9kZV0pIHtcbiAgICB0aGlzLm9wY29kZSgndGV4dCcsIGFjdGlvbiwgYWN0aW9uLmNoYXJzKTtcbiAgfVxuXG4gIGNvbW1lbnQoW2FjdGlvbl06IFtBU1QuQ29tbWVudFN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm9wY29kZSgnY29tbWVudCcsIGFjdGlvbiwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KFthY3Rpb25dOiBbQVNULkVsZW1lbnROb2RlXSkge1xuXG4gICAgdGhpcy5vcGNvZGUoJ29wZW5FbGVtZW50JywgYWN0aW9uLCBhY3Rpb24pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlKFthY3Rpb24uYXR0cmlidXRlc1tpXV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLm1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tb2RpZmllcihbYWN0aW9uLm1vZGlmaWVyc1tpXV0pO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgnZmx1c2hFbGVtZW50JywgbnVsbCk7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKGFjdGlvblsnc3ltYm9scyddKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMub3Bjb2RlKCdjbG9zZUVsZW1lbnQnLCBudWxsLCBhY3Rpb24pO1xuICB9XG5cbiAgYXR0cmlidXRlKFthY3Rpb25dOiBbQVNULkF0dHJOb2RlXSkge1xuICAgIGxldCB7IG5hbWUsIHZhbHVlIH0gPSBhY3Rpb247XG5cbiAgICBsZXQgbmFtZXNwYWNlID0gZ2V0QXR0ck5hbWVzcGFjZShuYW1lKTtcblxuICAgIGxldCBpc1N0YXRpYyA9IHRoaXMucHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAvLyBBcmd1bWVudHNcbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaXNUcnVzdGluZyA9IGlzVHJ1c3RlZFZhbHVlKHZhbHVlKTtcblxuICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdzdGF0aWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChpc1RydXN0aW5nKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCd0cnVzdGluZ0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXR0cicsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW9kaWZpZXIoW2FjdGlvbl06IFtBU1QuRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50XSkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChhY3Rpb24ucGF0aCwgYWN0aW9uLmxvYywgJ21vZGlmaWVyJyk7XG5cbiAgICBsZXQgeyBwYXRoOiB7IHBhcnRzIH0gfSA9IGFjdGlvbjtcblxuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIHRoaXMub3Bjb2RlKCdtb2RpZmllcicsIGFjdGlvbiwgcGFydHNbMF0pO1xuICB9XG5cbiAgbXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgbGV0IHsgcGF0aCB9ID0gYWN0aW9uO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnLCBhY3Rpb24sICFhY3Rpb24uZXNjYXBlZCk7XG4gICAgfSBlbHNlIGlmIChpc1lpZWxkKHBhdGgpKSB7XG4gICAgICBsZXQgdG8gPSBhc3NlcnRWYWxpZFlpZWxkKGFjdGlvbik7XG4gICAgICB0aGlzLnlpZWxkKHRvLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNQYXJ0aWFsKHBhdGgpKSB7XG4gICAgICBsZXQgcGFyYW1zID0gYXNzZXJ0VmFsaWRQYXJ0aWFsKGFjdGlvbik7XG4gICAgICB0aGlzLnBhcnRpYWwocGFyYW1zLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNEZWJ1Z2dlcihwYXRoKSkge1xuICAgICAgYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKGFjdGlvbik7XG4gICAgICB0aGlzLmRlYnVnZ2VyKCdkZWJ1Z2dlcicsIGFjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrKFthY3Rpb24vKiwgaW5kZXgsIGNvdW50Ki9dOiBbQVNULkJsb2NrU3RhdGVtZW50XSkge1xuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIGxldCB0ZW1wbGF0ZUlkID0gdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICBsZXQgaW52ZXJzZUlkID0gYWN0aW9uLmludmVyc2UgPT09IG51bGwgPyBudWxsIDogdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnYmxvY2snLCBhY3Rpb24sIGFjdGlvbi5wYXRoLnBhcnRzWzBdLCB0ZW1wbGF0ZUlkLCBpbnZlcnNlSWQpO1xuICB9XG5cbiAgLy8vIEludGVybmFsIGFjdGlvbnMsIG5vdCBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgcHJvY2Vzc2VkIGFjdGlvbnNcblxuICBhcmcoW3BhdGhdOiBbQVNULlBhdGhFeHByZXNzaW9uXSkge1xuICAgIGxldCB7IHBhcnRzOiBbaGVhZCwgLi4ucmVzdF0gfSA9IHBhdGg7XG4gICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9scy5hbGxvY2F0ZU5hbWVkKGhlYWQpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBwYXRoLCBzeW1ib2wsIHJlc3QpO1xuICB9XG5cbiAgbXVzdGFjaGVFeHByZXNzaW9uKGV4cHI6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG5cbiAgICBpZiAoaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIGV4cHIsIHBhdGgudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaXNCdWlsdEluSGVscGVyKHBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwciBhcyBBU1QuQ2FsbCk7XG4gICAgfSBlbHNlIGlmIChpc0FyZyhwYXRoKSkge1xuICAgICAgdGhpcy5hcmcoW3BhdGhdKTtcbiAgICB9IGVsc2UgaWYgKGlzSGVscGVySW52b2NhdGlvbihleHByKSkge1xuICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2hlbHBlcicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSBpZiAocGF0aC50aGlzKSB7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc0xvY2FsKHBhdGgsIHRoaXMuc3ltYm9scykpIHtcbiAgICAgIGxldCBbaGVhZCwgLi4ucGFydHNdID0gcGF0aC5wYXJ0cztcbiAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCB0aGlzLnN5bWJvbHMuZ2V0KGhlYWQpLCBwYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc1NpbXBsZVBhdGgocGF0aCkpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCd1bmtub3duJywgZXhwciwgcGF0aC5wYXJ0c1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdtYXliZUxvY2FsJywgZXhwciwgcGF0aC5wYXJ0cyk7XG4gICAgfVxuICB9XG5cbiAgLy8vIEludGVybmFsIFN5bnRheFxuXG4gIHlpZWxkKHRvOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgIHRoaXMub3Bjb2RlKCd5aWVsZCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sodG8pKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKF9uYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5vcGNvZGUoJ2RlYnVnZ2VyJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKSk7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2snLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIGhhc0Jsb2NrUGFyYW1zKG5hbWU6IHN0cmluZywgYWN0aW9uOiBBU1QuQ2FsbCkge1xuICAgIHRoaXMub3Bjb2RlKCdoYXNCbG9ja1BhcmFtcycsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sobmFtZSkpO1xuICB9XG5cbiAgcGFydGlhbChfcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgncGFydGlhbCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgYnVpbHRJbkhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG4gICAgaWYgKGlzSGFzQmxvY2socGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrKG5hbWUsIGV4cHIpO1xuICAgIH0gZWxzZSBpZiAoaXNIYXNCbG9ja1BhcmFtcyhwYXRoKSkge1xuICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgIHRoaXMuaGFzQmxvY2tQYXJhbXMobmFtZSwgZXhwcik7XG4gICAgfVxuICB9XG5cbiAgLy8vIEV4cHJlc3Npb25zLCBpbnZva2VkIHJlY3Vyc2l2ZWx5IGZyb20gcHJlcGFyZVBhcmFtcyBhbmQgcHJlcGFyZUhhc2hcblxuICBTdWJFeHByZXNzaW9uKGV4cHI6IEFTVC5TdWJFeHByZXNzaW9uKSB7XG4gICAgaWYgKGlzQnVpbHRJbkhlbHBlcihleHByLnBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBleHByLnBhdGgucGFydHNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIFBhdGhFeHByZXNzaW9uKGV4cHI6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICAgIGlmIChleHByLmRhdGEpIHtcbiAgICAgIHRoaXMuYXJnKFtleHByXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB7IHN5bWJvbHMgfSA9IHRoaXM7XG4gICAgICBsZXQgW2hlYWRdID0gZXhwci5wYXJ0cztcblxuICAgICAgaWYgKGV4cHIudGhpcykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgZXhwci5wYXJ0cyk7XG4gICAgICB9IGVsc2UgIGlmIChzeW1ib2xzLmhhcyhoZWFkKSkge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgc3ltYm9scy5nZXQoaGVhZCksIGV4cHIucGFydHMuc2xpY2UoMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFN0cmluZ0xpdGVyYWwoYWN0aW9uOiBBU1QuU3RyaW5nTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIEJvb2xlYW5MaXRlcmFsKGFjdGlvbjogQVNULkJvb2xlYW5MaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVtYmVyTGl0ZXJhbChhY3Rpb246IEFTVC5OdW1iZXJMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVsbExpdGVyYWwoYWN0aW9uOiBBU1QuTnVsbExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBVbmRlZmluZWRMaXRlcmFsKGFjdGlvbjogQVNULlVuZGVmaW5lZExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgb3Bjb2RlKG5hbWU6IGFueSwgYWN0aW9uOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbGV0IG9wY29kZSA9IFtuYW1lLCAuLi5hcmdzXTtcbiAgICBpZiAodGhpcy5pbmNsdWRlTWV0YSAmJiBhY3Rpb24pIHtcbiAgICAgIG9wY29kZS5wdXNoKHRoaXMubWV0YShhY3Rpb24pKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMucHVzaChvcGNvZGUpO1xuICB9XG5cbiAgcHJlcGFyZUhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChleHByLnBhdGgsIGV4cHIubG9jLCAnaGVscGVyJyk7XG5cbiAgICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IGV4cHI7XG5cbiAgICB0aGlzLnByZXBhcmVIYXNoKGhhc2gpO1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgcHJlcGFyZVBhcmFtcyhwYXJhbXM6IEFTVC5FeHByZXNzaW9uW10pIHtcbiAgICBpZiAoIXBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhcmFtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcmFtID0gcGFyYW1zW2ldO1xuXG4gICAgICAodGhpc1twYXJhbS50eXBlXSBhcyBhbnkpKHBhcmFtKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZUFycmF5JywgbnVsbCwgcGFyYW1zLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlSGFzaChoYXNoOiBBU1QuSGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgICBpZiAoIXBhaXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuXG4gICAgICAodGhpc1t2YWx1ZS50eXBlXSBhcyBhbnkpKHZhbHVlKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwga2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZU9iamVjdCcsIG51bGwsIHBhaXJzLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWU6IEFTVC5BdHRyTm9kZVsndmFsdWUnXSkge1xuICAgIC8vIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBpZiB0aGUgdmFsdWUgaXMgc3RhdGljXG5cbiAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1RleHROb2RlJzpcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCB2YWx1ZSwgdmFsdWUuY2hhcnMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5wcmVwYXJlQ29uY2F0UGFydHModmFsdWUucGFydHMpO1xuICAgICAgICB0aGlzLm9wY29kZSgnY29uY2F0JywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZUNvbmNhdFBhcnRzKHBhcnRzOiBBU1QuQ29uY2F0U3RhdGVtZW50WydwYXJ0cyddKSB7XG4gICAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3BhcnRdKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgcGFydC5jaGFycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcnRzLmxlbmd0aCk7XG4gIH1cblxuICBhdHRyaWJ1dGVNdXN0YWNoZShbYWN0aW9uXTogW0FTVC5NdXN0YWNoZVN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICB9XG5cbiAgbWV0YShub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICBsZXQgbG9jID0gbm9kZS5sb2M7XG4gICAgaWYgKCFsb2MpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICBsZXQgeyBzb3VyY2UsIHN0YXJ0LCBlbmQgfSA9IGxvYztcbiAgICByZXR1cm4gWyAnbG9jJywgW3NvdXJjZSB8fCBudWxsLCBbc3RhcnQubGluZSwgc3RhcnQuY29sdW1uXSwgW2VuZC5saW5lLCBlbmQuY29sdW1uXV0gXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hlbHBlckludm9jYXRpb24obXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IG11c3RhY2hlIGlzIEFTVC5NdXN0YWNoZVN0YXRlbWVudCAmIHsgcGF0aDogQVNULlBhdGhFeHByZXNzaW9uIH0ge1xuICByZXR1cm4gKG11c3RhY2hlLnBhcmFtcyAmJiBtdXN0YWNoZS5wYXJhbXMubGVuZ3RoID4gMCkgfHxcbiAgICAobXVzdGFjaGUuaGFzaCAmJiBtdXN0YWNoZS5oYXNoLnBhaXJzLmxlbmd0aCA+IDApO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZVBhdGgoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbCh7IHBhcnRzIH06IEFTVC5QYXRoRXhwcmVzc2lvbiwgc3ltYm9sczogU3ltYm9sVGFibGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN5bWJvbHMgJiYgLyogcGFydHMubGVuZ3RoICYmICovIHN5bWJvbHMuaGFzKHBhcnRzWzBdKTtcbn1cblxuZnVuY3Rpb24gaXNZaWVsZChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICd5aWVsZCc7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdwYXJ0aWFsJztcbn1cblxuZnVuY3Rpb24gaXNEZWJ1Z2dlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdkZWJ1Z2dlcic7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2socGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrJztcbn1cblxuZnVuY3Rpb24gaXNIYXNCbG9ja1BhcmFtcyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2stcGFyYW1zJztcbn1cblxuZnVuY3Rpb24gaXNCdWlsdEluSGVscGVyKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gaXNIYXNCbG9jayhwYXRoKSB8fCBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBpc0FyZyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcGF0aFsnZGF0YSddO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc1NpbXBsZVBhdGgocGF0aDogQVNULlBhdGhFeHByZXNzaW9uLCBsb2M6IEFTVC5Tb3VyY2VMb2NhdGlvbiwgY29udGV4dDogc3RyaW5nKSB7XG4gIGlmICghaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBcXGAke3BhdGgub3JpZ2luYWx9XFxgIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgJHtjb250ZXh0fSBvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9LmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkWWllbGQoeyBoYXNoIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IHN0cmluZyB7XG4gIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgaWYgKChwYWlycy5sZW5ndGggPT09IDEgJiYgcGFpcnNbMF0ua2V5ICE9PSAndG8nKSB8fCBwYWlycy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB5aWVsZCBvbmx5IHRha2VzIGEgc2luZ2xlIG5hbWVkIGFyZ3VtZW50OiAndG8nYCk7XG4gIH0gZWxzZSBpZiAocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLnZhbHVlLnR5cGUgIT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZWApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChwYWlyc1swXS52YWx1ZSBhcyBBU1QuU3RyaW5nTGl0ZXJhbCkudmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQYXJ0aWFsKHsgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBsb2MgfTogQVNULk11c3RhY2hlU3RhdGVtZW50KSAvKiA6IGV4cHIgKi8ge1xuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcnRpYWwgZm91bmQgd2l0aCBubyBhcmd1bWVudHMuIFlvdSBtdXN0IHNwZWNpZnkgYSB0ZW1wbGF0ZSBuYW1lLiAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgfSBlbHNlIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgcGFydGlhbCBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHMgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoIWVzY2FwZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHt7e3BhcnRpYWwgLi4ufX19IGlzIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSB1c2Uge3twYXJ0aWFsIC4uLn19IGluc3RlYWQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UodHlwZTogc3RyaW5nLCB7IHBhcmFtcywgaGFzaCwgbG9jIH06IEFTVC5DYWxsKTogc3RyaW5nIHtcbiAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R5cGV9IGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEpIHtcbiAgICBsZXQgcGFyYW0gPSBwYXJhbXNbMF07XG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgcmV0dXJuIHBhcmFtLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWUgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKHsgcGFyYW1zLCBoYXNoIH06IHsgcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBoYXNoOiBBU1QuSGFzaCB9KSB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZWJ1Z2dlciBkb2VzIG5vdCB0YWtlIGFueSBwb3NpdGlvbmFsIGFyZ3VtZW50c2ApO1xuICB9XG59XG4iXX0= |
@@ -85,5 +85,3 @@ "use strict"; | ||
ProgramSymbolTable.prototype.get = function get(_name) { | ||
throw (0, _util.unreachable)(); | ||
}; | ||
ProgramSymbolTable.prototype.get = function get(_name) {}; | ||
@@ -391,3 +389,3 @@ ProgramSymbolTable.prototype.getLocalsMap = function getLocalsMap() { | ||
get: function () { | ||
return (0, _util.expect)(this.getCurrentFrame(), "Expected a current frame"); | ||
return this.getCurrentFrame(); | ||
} | ||
@@ -419,2 +417,2 @@ }]); | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLEFBQU8sQUFBZ0IsQUFBSSxBQUFFLEFBQVcsQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUMsQUFFeEUsQUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFDSixBQUFNOzs7OztnQkFBQyxBQUFHLHFCQUNSLEFBQU07ZUFBQyxJQUFJLEFBQWtCLEFBQUUsQUFBQyxBQUNsQyxBQUFDOzs7MEJBWUQsQUFBSyx1QkFBQyxBQUFnQjtvQkFDcEI7O1lBQUksQUFBTyxpQkFBVSxBQUFHLG9CQUFDLEFBQUk7bUJBQUksQUFBSSxNQUFDLEFBQVEsU0FBQyxBQUFJLEFBQUMsQUFBQyxBQUFDO0FBQXhDLEFBQU0sQUFDcEIsQUFBTTtlQUFDLElBQUksQUFBZ0IsaUJBQUMsQUFBSSxNQUFFLEFBQU0sUUFBRSxBQUFPLEFBQUMsQUFBQyxBQUNyRCxBQUFDLEFBQ0Y7Ozs7QUFFRCxBQUFNO0lBQTBCO2tDQUFoQzs7Ozs7K0VBQ1M7O2VBQU8sVUFBYSxBQUFFLEFBQUMsQUFFdEI7ZUFBSSxPQUFHLEFBQUMsQUFBQyxBQUNUO2VBQUssUUFBRyxBQUFJLEFBQVUsQUFBQyxBQUN2QjtlQUFNLFNBQUcsQUFBSSxBQUFVLEFBQUMsQUEwQ2xDO2VBQUM7OztpQ0F4Q0MsQUFBRyxtQkFBQyxBQUFhLE9BQ2YsQUFBTTtlQUFDLEFBQUssQUFBQyxBQUNmLEFBQUM7OztpQ0FFRCxBQUFHLG1CQUFDLEFBQWEsT0FDZjtjQUFNLEFBQVcsQUFBRSxBQUFDLEFBQ3RCLEFBQUM7OztpQ0FFRCxBQUFZLHVDQUNWLEFBQU07ZUFBQyxBQUFFLEFBQUMsQUFDWixBQUFDOzs7aUNBRUQsQUFBVyxxQ0FDVCxBQUFNO2VBQUMsQUFBRSxBQUFDLEFBQ1osQUFBQzs7O2lDQUVELEFBQWEsdUNB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QUFDVjtBQUFDO0FBRUQsQUFBRSxBQUFDO1lBQUMsQUFBSSxTQUFLLEFBQU8sQUFBQyxTQUFDLEFBQUMsQUFDckIsQUFBTTttQkFBQyxBQUFLLEFBQUMsQUFDZixBQUFDLEFBQ0g7QUFBQztBQUVELEFBQU07V0FBQyxDQUFDLEFBQUMsQUFBQyxBQUNaLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQ29yZSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IERpY3QsIE9wdGlvbiwgZGljdCwgdW5yZWFjaGFibGUsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3ltYm9sVGFibGUge1xuICBzdGF0aWMgdG9wKCk6IFByb2dyYW1TeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9ncmFtU3ltYm9sVGFibGUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj47XG4gIGFic3RyYWN0IGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm87XG5cbiAgYWJzdHJhY3QgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgY2hpbGQobG9jYWxzOiBzdHJpbmdbXSk6IEJsb2NrU3ltYm9sVGFibGUge1xuICAgIGxldCBzeW1ib2xzID0gbG9jYWxzLm1hcChuYW1lID0+IHRoaXMuYWxsb2NhdGUobmFtZSkpO1xuICAgIHJldHVybiBuZXcgQmxvY2tTeW1ib2xUYWJsZSh0aGlzLCBsb2NhbHMsIHN5bWJvbHMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc2l6ZSA9IDE7XG4gIHByaXZhdGUgbmFtZWQgPSBkaWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBkaWN0PG51bWJlcj4oKTtcblxuICBoYXMoX25hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldChfbmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IHVucmVhY2hhYmxlKCk7XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXTtcblxuICAgIGlmICghbmFtZWQpIHtcbiAgICAgIG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYEAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWVkO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdO1xuXG4gICAgaWYgKCFibG9jaykge1xuICAgICAgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYCYke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0aGlzLnN5bWJvbHMucHVzaChpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gdGhpcy5zaXplKys7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsb2NrU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTeW1ib2xUYWJsZSwgcHVibGljIHN5bWJvbHM6IHN0cmluZ1tdLCBwdWJsaWMgc2xvdHM6IG51bWJlcltdKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpICE9PSAtMSkgfHwgdGhpcy5wYXJlbnQuaGFzKG5hbWUpO1xuICB9XG5cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IHNsb3QgPSB0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKTtcbiAgICByZXR1cm4gc2xvdCA9PT0gLTEgPyB0aGlzLnBhcmVudC5nZXQobmFtZSkgOiB0aGlzLnNsb3RzW3Nsb3RdO1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgbGV0IGRpY3QgPSB0aGlzLnBhcmVudC5nZXRMb2NhbHNNYXAoKTtcbiAgICB0aGlzLnN5bWJvbHMuZm9yRWFjaChzeW1ib2wgPT4gZGljdFtzeW1ib2xdID0gdGhpcy5nZXQoc3ltYm9sKSk7XG4gICAgcmV0dXJuIGRpY3Q7XG4gIH1cblxuICBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvIHtcbiAgICBsZXQgbG9jYWxzID0gdGhpcy5nZXRMb2NhbHNNYXAoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobG9jYWxzKS5tYXAoc3ltYm9sID0+IGxvY2Fsc1tzeW1ib2xdKTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVOYW1lZChuYW1lKTtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVCbG9jayhuYW1lKTtcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlKGlkZW50aWZpZXIpO1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgaW4gYW4gQVNUIGFuZCBvdXRwdXRzIGEgbGlzdCBvZiBhY3Rpb25zIHRvIGJlIGNvbnN1bWVkXG4gKiBieSBhIGNvbXBpbGVyLiBGb3IgZXhhbXBsZSwgdGhlIHRlbXBsYXRlXG4gKlxuICogICAgIGZvb3t7YmFyfX08ZGl2PmJhejwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDNdXSxcbiAqICAgICAgWydtdXN0YWNoZScsIFttdXN0YWNoZU5vZGUsIDEsIDNdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgMywgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDNdLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGlzIHZpc2l0b3Igd2Fsa3MgdGhlIEFTVCBkZXB0aCBmaXJzdCBhbmQgYmFja3dhcmRzLiBBc1xuICogYSByZXN1bHQgdGhlIGJvdHRvbS1tb3N0IGNoaWxkIHRlbXBsYXRlIHdpbGwgYXBwZWFyIGF0IHRoZVxuICogdG9wIG9mIHRoZSBhY3Rpb25zIGxpc3Qgd2hlcmVhcyB0aGUgcm9vdCB0ZW1wbGF0ZSB3aWxsIGFwcGVhclxuICogYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdC4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAgIDxkaXY+e3sjaWZ9fWZvb3t7ZWxzZX19YmFyPGI+PC9iPnt7L2lmfX08L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAyLCAwXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDIsIDBdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDJdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDJdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMSwgMV1dLFxuICogICAgICBbJ2Jsb2NrJywgW2Jsb2NrTm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBpcyBtYWludGFpbmVkIGJ5IGEgc3RhY2sgb2YgZnJhbWVzLlxuICogV2hlbmV2ZXIgYSBub2RlIHdpdGggY2hpbGRyZW4gaXMgZW50ZXJlZCAoZWl0aGVyIGEgUHJvZ3JhbU5vZGVcbiAqIG9yIGFuIEVsZW1lbnROb2RlKSBhIGZyYW1lIGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFjay4gVGhlIGZyYW1lXG4gKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBvZiB0aGF0XG4gKiBub2RlLiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgIC0gaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hpbGQgbm9kZSBiZWluZyB2aXNpdGVkXG4gKiAgIC0gdGhlIG51bWJlciBvZiBtdXN0YWNoZXMgY29udGFpbmVkIHdpdGhpbiBpdHMgY2hpbGQgbm9kZXNcbiAqICAgLSB0aGUgbGlzdCBvZiBhY3Rpb25zIGdlbmVyYXRlZCBieSBpdHMgY2hpbGQgbm9kZXNcbiAqL1xuXG5jbGFzcyBGcmFtZSB7XG4gIHB1YmxpYyBwYXJlbnROb2RlOiBPcHRpb248T2JqZWN0PiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZHJlbjogT3B0aW9uPEFTVC5Ob2RlW10+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkSW5kZXg6IE9wdGlvbjxudW1iZXI+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkQ291bnQ6IE9wdGlvbjxudW1iZXI+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkVGVtcGxhdGVDb3VudCA9IDA7XG4gIHB1YmxpYyBtdXN0YWNoZUNvdW50ID0gMDtcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIHB1YmxpYyBibGFua0NoaWxkVGV4dE5vZGVzOiBPcHRpb248bnVtYmVyW10+ID0gbnVsbDtcbiAgcHVibGljIHN5bWJvbHM6IE9wdGlvbjxTeW1ib2xUYWJsZT4gPSBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEFjdGlvbiB7XG4gIGV4cG9ydCB0eXBlIFN0YXJ0UHJvZ3JhbSA9IFsnc3RhcnRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIEVuZFByb2dyYW0gPSBbJ2VuZFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBTdGFydEJsb2NrID0gWydzdGFydEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIEVuZEJsb2NrID0gWydlbmRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIEJsb2NrID0gWydibG9jaycsIFtBU1QuQmxvY2tTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE11c3RhY2hlID0gWydtdXN0YWNoZScsIFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgfCBBU1QuUGFydGlhbFN0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgT3BlbkVsZW1lbnQgPSBbJ29wZW5FbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgQ2xvc2VFbGVtZW50ID0gWydjbG9zZUVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBUZXh0ID0gWyd0ZXh0JywgW0FTVC5UZXh0Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQ29tbWVudCA9IFsnY29tbWVudCcsIFtBU1QuQ29tbWVudFN0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcblxuICBleHBvcnQgdHlwZSBBY3Rpb24gPVxuICAgICAgU3RhcnRQcm9ncmFtXG4gICAgfCBFbmRQcm9ncmFtXG4gICAgfCBTdGFydEJsb2NrXG4gICAgfCBFbmRCbG9ja1xuICAgIHwgQmxvY2tcbiAgICB8IE11c3RhY2hlXG4gICAgfCBPcGVuRWxlbWVudFxuICAgIHwgQ2xvc2VFbGVtZW50XG4gICAgfCBUZXh0XG4gICAgfCBDb21tZW50XG4gICAgO1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb24gPSBBY3Rpb24uQWN0aW9uO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZVZpc2l0b3Ige1xuICBwcml2YXRlIGZyYW1lU3RhY2s6IEZyYW1lW10gPSBbXTtcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIHByaXZhdGUgcHJvZ3JhbURlcHRoID0gLTE7XG5cbiAgdmlzaXQobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgdGhpc1tub2RlLnR5cGVdKG5vZGUpO1xuICB9XG5cbiAgLy8gVHJhdmVyc2FsIG1ldGhvZHNcblxuICBQcm9ncmFtKHByb2dyYW06IEFTVC5Qcm9ncmFtKSB7XG4gICAgdGhpcy5wcm9ncmFtRGVwdGgrKztcblxuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gICAgbGV0IHByb2dyYW1GcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBpZiAoIXBhcmVudEZyYW1lKSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBTeW1ib2xUYWJsZS50b3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG4gICAgfVxuXG4gICAgbGV0IHN0YXJ0VHlwZSwgZW5kVHlwZTtcblxuICAgIGlmICh0aGlzLnByb2dyYW1EZXB0aCA9PT0gMCkge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0UHJvZ3JhbSc7XG4gICAgICBlbmRUeXBlID0gJ2VuZFByb2dyYW0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRCbG9jayc7XG4gICAgICBlbmRUeXBlID0gJ2VuZEJsb2NrJztcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUucGFyZW50Tm9kZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkcmVuID0gcHJvZ3JhbS5ib2R5O1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZENvdW50ID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aDtcbiAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW2VuZFR5cGUsIFtwcm9ncmFtLCB0aGlzLnByb2dyYW1EZXB0aF1dIGFzIEFjdGlvbik7XG4gICAgcHJvZ3JhbUZyYW1lLnN5bWJvbHMgPSBwcm9ncmFtWydzeW1ib2xzJ107XG5cbiAgICBmb3IgKGxldCBpID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBwcm9ncmFtRnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KHByb2dyYW0uYm9keVtpXSk7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbc3RhcnRUeXBlLCBbXG4gICAgICBwcm9ncmFtLCBwcm9ncmFtRnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50LFxuICAgICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXG4gICAgXV0gYXMgQWN0aW9uKTtcbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICB0aGlzLnByb2dyYW1EZXB0aC0tO1xuXG4gICAgLy8gUHVzaCB0aGUgY29tcGxldGVkIHRlbXBsYXRlIGludG8gdGhlIGdsb2JhbCBhY3Rpb25zIGxpc3RcbiAgICBpZiAocGFyZW50RnJhbWUpIHsgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50Kys7IH1cbiAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5wcm9ncmFtRnJhbWUuYWN0aW9ucy5yZXZlcnNlKCkpO1xuICB9XG5cbiAgRWxlbWVudE5vZGUoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgbGV0IGVsZW1lbnRGcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBlbGVtZW50RnJhbWUucGFyZW50Tm9kZSA9IGVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRDb3VudCA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ICs9IGVsZW1lbnQubW9kaWZpZXJzLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIGVsZW1lbnRGcmFtZS5zeW1ib2xzID0gZWxlbWVudFsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQoZWxlbWVudC5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYWN0aW9uQXJnczogW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkSW5kZXghLFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRDb3VudCFcbiAgICBdO1xuXG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChbJ2Nsb3NlRWxlbWVudCcsIGFjdGlvbkFyZ3NdKTtcblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5hdHRyaWJ1dGVzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZWxlbWVudEZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmNoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgb3BlbiA9IFsnb3BlbkVsZW1lbnQnLCBbLi4uYWN0aW9uQXJncywgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQsIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKV1dIGFzIEFjdGlvbi5PcGVuRWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKG9wZW4pO1xuXG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBlbGVtZW50J3MgZnJhbWUgc3RhdGUgdG8gdGhlIHBhcmVudCBmcmFtZVxuICAgIGlmIChlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCA+IDApIHsgcGFyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrOyB9XG4gICAgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50ICs9IGVsZW1lbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQ7XG4gICAgcGFyZW50RnJhbWUuYWN0aW9ucy5wdXNoKC4uLmVsZW1lbnRGcmFtZS5hY3Rpb25zKTtcbiAgfVxuXG4gIEF0dHJOb2RlKGF0dHI6IEFTVC5BdHRyTm9kZSkge1xuICAgIGlmIChhdHRyLnZhbHVlLnR5cGUgIT09ICdUZXh0Tm9kZScpIHtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICB9XG4gIH07XG5cbiAgVGV4dE5vZGUodGV4dDogQVNULlRleHROb2RlKSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgaWYgKHRleHQuY2hhcnMgPT09ICcnKSB7XG4gICAgICBmcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzIS5wdXNoKGRvbUluZGV4T2YoZnJhbWUuY2hpbGRyZW4hLCB0ZXh0KSk7XG4gICAgfVxuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ3RleHQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQmxvY2tTdGF0ZW1lbnQobm9kZTogQVNULkJsb2NrU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG5cbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnYmxvY2snLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG5cbiAgICBpZiAobm9kZS5pbnZlcnNlKSB7IHRoaXMudmlzaXQobm9kZS5pbnZlcnNlKTsgfVxuICAgIGlmIChub2RlLnByb2dyYW0pIHsgdGhpcy52aXNpdChub2RlLnByb2dyYW0pOyB9XG4gIH07XG5cbiAgUGFydGlhbFN0YXRlbWVudChub2RlOiBBU1QuUGFydGlhbFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBDb21tZW50U3RhdGVtZW50KHRleHQ6IEFTVC5Db21tZW50U3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnY29tbWVudCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQoKSB7XG4gICAgLy8gSW50ZW50aW9uYWwgZW1wdHk6IEhhbmRsZWJhcnMgY29tbWVudHMgc2hvdWxkIG5vdCBhZmZlY3Qgb3V0cHV0LlxuICB9O1xuXG4gIE11c3RhY2hlU3RhdGVtZW50KG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbXVzdGFjaGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIC8vIEZyYW1lIGhlbHBlcnNcblxuICBwcml2YXRlIGdldCBjdXJyZW50RnJhbWUoKTogRnJhbWUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5nZXRDdXJyZW50RnJhbWUoKSwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgZnJhbWVcIik7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGcmFtZSgpOiBPcHRpb248RnJhbWU+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEZyYW1lKCkge1xuICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBwcml2YXRlIHBvcEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzOiBBU1QuTm9kZVtdLCBkb21Ob2RlOiBBU1QuVGV4dE5vZGUgfCBBU1QuRWxlbWVudE5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLEFBQU8sQUFBZ0IsQUFBSSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBRW5ELEFBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQ0osQUFBTTs7Ozs7Z0JBQUMsQUFBRyxxQkFDUixBQUFNO2VBQUMsSUFBSSxBQUFrQixBQUFFLEFBQUMsQUFDbEMsQUFBQzs7OzBCQVlELEFBQUssdUJBQUMsQUFBZ0I7b0JBQ3BCOztZQUFJLEFBQU8saUJBQVUsQUFBRyxvQkFBQyxBQUFJO21CQUFJLEFBQUksTUFBQyxBQUFRLFNBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQztBQUF4QyxBQUFNLEFBQ3BCLEFBQU07ZUFBQyxJQUFJLEFBQWdCLGlCQUFDLEFBQUksTUFBRSxBQUFNLFFBQUUsQUFBTyxBQUFDLEFBQUMsQUFDckQsQUFBQyxBQUNGOzs7O0FBRUQsQUFBTTtJQUEwQjtrQ0FBaEM7Ozs7OytFQUNTOztlQUFPLFVBQWEsQUFBRSxBQUFDLEFBRXRCO2VBQUksT0FBRyxBQUFDLEFBQUMsQUFDVDtlQUFLLFFBQUcsQUFBSSxBQUFVLEFBQUMsQUFDdkI7ZUFBTSxTQUFHLEFBQUksQUFBVSxBQUFDLEFBeUNsQztlQUFDOzs7aUNBdkNDLEFBQUcsbUJBQUMsQUFBYSxPQUNmLEFBQU07ZUFBQyxBQUFLLEFBQUMsQUFDZixBQUFDOzs7aUNBRUQsQUFBRyxtQkFBQyxBQUFhLE9BQ2pCLEFBQUM7O2lDQUVELEFBQVksdUNBQ1YsQUFBTTtlQUFDLEFBQUUsQUFBQyxBQUNaLEFBQUM7OztpQ0FFRCxBQUFXLHFDQUNULEFBQU07ZUFBQyxBQUFFLEFBQUMsQUFDWixBQUFDOzs7aUNBRUQsQUFBYSx1Q0FBQyxBQUFZLE1BQ3hCO1lBQUksQUFBSyxRQUFHLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBSSxBQUFDLEFBQUMsQUFFN0IsQUFBRSxBQUFDO1lBQUMsQ0FBQyxBQUFLLEFBQUMsT0FBQyxBQUFDLEFBQ1gsQUFBSztvQkFBRyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUksQUFBQyxRQUFHLEFBQUksS0FBQyxBQUFRLEFBQUMsZUFBSSxBQUFJLEFBQUUsQUFBQyxBQUFDLEFBQ3ZELEFBQUM7QUFFRCxBQUFNO2VBQUMsQUFBSyxBQUFDLEFBQ2YsQUFBQzs7O2lDQUVELEFBQWEsdUNBQUMsQUFBWSxNQUN4QjtZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUksQUFBQyxBQUFDLEFBRTlCLEFBQUUsQUFBQztZQUFDLENBQUMsQUFBSyxBQUFDLE9BQUMsQUFBQyxBQUNYLEFBQUs7b0JBQUcsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFJLEFBQUMsUUFBRyxBQUFJLEtBQUMsQUFBUSxBQUFDLGVBQUksQUFBSSxBQUFFLEFBQUMsQUFBQyxBQUN4RCxBQUFDO0FBRUQsQUFBTTtlQUFDLEFBQUssQUFBQyxBQUNmLEFBQUM7OztpQ0FFRCxBQUFRLDZCQUFDLEFBQWtCLFlBQ3pCLEFBQUk7YUFBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLEFBQVUsQUFBQyxBQUFDLEFBQzlCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFFLEFBQUMsQUFDckIsQUFBQyxBQUNGOzs7O0VBOUN1QyxBQUFXLEFBZ0RuRCxBQUFNO0lBQXdCO2dDQUM1Qjs7OEJBQW9CLEFBQW1CLFFBQVMsQUFBaUIsU0FBUyxBQUFlOzs7c0RBQ3ZGLEFBQUssQUFBRSxBQUFDLG1CQURVOztlQUFNLFNBQU4sQUFBTSxBQUFhLEFBQVM7ZUFBTyxVQUFQLEFBQU8sQUFBVSxBQUFTO2VBQUssUUFBTCxBQUFLLEFBQVUsQUFFekY7ZUFBQzs7OytCQUVELEFBQUcsbUJBQUMsQUFBWSxNQUNkLEFBQU07ZUFBRSxBQUFJLEtBQUMsQUFBTyxRQUFDLEFBQU8sUUFBQyxBQUFJLEFBQUMsVUFBSyxDQUFDLEFBQUMsQUFBQyxBQUFuQyxLQUF1QyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUcsSUFBQyxBQUFJLEFBQUMsQUFBQyxBQUN0RSxBQUFDOzs7K0JBRUQsQUFBRyxtQkFBQyxBQUFZLE1BQ2Q7WUFBSSxBQUFJLE9BQUcsQUFBSSxLQUFDLEFBQU8sUUFBQyxBQUFPLFFBQUMsQUFBSSxBQUFDLEFBQUMsQUFDdEMsQUFBTTtlQUFDLEFBQUksU0FBSyxDQUFDLEFBQUMsSUFBRyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUcsSUFBQyxBQUFJLEFBQUMsUUFBRyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUksQUFBQyxBQUFDLEFBQ2hFLEFBQUM7OzsrQkFFRCxBQUFZO3FCQUNWOztZQUFJLEFBQUksT0FBRyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQVksQUFBRSxBQUFDLEFBQ3RDLEFBQUk7YUFBQyxBQUFPLFFBQUMsQUFBTywwQkFBQyxBQUFNO21CQUFJLEFBQUksS0FBQyxBQUFNLEFBQUMsVUFBRyxBQUFJLE9BQUMsQUFBRyxJQUFDLEFBQU0sQUFBQyxBQUFDLEFBQUM7QUFDaEUsQUFBTTtlQUFDLEFBQUksQUFBQyxBQUNkLEFBQUM7OzsrQkFFRCxBQUFXLHFDQUNUO1lBQUksQUFBTSxTQUFHLEFBQUksS0FBQyxBQUFZLEFBQUUsQUFBQyxBQUNqQyxBQUFNO3NCQUFRLEFBQUksS0FBQyxBQUFNLEFBQUMsUUFBQyxBQUFHLHNCQUFDLEFBQU07bUJBQUksQUFBTSxPQUFDLEFBQU0sQUFBQyxBQUFDLEFBQUMsQUFDM0Q7QUFEUyxBQUFNLEFBQ2Q7OzsrQkFFRCxBQUFhLHVDQUFDLEFBQVksTUFDeEIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBYSxjQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3pDLEFBQUM7OzsrQkFFRCxBQUFhLHVDQUFDLEFBQVksTUFDeEIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBYSxjQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3pDLEFBQUM7OzsrQkFFRCxBQUFRLDZCQUFDLEFBQWtCLFlBQ3pCLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQVEsU0FBQyxBQUFVLEFBQUMsQUFBQyxBQUMxQyxBQUFDLEFBQ0Y7Ozs7RUFwQ3FDLEFBQVc7QUFzQ2pELEFBZ0RHLEFBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBQUE7MEJBQ1M7O1NBQVUsYUFBbUIsQUFBSSxBQUFDLEFBQ2xDO1NBQVEsV0FBdUIsQUFBSSxBQUFDLEFBQ3BDO1NBQVUsYUFBbUIsQUFBSSxBQUFDLEFBQ2xDO1NBQVUsYUFBbUIsQUFBSSxBQUFDLEFBQ2xDO1NBQWtCLHFCQUFHLEFBQUMsQUFBQyxBQUN2QjtTQUFhLGdCQUFHLEFBQUMsQUFBQyxBQUNsQjtTQUFPLFVBQWEsQUFBRSxBQUFDLEFBQ3ZCO1NBQW1CLHNCQUFxQixBQUFJLEFBQUMsQUFDN0M7U0FBTyxVQUF3QixBQUFJLEFBQUMsQUFDN0MsQUFBQyxBQThCRCxBQUFNLEFBQUMsQUFBTzs7O2tDQUFkOzs4QkFDVTs7YUFBVSxhQUFZLEFBQUUsQUFBQyxBQUMxQjthQUFPLFVBQWEsQUFBRSxBQUFDLEFBQ3RCO2FBQVksZUFBRyxDQUFDLEFBQUMsQUFBQyxBQThKNUIsQUFBQzs7OzhCQTVKQyxBQUFLLHVCQUFDLEFBQWtCLE1BQ3RCLEFBQUk7YUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLE1BQUMsQUFBSSxBQUFDLEFBQUMsQUFDeEIsQUFBQztBQUVELEFBQW9COzs7OzhCQUVwQixBQUFPLDJCQUFDLEFBQW9CO1lBQzFCLEFBQUk7O2FBQUMsQUFBWSxBQUFFLEFBQUMsQUFFcEI7WUFBSSxBQUFXLGNBQUcsQUFBSSxLQUFDLEFBQWUsQUFBRSxBQUFDLEFBQ3pDO1lBQUksQUFBWSxlQUFHLEFBQUksS0FBQyxBQUFTLEFBQUUsQUFBQyxBQUVwQyxBQUFFLEFBQUM7WUFBQyxDQUFDLEFBQVcsQUFBQyxhQUFDLEFBQUMsQUFDakIsQUFBTztvQkFBQyxBQUFTLEFBQUMsYUFBRyxBQUFXLFlBQUMsQUFBRyxBQUFFLEFBQUMsQUFDekMsQUFBQyxBQUFDLEFBQUk7ZUFBQyxBQUFDLEFBQ04sQUFBTztvQkFBQyxBQUFTLEFBQUMsYUFBRyxBQUFXLFlBQUMsQUFBUSxRQUFDLEFBQUssTUFBQyxBQUFPLFFBQUMsQUFBVyxBQUFDLEFBQUMsQUFDdkUsQUFBQztBQUVEO1lBQUksQUFBUztZQUFFLEFBQU8sQUFBQyxlQUV2QixBQUFFLEFBQUM7WUFBQyxBQUFJLEtBQUMsQUFBWSxpQkFBSyxBQUFDLEFBQUMsR0FBQyxBQUFDLEFBQzVCLEFBQVM7d0JBQUcsQUFBYyxBQUFDLEFBQzNCLEFBQU87c0JBQUcsQUFBWSxBQUFDLEFBQ3pCLEFBQUMsQUFBQyxBQUFJO2VBQUMsQUFBQyxBQUNOLEFBQVM7d0JBQUcsQUFBWSxBQUFDLEFBQ3pCLEFBQU87c0JBQUcsQUFBVSxBQUFDLEFBQ3ZCLEFBQUM7QUFFRCxBQUFZO3FCQUFDLEFBQVUsYUFBRyxBQUFPLEFBQUMsQUFDbEMsQUFBWTtxQkFBQyxBQUFRLFdBQUcsQUFBTyxRQUFDLEFBQUksQUFBQyxBQUNyQyxBQUFZO3FCQUFDLEFBQVUsYUFBRyxBQUFPLFFBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUM5QyxBQUFZO3FCQUFDLEFBQW1CLHNCQUFHLEFBQUUsQUFBQyxBQUN0QyxBQUFZO3FCQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQ0FBQyxBQUFPLFNBQUUsQ0FBQyxBQUFPLFNBQUUsQUFBSSxLQUFDLEFBQVksQUFBQyxBQUFXLEFBQUMsQUFBQyxBQUM3RSxBQUFZO3FCQUFDLEFBQU8sVUFBRyxBQUFPLFFBQUMsQUFBUyxBQUFDLEFBQUMsQUFFMUMsQUFBRyxBQUFDO2FBQUMsSUFBSSxBQUFDLElBQUcsQUFBTyxRQUFDLEFBQUksS0FBQyxBQUFNLFNBQUcsQUFBQyxHQUFFLEFBQUMsS0FBSSxBQUFDLEdBQUUsQUFBQyxBQUFFLEtBQUUsQUFBQyxBQUNsRCxBQUFZO3lCQUFDLEFBQVUsYUFBRyxBQUFDLEFBQUMsQUFDNUIsQUFBSTtpQkFBQyxBQUFLLE1BQUMsQUFBTyxRQUFDLEFBQUksS0FBQyxBQUFDLEFBQUMsQUFBQyxBQUFDLEFBQzlCLEFBQUM7QUFFRCxBQUFZO3FCQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQ0FBQyxBQUFTLFdBQUUsQ0FDcEMsQUFBTyxTQUFFLEFBQVksYUFBQyxBQUFrQixvQkFDeEMsQUFBWSxhQUFDLEFBQW1CLG9CQUFDLEFBQU8sQUFBRSxBQUMzQyxBQUFXLEFBQUMsQUFBQyxBQUNkLEFBQUk7YUFBQyxBQUFRLEFBQUUsQUFBQyxBQUVoQixBQUFJO2FBQUMsQUFBWSxBQUFFLEFBQUMsQUFFcEIsQUFBMkQ7QUFDM0QsQUFBRSxBQUFDO1lBQUMsQUFBVyxBQUFDLGFBQUMsQUFBQyxBQUFDLEFBQVc7d0JBQUMsQUFBa0IsQUFBRSxBQUFDLEFBQUMsQUFBQztBQUN0RCxBQUFJO3lCQUFDLEFBQU8sU0FBQyxBQUFJLEFBQUMscUJBQUcsQUFBWSxhQUFDLEFBQU8sUUFBQyxBQUFPLEFBQUUsQUFBQyxBQUFDLEFBQ3ZELEFBQUM7Ozs4QkFFRCxBQUFXLG1DQUFDLEFBQXdCO1lBQ2xDOztZQUFJLEFBQVcsY0FBRyxBQUFJLEtBQUMsQUFBWSxBQUFDLEFBQ3BDO1lBQUksQUFBWSxlQUFHLEFBQUksS0FBQyxBQUFTLEFBQUUsQUFBQyxBQUVwQyxBQUFZO3FCQUFDLEFBQVUsYUFBRyxBQUFPLEFBQUMsQUFDbEMsQUFBWTtxQkFBQyxBQUFRLFdBQUcsQUFBTyxRQUFDLEFBQVEsQUFBQyxBQUN6QyxBQUFZO3FCQUFDLEFBQVUsYUFBRyxBQUFPLFFBQUMsQUFBUSxTQUFDLEFBQU0sQUFBQyxBQUNsRCxBQUFZO3FCQUFDLEFBQWEsaUJBQUksQUFBTyxRQUFDLEFBQVMsVUFBQyxBQUFNLEFBQUMsQUFDdkQsQUFBWTtxQkFBQyxBQUFtQixzQkFBRyxBQUFFLEFBQUMsQUFDdEMsQUFBWTtxQkFBQyxBQUFPLFVBQUcsQUFBTyxRQUFDLEFBQVMsQUFBQyxhQUFHLEFBQVcsWUFBQyxBQUFRLFFBQUMsQUFBSyxNQUFDLEFBQU8sUUFBQyxBQUFXLEFBQUMsQUFBQyxBQUU1RjtZQUFJLEFBQVUsYUFBc0MsQ0FDbEQsQUFBTyxTQUNQLEFBQVcsWUFBQyxBQUFXLFlBQ3ZCLEFBQVcsWUFBQyxBQUFXLEFBQ3hCLEFBQUMsQUFFRixBQUFZO3FCQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQ0FBQyxBQUFjLGdCQUFFLEFBQVUsQUFBQyxBQUFDLEFBQUMsQUFFeEQsQUFBRyxBQUFDO2FBQUMsSUFBSSxBQUFDLElBQUcsQUFBTyxRQUFDLEFBQVUsV0FBQyxBQUFNLFNBQUcsQUFBQyxHQUFFLEFBQUMsS0FBSSxBQUFDLEdBQUUsQUFBQyxBQUFFLEtBQUUsQUFBQyxBQUN4RCxBQUFJO2lCQUFDLEFBQUssTUFBQyxBQUFPLFFBQUMsQUFBVSxXQUFDLEFBQUMsQUFBQyxBQUFDLEFBQUMsQUFDcEMsQUFBQztBQUVELEFBQUcsQUFBQzthQUFDLElBQUksQUFBQyxLQUFHLEFBQU8sUUFBQyxBQUFRLFNBQUMsQUFBTSxTQUFHLEFBQUMsR0FBRSxBQUFDLE1BQUksQUFBQyxHQUFFLEFBQUMsQUFBRSxNQUFFLEFBQUMsQUFDdEQsQUFBWTt5QkFBQyxBQUFVLGFBQUcsQUFBQyxBQUFDLEFBQzVCLEFBQUk7aUJBQUMsQUFBSyxNQUFDLEFBQU8sUUFBQyxBQUFRLFNBQUMsQUFBQyxBQUFDLEFBQUMsQUFBQyxBQUNsQyxBQUFDO0FBRUQ7WUFBSSxBQUFJLE9BQUcsQ0FBQyxBQUFhLEFBQUUsQUFBQyx5QkFBRyxBQUFVLGFBQUUsQUFBWSxhQUFDLEFBQWEsZUFBRSxBQUFZLGFBQUMsQUFBbUIsb0JBQUMsQUFBTyxBQUFFLEFBQUMsQUFBdUIsQUFBQyxBQUMxSSxBQUFZO3FCQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUMsQUFFaEMsQUFBSTthQUFDLEFBQVEsQUFBRSxBQUFDLEFBRWhCLEFBQTBEO0FBQzFELEFBQUUsQUFBQztZQUFDLEFBQVksYUFBQyxBQUFhLGdCQUFHLEFBQUMsQUFBQyxHQUFDLEFBQUMsQUFBQyxBQUFXO3dCQUFDLEFBQWEsQUFBRSxBQUFDLEFBQUMsQUFBQztBQUNwRSxBQUFXO29CQUFDLEFBQWtCLHNCQUFJLEFBQVksYUFBQyxBQUFrQixBQUFDLEFBQ2xFLEFBQVc7NENBQUMsQUFBTyxTQUFDLEFBQUksQUFBQyxpQ0FBRyxBQUFZLGFBQUMsQUFBTyxBQUFDLEFBQUMsQUFDcEQsQUFBQzs7OzhCQUVELEFBQVEsNkJBQUMsQUFBa0IsTUFDekIsQUFBRSxBQUFDO1lBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFJLFNBQUssQUFBVSxBQUFDLFlBQUMsQUFBQyxBQUNuQyxBQUFJO2lCQUFDLEFBQVksYUFBQyxBQUFhLEFBQUUsQUFBQyxBQUNwQyxBQUFDLEFBQ0g7QUFBQyxBQUFDOzs7OEJBRUYsQUFBUSw2QkFBQyxBQUFrQixNQUN6QjtZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBWSxBQUFDLEFBQzlCLEFBQUUsQUFBQztZQUFDLEFBQUksS0FBQyxBQUFLLFVBQUssQUFBRSxBQUFDLElBQUMsQUFBQyxBQUN0QixBQUFLO2tCQUFDLEFBQW9CLG9CQUFDLEFBQUksS0FBQyxBQUFVLFdBQUMsQUFBSyxNQUFDLEFBQVMsVUFBRSxBQUFJLEFBQUMsQUFBQyxBQUFDLEFBQ3JFLEFBQUM7QUFDRCxBQUFLO2NBQUMsQUFBTyxRQUFDLEFBQUksS0FBQyxDQUFDLEFBQU0sUUFBRSxDQUFDLEFBQUksTUFBRSxBQUFLLE1BQUMsQUFBVSxZQUFFLEFBQUssTUFBQyxBQUFVLEFBQUMsQUFBVyxBQUFDLEFBQUMsQUFDckYsQUFBQyxBQUFDOzs7OEJBRUYsQUFBYyx5Q0FBQyxBQUF3QixNQUNyQztZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBWSxBQUFDLEFBRTlCLEFBQUs7Y0FBQyxBQUFhLEFBQUUsQUFBQyxBQUN0QixBQUFLO2NBQUMsQUFBTyxRQUFDLEFBQUksS0FBQyxDQUFDLEFBQU8sU0FBRSxDQUFDLEFBQUksTUFBRSxBQUFLLE1BQUMsQUFBVSxZQUFFLEFBQUssTUFBQyxBQUFVLEFBQUMsQUFBVyxBQUFDLEFBQUMsQUFFcEYsQUFBRSxBQUFDO1lBQUMsQUFBSSxLQUFDLEFBQU8sQUFBQyxTQUFDLEFBQUMsQUFBQyxBQUFJO2lCQUFDLEFBQUssTUFBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLEFBQUMsQUFBQyxBQUFDO0FBQy9DLEFBQUUsQUFBQztZQUFDLEFBQUksS0FBQyxBQUFPLEFBQUMsU0FBQyxBQUFDLEFBQUMsQUFBSTtpQkFBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQU8sQUFBQyxBQUFDLEFBQUMsQUFBQyxBQUNqRDtBQUFDLEFBQUM7Ozs4QkFFRixBQUFnQiw2Q0FBQyxBQUEwQixNQUN6QztZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBWSxBQUFDLEFBQzlCLEFBQUs7Y0FBQyxBQUFhLEFBQUUsQUFBQyxBQUN0QixBQUFLO2NBQUMsQUFBTyxRQUFDLEFBQUksS0FBQyxDQUFDLEFBQVUsWUFBRSxDQUFDLEFBQUksTUFBRSxBQUFLLE1BQUMsQUFBVSxZQUFFLEFBQUssTUFBQyxBQUFVLEFBQUMsQUFBVyxBQUFDLEFBQUMsQUFDekYsQUFBQyxBQUFDOzs7OEJBRUYsQUFBZ0IsNkNBQUMsQUFBMEIsTUFDekM7WUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQVksQUFBQyxBQUM5QixBQUFLO2NBQUMsQUFBTyxRQUFDLEFBQUksS0FBQyxDQUFDLEFBQVMsV0FBRSxDQUFDLEFBQUksTUFBRSxBQUFLLE1BQUMsQUFBVSxZQUFFLEFBQUssTUFBQyxBQUFVLEFBQUMsQUFBVyxBQUFDLEFBQUMsQUFDeEYsQUFBQyxBQUFDOzs7OEJBRUYsQUFBd0IsK0RBQ3RCLEFBQW1FLEFBQ3JFO0FBQUMsQUFBQzs7OzhCQUVGLEFBQWlCLCtDQUFDLEFBQStCLFVBQy9DO1lBQUksQUFBSyxRQUFHLEFBQUksS0FBQyxBQUFZLEFBQUMsQUFDOUIsQUFBSztjQUFDLEFBQWEsQUFBRSxBQUFDLEFBQ3RCLEFBQUs7Y0FBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLENBQUMsQUFBVSxZQUFFLENBQUMsQUFBUSxVQUFFLEFBQUssTUFBQyxBQUFVLFlBQUUsQUFBSyxNQUFDLEFBQVUsQUFBQyxBQUFXLEFBQUMsQUFBQyxBQUM3RixBQUFDLEFBQUM7Ozs4QkFRTSxBQUFlLDZDQUNyQixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFJLEtBQUMsQUFBVSxXQUFDLEFBQU0sU0FBRyxBQUFDLEFBQUMsQUFBQyxBQUNyRCxBQUFDOzs7OEJBRU8sQUFBUyxpQ0FDZjtZQUFJLEFBQUssUUFBRyxJQUFJLEFBQUssQUFBRSxBQUFDLEFBQ3hCLEFBQUk7YUFBQyxBQUFVLFdBQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxBQUFDLEFBQzVCLEFBQU07ZUFBQyxBQUFLLEFBQUMsQUFDZixBQUFDOzs7OEJBRU8sQUFBUSwrQkFDZCxBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFHLEFBQUUsQUFBQyxBQUMvQixBQUFDLEFBQ0Y7Ozs7YUFuQkMsQUFBZ0IsQUFFaEIsQUFBWSxBQUFZOzs7eUJBQ3RCLEFBQU07bUJBQUMsQUFBSSxLQUFDLEFBQWUsQUFBRSxBQUFDLEFBQ2hDLEFBQUM7Ozs7OztBQWlCSCxBQUFnRTtBQUNoRSxBQUFtRDs7Ozs7QUFDbkQsb0JBQW9CLEFBQWlCLE9BQUUsQUFBdUMsU0FDNUU7UUFBSSxBQUFLLFFBQUcsQ0FBQyxBQUFDLEFBQUMsQUFFZixBQUFHLEFBQUM7U0FBQyxJQUFJLEFBQUMsSUFBRyxBQUFDLEdBQUUsQUFBQyxJQUFHLEFBQUssTUFBQyxBQUFNLFFBQUUsQUFBQyxBQUFFLEtBQUUsQUFBQyxBQUN0QztZQUFJLEFBQUksT0FBRyxBQUFLLE1BQUMsQUFBQyxBQUFDLEFBQUMsQUFFcEIsQUFBRSxBQUFDO1lBQUMsQUFBSSxLQUFDLEFBQUksU0FBSyxBQUFVLGNBQUksQUFBSSxLQUFDLEFBQUksU0FBSyxBQUFhLEFBQUMsZUFBQyxBQUFDLEFBQzVELEFBQVEsQUFBQyxBQUNYO0FBQUMsQUFBQyxBQUFJO2VBQUMsQUFBQyxBQUNOLEFBQUssQUFBRSxBQUFDLEFBQ1Y7QUFBQztBQUVELEFBQUUsQUFBQztZQUFDLEFBQUksU0FBSyxBQUFPLEFBQUMsU0FBQyxBQUFDLEFBQ3JCLEFBQU07bUJBQUMsQUFBSyxBQUFDLEFBQ2YsQUFBQyxBQUNIO0FBQUM7QUFFRCxBQUFNO1dBQUMsQ0FBQyxBQUFDLEFBQUMsQUFDWixBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVNUIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcbmltcG9ydCB7IENvcmUgfSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBEaWN0LCBPcHRpb24sIGRpY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN5bWJvbFRhYmxlIHtcbiAgc3RhdGljIHRvcCgpOiBQcm9ncmFtU3ltYm9sVGFibGUge1xuICAgIHJldHVybiBuZXcgUHJvZ3JhbVN5bWJvbFRhYmxlKCk7XG4gIH1cblxuICBhYnN0cmFjdCBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgYWJzdHJhY3QgZ2V0KG5hbWU6IHN0cmluZyk6IG51bWJlcjtcblxuICBhYnN0cmFjdCBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+O1xuICBhYnN0cmFjdCBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvO1xuXG4gIGFic3RyYWN0IGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYWJzdHJhY3QgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGNoaWxkKGxvY2Fsczogc3RyaW5nW10pOiBCbG9ja1N5bWJvbFRhYmxlIHtcbiAgICBsZXQgc3ltYm9scyA9IGxvY2Fscy5tYXAobmFtZSA9PiB0aGlzLmFsbG9jYXRlKG5hbWUpKTtcbiAgICByZXR1cm4gbmV3IEJsb2NrU3ltYm9sVGFibGUodGhpcywgbG9jYWxzLCBzeW1ib2xzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbVN5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10gPSBbXTtcblxuICBwcml2YXRlIHNpemUgPSAxO1xuICBwcml2YXRlIG5hbWVkID0gZGljdDxudW1iZXI+KCk7XG4gIHByaXZhdGUgYmxvY2tzID0gZGljdDxudW1iZXI+KCk7XG5cbiAgaGFzKF9uYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQoX25hbWU6IHN0cmluZyk6IG5ldmVyIHtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdO1xuXG4gICAgaWYgKCFuYW1lZCkge1xuICAgICAgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgQCR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZWQ7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV07XG5cbiAgICBpZiAoIWJsb2NrKSB7XG4gICAgICBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgJiR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2s7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuc3ltYm9scy5wdXNoKGlkZW50aWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnNpemUrKztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFN5bWJvbFRhYmxlLCBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10sIHB1YmxpYyBzbG90czogbnVtYmVyW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSkgIT09IC0xKSB8fCB0aGlzLnBhcmVudC5oYXMobmFtZSk7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgc2xvdCA9IHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpO1xuICAgIHJldHVybiBzbG90ID09PSAtMSA/IHRoaXMucGFyZW50LmdldChuYW1lKSA6IHRoaXMuc2xvdHNbc2xvdF07XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICBsZXQgZGljdCA9IHRoaXMucGFyZW50LmdldExvY2Fsc01hcCgpO1xuICAgIHRoaXMuc3ltYm9scy5mb3JFYWNoKHN5bWJvbCA9PiBkaWN0W3N5bWJvbF0gPSB0aGlzLmdldChzeW1ib2wpKTtcbiAgICByZXR1cm4gZGljdDtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIGxldCBsb2NhbHMgPSB0aGlzLmdldExvY2Fsc01hcCgpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhsb2NhbHMpLm1hcChzeW1ib2wgPT4gbG9jYWxzW3N5bWJvbF0pO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZU5hbWVkKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZUJsb2NrKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGUoaWRlbnRpZmllcik7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBpbiBhbiBBU1QgYW5kIG91dHB1dHMgYSBsaXN0IG9mIGFjdGlvbnMgdG8gYmUgY29uc3VtZWRcbiAqIGJ5IGEgY29tcGlsZXIuIEZvciBleGFtcGxlLCB0aGUgdGVtcGxhdGVcbiAqXG4gKiAgICAgZm9ve3tiYXJ9fTxkaXY+YmF6PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgM11dLFxuICogICAgICBbJ211c3RhY2hlJywgW211c3RhY2hlTm9kZSwgMSwgM11dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgM10sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoaXMgdmlzaXRvciB3YWxrcyB0aGUgQVNUIGRlcHRoIGZpcnN0IGFuZCBiYWNrd2FyZHMuIEFzXG4gKiBhIHJlc3VsdCB0aGUgYm90dG9tLW1vc3QgY2hpbGQgdGVtcGxhdGUgd2lsbCBhcHBlYXIgYXQgdGhlXG4gKiB0b3Agb2YgdGhlIGFjdGlvbnMgbGlzdCB3aGVyZWFzIHRoZSByb290IHRlbXBsYXRlIHdpbGwgYXBwZWFyXG4gKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgICAgPGRpdj57eyNpZn19Zm9ve3tlbHNlfX1iYXI8Yj48L2I+e3svaWZ9fTwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDIsIDBdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMiwgMF1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMl1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMl1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxLCAxXV0sXG4gKiAgICAgIFsnYmxvY2snLCBbYmxvY2tOb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIGlzIG1haW50YWluZWQgYnkgYSBzdGFjayBvZiBmcmFtZXMuXG4gKiBXaGVuZXZlciBhIG5vZGUgd2l0aCBjaGlsZHJlbiBpcyBlbnRlcmVkIChlaXRoZXIgYSBQcm9ncmFtTm9kZVxuICogb3IgYW4gRWxlbWVudE5vZGUpIGEgZnJhbWUgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIG9mIHRoYXRcbiAqIG5vZGUuIEZvciBleGFtcGxlLFxuICpcbiAqICAgLSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGlsZCBub2RlIGJlaW5nIHZpc2l0ZWRcbiAqICAgLSB0aGUgbnVtYmVyIG9mIG11c3RhY2hlcyBjb250YWluZWQgd2l0aGluIGl0cyBjaGlsZCBub2Rlc1xuICogICAtIHRoZSBsaXN0IG9mIGFjdGlvbnMgZ2VuZXJhdGVkIGJ5IGl0cyBjaGlsZCBub2Rlc1xuICovXG5cbmNsYXNzIEZyYW1lIHtcbiAgcHVibGljIHBhcmVudE5vZGU6IE9wdGlvbjxPYmplY3Q+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkcmVuOiBPcHRpb248QVNULk5vZGVbXT4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRJbmRleDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRDb3VudDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRUZW1wbGF0ZUNvdW50ID0gMDtcbiAgcHVibGljIG11c3RhY2hlQ291bnQgPSAwO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHVibGljIGJsYW5rQ2hpbGRUZXh0Tm9kZXM6IE9wdGlvbjxudW1iZXJbXT4gPSBudWxsO1xuICBwdWJsaWMgc3ltYm9sczogT3B0aW9uPFN5bWJvbFRhYmxlPiA9IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWN0aW9uIHtcbiAgZXhwb3J0IHR5cGUgU3RhcnRQcm9ncmFtID0gWydzdGFydFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kUHJvZ3JhbSA9IFsnZW5kUHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFN0YXJ0QmxvY2sgPSBbJ3N0YXJ0QmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kQmxvY2sgPSBbJ2VuZEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQmxvY2sgPSBbJ2Jsb2NrJywgW0FTVC5CbG9ja1N0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgTXVzdGFjaGUgPSBbJ211c3RhY2hlJywgW0FTVC5NdXN0YWNoZVN0YXRlbWVudCB8IEFTVC5QYXJ0aWFsU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBPcGVuRWxlbWVudCA9IFsnb3BlbkVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBDbG9zZUVsZW1lbnQgPSBbJ2Nsb3NlRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFRleHQgPSBbJ3RleHQnLCBbQVNULlRleHROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBDb21tZW50ID0gWydjb21tZW50JywgW0FTVC5Db21tZW50U3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbiA9XG4gICAgICBTdGFydFByb2dyYW1cbiAgICB8IEVuZFByb2dyYW1cbiAgICB8IFN0YXJ0QmxvY2tcbiAgICB8IEVuZEJsb2NrXG4gICAgfCBCbG9ja1xuICAgIHwgTXVzdGFjaGVcbiAgICB8IE9wZW5FbGVtZW50XG4gICAgfCBDbG9zZUVsZW1lbnRcbiAgICB8IFRleHRcbiAgICB8IENvbW1lbnRcbiAgICA7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IEFjdGlvbi5BY3Rpb247XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlVmlzaXRvciB7XG4gIHByaXZhdGUgZnJhbWVTdGFjazogRnJhbWVbXSA9IFtdO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBwcm9ncmFtRGVwdGggPSAtMTtcblxuICB2aXNpdChub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gIH1cblxuICAvLyBUcmF2ZXJzYWwgbWV0aG9kc1xuXG4gIFByb2dyYW0ocHJvZ3JhbTogQVNULlByb2dyYW0pIHtcbiAgICB0aGlzLnByb2dyYW1EZXB0aCsrO1xuXG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgICBsZXQgcHJvZ3JhbUZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGlmICghcGFyZW50RnJhbWUpIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IFN5bWJvbFRhYmxlLnRvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhcnRUeXBlLCBlbmRUeXBlO1xuXG4gICAgaWYgKHRoaXMucHJvZ3JhbURlcHRoID09PSAwKSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRQcm9ncmFtJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kUHJvZ3JhbSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydEJsb2NrJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kQmxvY2snO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5wYXJlbnROb2RlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRyZW4gPSBwcm9ncmFtLmJvZHk7XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkQ291bnQgPSBwcm9ncmFtLmJvZHkubGVuZ3RoO1xuICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbZW5kVHlwZSwgW3Byb2dyYW0sIHRoaXMucHJvZ3JhbURlcHRoXV0gYXMgQWN0aW9uKTtcbiAgICBwcm9ncmFtRnJhbWUuc3ltYm9scyA9IHByb2dyYW1bJ3N5bWJvbHMnXTtcblxuICAgIGZvciAobGV0IGkgPSBwcm9ncmFtLmJvZHkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHByb2dyYW1GcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQocHJvZ3JhbS5ib2R5W2ldKTtcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtzdGFydFR5cGUsIFtcbiAgICAgIHByb2dyYW0sIHByb2dyYW1GcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQsXG4gICAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKClcbiAgICBdXSBhcyBBY3Rpb24pO1xuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIHRoaXMucHJvZ3JhbURlcHRoLS07XG5cbiAgICAvLyBQdXNoIHRoZSBjb21wbGV0ZWQgdGVtcGxhdGUgaW50byB0aGUgZ2xvYmFsIGFjdGlvbnMgbGlzdFxuICAgIGlmIChwYXJlbnRGcmFtZSkgeyBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQrKzsgfVxuICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLnByb2dyYW1GcmFtZS5hY3Rpb25zLnJldmVyc2UoKSk7XG4gIH1cblxuICBFbGVtZW50Tm9kZShlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBsZXQgZWxlbWVudEZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGVsZW1lbnRGcmFtZS5wYXJlbnROb2RlID0gZWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuO1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZENvdW50ID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgKz0gZWxlbWVudC5tb2RpZmllcnMubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgZWxlbWVudEZyYW1lLnN5bWJvbHMgPSBlbGVtZW50WydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChlbGVtZW50LmJsb2NrUGFyYW1zKTtcblxuICAgIGxldCBhY3Rpb25BcmdzOiBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICBlbGVtZW50LFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRJbmRleCEsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZENvdW50IVxuICAgIF07XG5cbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKFsnY2xvc2VFbGVtZW50JywgYWN0aW9uQXJnc10pO1xuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmF0dHJpYnV0ZXNbaV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBlbGVtZW50RnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuY2hpbGRyZW5baV0pO1xuICAgIH1cblxuICAgIGxldCBvcGVuID0gWydvcGVuRWxlbWVudCcsIFsuLi5hY3Rpb25BcmdzLCBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCwgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXV0gYXMgQWN0aW9uLk9wZW5FbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2gob3Blbik7XG5cbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICAvLyBQcm9wYWdhdGUgdGhlIGVsZW1lbnQncyBmcmFtZSBzdGF0ZSB0byB0aGUgcGFyZW50IGZyYW1lXG4gICAgaWYgKGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ID4gMCkgeyBwYXJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7IH1cbiAgICBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQgKz0gZWxlbWVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudDtcbiAgICBwYXJlbnRGcmFtZS5hY3Rpb25zLnB1c2goLi4uZWxlbWVudEZyYW1lLmFjdGlvbnMpO1xuICB9XG5cbiAgQXR0ck5vZGUoYXR0cjogQVNULkF0dHJOb2RlKSB7XG4gICAgaWYgKGF0dHIudmFsdWUudHlwZSAhPT0gJ1RleHROb2RlJykge1xuICAgICAgdGhpcy5jdXJyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIH1cbiAgfTtcblxuICBUZXh0Tm9kZSh0ZXh0OiBBU1QuVGV4dE5vZGUpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBpZiAodGV4dC5jaGFycyA9PT0gJycpIHtcbiAgICAgIGZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMhLnB1c2goZG9tSW5kZXhPZihmcmFtZS5jaGlsZHJlbiEsIHRleHQpKTtcbiAgICB9XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsndGV4dCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBCbG9ja1N0YXRlbWVudChub2RlOiBBU1QuQmxvY2tTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydibG9jaycsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcblxuICAgIGlmIChub2RlLmludmVyc2UpIHsgdGhpcy52aXNpdChub2RlLmludmVyc2UpOyB9XG4gICAgaWYgKG5vZGUucHJvZ3JhbSkgeyB0aGlzLnZpc2l0KG5vZGUucHJvZ3JhbSk7IH1cbiAgfTtcblxuICBQYXJ0aWFsU3RhdGVtZW50KG5vZGU6IEFTVC5QYXJ0aWFsU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIENvbW1lbnRTdGF0ZW1lbnQodGV4dDogQVNULkNvbW1lbnRTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydjb21tZW50JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIE11c3RhY2hlQ29tbWVudFN0YXRlbWVudCgpIHtcbiAgICAvLyBJbnRlbnRpb25hbCBlbXB0eTogSGFuZGxlYmFycyBjb21tZW50cyBzaG91bGQgbm90IGFmZmVjdCBvdXRwdXQuXG4gIH07XG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQobXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFttdXN0YWNoZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgLy8gRnJhbWUgaGVscGVyc1xuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRGcmFtZSgpOiBGcmFtZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGcmFtZSgpOiBPcHRpb248RnJhbWU+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEZyYW1lKCkge1xuICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBwcml2YXRlIHBvcEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzOiBBU1QuTm9kZVtdLCBkb21Ob2RlOiBBU1QuVGV4dE5vZGUgfCBBU1QuRWxlbWVudE5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0= |
@@ -1,3 +0,2 @@ | ||
import { assert } from "@glimmer/util"; | ||
import { Stack, DictSet, expect } from "@glimmer/util"; | ||
import { Stack, DictSet } from "@glimmer/util"; | ||
import { Statements, Ops } from '@glimmer/wire-format'; | ||
@@ -141,3 +140,3 @@ export class Block { | ||
get currentBlock() { | ||
return expect(this.blocks.current, 'Expected a block on the stack'); | ||
return this.blocks.current; | ||
} | ||
@@ -187,4 +186,2 @@ process() { | ||
let blocks = this.template.block.blocks; | ||
assert(typeof template !== 'number' || blocks[template] !== null, 'missing block in the compiler'); | ||
assert(typeof inverse !== 'number' || blocks[inverse] !== null, 'missing block in the compiler'); | ||
this.push([Ops.Block, name, params, hash, blocks[template], blocks[inverse]]); | ||
@@ -289,3 +286,2 @@ } | ||
let component = this.blocks.pop(); | ||
assert(component instanceof ComponentBlock, "Compiler bug: endComponent() should end a component"); | ||
return component.toJSON(); | ||
@@ -301,3 +297,2 @@ } | ||
prepareObject(size) { | ||
assert(this.values.length >= size, `Expected ${size} values on the stack, found ${this.values.length}`); | ||
let keys = new Array(size); | ||
@@ -322,6 +317,5 @@ let values = new Array(size); | ||
popValue() { | ||
assert(this.values.length, "No expression found on stack"); | ||
return this.values.pop(); | ||
} | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImphdmFzY3JpcHQtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0QsT0FBTyxFQU1MLFVBQVUsRUFHVixHQUFHLEVBQ0osTUFBTSxzQkFBc0IsQ0FBQztBQVE5QixNQUFNO0lBQU47UUFDUyxlQUFVLEdBQWdCLEVBQUUsQ0FBQztJQU90QyxDQUFDO0lBSEMsSUFBSSxDQUFDLFNBQW9CO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQUVELE1BQU0sa0JBQW1CLFNBQVEsS0FBSztJQUNwQyxZQUFtQixLQUF1QjtRQUN4QyxLQUFLLEVBQUUsQ0FBQztRQURTLFVBQUssR0FBTCxLQUFLLENBQWtCO0lBRTFDLENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxDQUFDO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7U0FDN0IsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sb0JBQXFCLFNBQVEsS0FBSztJQVd0QyxZQUFvQixXQUErQjtRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQURVLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQVY1QyxTQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ2xCLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQy9CLFVBQUssR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQzlCLFlBQU8sR0FBZ0IsRUFBRSxDQUFDO1FBQzFCLFNBQUksR0FBNkIsRUFBRSxDQUFDO1FBQ3BDLFdBQU0sR0FBdUMsRUFBRSxDQUFDO1FBQ2hELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDZixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGFBQVEsR0FBRyxLQUFLLENBQUM7SUFJekIsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFvQjtRQUN2QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDdkIsQ0FBQztZQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDekIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7UUFDSCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixNQUFNLENBQUM7WUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSTtZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUk7WUFDeEMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTztZQUM1RCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0scUJBQXNCLFNBQVEsS0FBSztJQU12QyxZQUFvQixLQUF1QjtRQUN6QyxLQUFLLEVBQUUsQ0FBQztRQURVLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBTHBDLGVBQVUsR0FBMkIsRUFBRSxDQUFDO1FBQ3hDLGNBQVMsR0FBMEIsRUFBRSxDQUFDO1FBQ3JDLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDakIsZ0JBQVcsR0FBYSxFQUFFLENBQUM7SUFJbEMsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFvQjtRQUN2QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7WUFDakYsQ0FBQztRQUNILENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckMsTUFBTSxDQUFDO1lBQ0wsSUFBSSxDQUFDLFVBQVU7WUFDZixDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7WUFDZDtnQkFDRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7YUFDN0I7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsTUFBTTtJQUdKLFlBQVksT0FBMkIsRUFBUyxJQUFPO1FBQVAsU0FBSSxHQUFKLElBQUksQ0FBRztRQUNyRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxDQUFDO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzFCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE9BQU87SUFXWixZQUFZLE9BQWMsRUFBRSxPQUEyQixFQUFFLElBQU87UUFKeEQsV0FBTSxHQUFHLElBQUksS0FBSyxFQUFTLENBQUM7UUFFNUIsV0FBTSxHQUFpQixFQUFFLENBQUM7UUFHaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQWJELE1BQU0sQ0FBQyxPQUFPLENBQXlCLE9BQWMsRUFBRSxPQUEyQixFQUFFLElBQU87UUFDekYsSUFBSSxRQUFRLEdBQUcsSUFBSSxrQkFBa0IsQ0FBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQVlELElBQUksWUFBWTtRQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsK0JBQStCLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDckMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLE1BQU0sd0JBQXdCLENBQUMsQ0FBQztZQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVztJQUVYLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBZ0I7UUFDakMsSUFBSSxLQUFLLEdBQVUsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFpQixDQUFDO1FBQ3hDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFVBQVU7SUFFVixDQUFDO0lBRUQsY0FBYztJQUVkLElBQUksQ0FBQyxPQUFlO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFnQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVk7UUFDbkIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ3JDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQVEsQ0FBQztRQUVqQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxPQUFlO1FBQ25ELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNyQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFRLENBQUM7UUFFakMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO1FBQ25HLE1BQU0sQ0FBQyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO1FBRWpHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBd0I7UUFDbEMsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUV0QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixPQUFPLENBQUMsR0FBRywyREFBMkQsQ0FBQyxDQUFDO1FBQzdHLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBd0I7UUFDbkMsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUV0QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUyxFQUFFLFNBQWM7UUFDbEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBYyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVMsRUFBRSxTQUFjO1FBQ25DLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQWMsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFTLEVBQUUsU0FBYztRQUNwQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFjLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxTQUFTLENBQUMsSUFBUztRQUNqQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFjLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2xCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQWMsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEVBQVU7UUFDZCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUF1QjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQXVCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWTtRQUN6QixJQUFJLENBQUMsU0FBUyxDQUE2QixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQXVCO1FBQzdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxlQUFlO0lBRWYsT0FBTyxDQUFDLEtBQW9DO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLENBQXdCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBb0IsS0FBSyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFzQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQWM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBeUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxDQUFxQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBVSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVk7UUFDakIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ3JDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQVEsQ0FBQztRQUVqQyxJQUFJLENBQUMsU0FBUyxDQUFxQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCw0QkFBNEI7SUFFNUIsY0FBYyxDQUFDLE9BQXdCO1FBQ3JDLElBQUksU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxNQUFNLENBQUMsU0FBUyxZQUFZLGNBQWMsRUFBRSxxREFBcUQsQ0FBQyxDQUFDO1FBQ25HLE1BQU0sQ0FBRSxTQUE0QixDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUN2QixJQUFJLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1FBRTlCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFnQixDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQVMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsWUFBWSxJQUFJLCtCQUErQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFeEcsSUFBSSxJQUFJLEdBQWEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxNQUFNLEdBQWlCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQU8sQ0FBQztZQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBYyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGFBQWE7SUFFYixJQUFJLENBQUMsSUFBZTtRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNiLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsU0FBUyxDQUF1QyxHQUFNO1FBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLDhCQUE4QixDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFPLENBQUM7SUFDaEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgV2lyZUZvcm1hdCBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgU3RhY2ssIERpY3RTZXQsIE9wdGlvbiwgZXhwZWN0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBCbG9ja1N5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUgfSBmcm9tICcuL3RlbXBsYXRlLXZpc2l0b3InO1xuXG5pbXBvcnQge1xuICBUZW1wbGF0ZU1ldGEsXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBTZXJpYWxpemVkVGVtcGxhdGUsXG4gIENvcmUsXG4gIFN0YXRlbWVudCxcbiAgU3RhdGVtZW50cyxcbiAgRXhwcmVzc2lvbixcbiAgRXhwcmVzc2lvbnMsXG4gIE9wc1xufSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmV4cG9ydCB0eXBlIHN0ciA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBhcmFtcyA9IENvcmUuUGFyYW1zO1xuZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcbmV4cG9ydCB0eXBlIFBhdGggPSBDb3JlLlBhdGg7XG5leHBvcnQgdHlwZSBTdGFja1ZhbHVlID0gRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2ggfCBzdHI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9jayB7XG4gIHB1YmxpYyBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIGFic3RyYWN0IHRvSlNPTigpOiBPYmplY3Q7XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdG9KU09OKCk6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyB0eXBlID0gXCJ0ZW1wbGF0ZVwiO1xuICBwdWJsaWMgeWllbGRzID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgbmFtZWQgPSBuZXcgRGljdFNldDxzdHJpbmc+KCk7XG4gIHB1YmxpYyBwcmVsdWRlOiBTdGF0ZW1lbnRbXSA9IFtdO1xuICBwdWJsaWMgaGVhZDogU3RhdGVtZW50cy5FbGVtZW50SGVhZFtdID0gW107XG4gIHB1YmxpYyBibG9ja3M6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrW10gPSBbXTtcbiAgcHVibGljIGhhc0V2YWwgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzYXdFbGVtZW50ID0gZmFsc2U7XG4gIHByaXZhdGUgaW5QYXJhbXMgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICghdGhpcy5zYXdFbGVtZW50KSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc09wZW5FbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5zYXdFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pblBhcmFtcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJlbHVkZS5wdXNoKHN0YXRlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oZWFkLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0luRWxlbWVudEhlYWQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmhlYWQucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgIHByZWx1ZGU6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMucHJlbHVkZSA6IG51bGwsXG4gICAgICBoZWFkOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLmhlYWQgOiBudWxsLFxuICAgICAgc3RhdGVtZW50czogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5zdGF0ZW1lbnRzIDogdGhpcy5wcmVsdWRlLFxuICAgICAgaGFzRXZhbDogdGhpcy5oYXNFdmFsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG4gIHB1YmxpYyBhcmd1bWVudHM6IFN0YXRlbWVudHMuQXJndW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIGluUGFyYW1zID0gdHJ1ZTtcbiAgcHVibGljIHBvc2l0aW9uYWxzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0FyZ3VtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChTdGF0ZW1lbnRzLmlzQXR0cmlidXRlKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBFbGVtZW50IG1vZGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBbV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBXaXJlRm9ybWF0LkNvcmUuSGFzaCwgT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBhcmdzID0gdGhpcy5hcmd1bWVudHM7XG4gICAgbGV0IGtleXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzFdKTtcbiAgICBsZXQgdmFsdWVzID0gYXJncy5tYXAoYXJnID0+IGFyZ1syXSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgW2tleXMsIHZhbHVlc10sXG4gICAgICB7XG4gICAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgfVxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgcHVibGljIGJsb2NrOiBUZW1wbGF0ZUJsb2NrO1xuXG4gIGNvbnN0cnVjdG9yKHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSwgcHVibGljIG1ldGE6IFQpIHtcbiAgICB0aGlzLmJsb2NrID0gbmV3IFRlbXBsYXRlQmxvY2soc3ltYm9scyk7XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlPFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYmxvY2s6IHRoaXMuYmxvY2sudG9KU09OKCksXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphdmFTY3JpcHRDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBwcm9jZXNzPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIG1ldGE6IFQpOiBUZW1wbGF0ZTxUPiB7XG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IEphdmFTY3JpcHRDb21waWxlcjxUPihvcGNvZGVzLCBzeW1ib2xzLCBtZXRhKTtcbiAgICByZXR1cm4gY29tcGlsZXIucHJvY2VzcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZTogVGVtcGxhdGU8VD47XG4gIHByaXZhdGUgYmxvY2tzID0gbmV3IFN0YWNrPEJsb2NrPigpO1xuICBwcml2YXRlIG9wY29kZXM6IGFueVtdO1xuICBwcml2YXRlIHZhbHVlczogU3RhY2tWYWx1ZVtdID0gW107XG5cbiAgY29uc3RydWN0b3Iob3Bjb2RlczogYW55W10sIHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSwgbWV0YTogVCkge1xuICAgIHRoaXMub3Bjb2RlcyA9IG9wY29kZXM7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShzeW1ib2xzLCBtZXRhKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50QmxvY2soKTogQmxvY2sge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5ibG9ja3MuY3VycmVudCwgJ0V4cGVjdGVkIGEgYmxvY2sgb24gdGhlIHN0YWNrJyk7XG4gIH1cblxuICBwcm9jZXNzKCk6IFRlbXBsYXRlPFQ+IHtcbiAgICB0aGlzLm9wY29kZXMuZm9yRWFjaCgoW29wY29kZSwgLi4uYXJnc10pID0+IHtcbiAgICAgIGlmICghdGhpc1tvcGNvZGVdKSB7IHRocm93IG5ldyBFcnJvcihgdW5pbXBsZW1lbnRlZCAke29wY29kZX0gb24gSmF2YVNjcmlwdENvbXBpbGVyYCk7IH1cbiAgICAgIHRoaXNbb3Bjb2RlXSguLi5hcmdzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlO1xuICB9XG5cbiAgLy8vIE5lc3RpbmdcblxuICBzdGFydEJsb2NrKFtwcm9ncmFtXTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIGxldCBibG9jazogQmxvY2sgPSBuZXcgSW5saW5lQmxvY2socHJvZ3JhbVsnc3ltYm9scyddKTtcbiAgICB0aGlzLmJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgfVxuXG4gIGVuZEJsb2NrKCkge1xuICAgIGxldCB7IHRlbXBsYXRlLCBibG9ja3MgfSA9IHRoaXM7XG4gICAgbGV0IGJsb2NrID0gYmxvY2tzLnBvcCgpIGFzIElubGluZUJsb2NrO1xuICAgIHRlbXBsYXRlLmJsb2NrLmJsb2Nrcy5wdXNoKGJsb2NrLnRvSlNPTigpKTtcbiAgfVxuXG4gIHN0YXJ0UHJvZ3JhbSgpIHtcbiAgICB0aGlzLmJsb2Nrcy5wdXNoKHRoaXMudGVtcGxhdGUuYmxvY2spO1xuICB9XG5cbiAgZW5kUHJvZ3JhbSgpIHtcblxuICB9XG5cbiAgLy8vIFN0YXRlbWVudHNcblxuICB0ZXh0KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHRoaXMucHVzaChbT3BzLlRleHQsIGNvbnRlbnRdKTtcbiAgfVxuXG4gIGFwcGVuZCh0cnVzdGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuQXBwZW5kLCB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCksIHRydXN0ZWRdKTtcbiAgfVxuXG4gIGNvbW1lbnQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaChbT3BzLkNvbW1lbnQsIHZhbHVlXSk7XG4gIH1cblxuICBtb2RpZmllcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2goW09wcy5Nb2RpZmllciwgbmFtZSwgcGFyYW1zLCBoYXNoXSk7XG4gIH1cblxuICBibG9jayhuYW1lOiBzdHJpbmcsIHRlbXBsYXRlOiBudW1iZXIsIGludmVyc2U6IG51bWJlcikge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICBsZXQgaGFzaCA9IHRoaXMucG9wVmFsdWU8SGFzaD4oKTtcblxuICAgIGxldCBibG9ja3MgPSB0aGlzLnRlbXBsYXRlLmJsb2NrLmJsb2NrcztcbiAgICBhc3NlcnQodHlwZW9mIHRlbXBsYXRlICE9PSAnbnVtYmVyJyB8fCBibG9ja3NbdGVtcGxhdGVdICE9PSBudWxsLCAnbWlzc2luZyBibG9jayBpbiB0aGUgY29tcGlsZXInKTtcbiAgICBhc3NlcnQodHlwZW9mIGludmVyc2UgIT09ICdudW1iZXInIHx8IGJsb2Nrc1tpbnZlcnNlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG5cbiAgICB0aGlzLnB1c2goW09wcy5CbG9jaywgbmFtZSwgcGFyYW1zLCBoYXNoLCBibG9ja3NbdGVtcGxhdGVdLCBibG9ja3NbaW52ZXJzZV1dKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmICh0YWcuaW5kZXhPZignLScpICE9PSAtMSkge1xuICAgICAgdGhpcy5zdGFydENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYmxvY2tQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiA8JHtlbGVtZW50LnRhZ30+IGlzIG5vdCBhIGNvbXBvbmVudCBhbmQgZG9lc24ndCBzdXBwb3J0IGJsb2NrIHBhcmFtZXRlcnNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlbkVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICB0aGlzLnB1c2goW09wcy5GbHVzaEVsZW1lbnRdKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgIGxldCBbYXR0cnMsIGFyZ3MsIGJsb2NrXSA9IHRoaXMuZW5kQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLnB1c2goW09wcy5Db21wb25lbnQsIHRhZywgYXR0cnMsIGFyZ3MsIGJsb2NrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLkNsb3NlRWxlbWVudF0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBkeW5hbWljQXR0cihuYW1lOiBzdHIsIG5hbWVzcGFjZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICB0cnVzdGluZ0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5UcnVzdGluZ0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIHN0YXRpY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG5cbiAgZHluYW1pY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuRHluYW1pY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIHlpZWxkKHRvOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuWWllbGQsIHRvLCBwYXJhbXNdKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKGV2YWxJbmZvOiBDb3JlLkV2YWxJbmZvKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRGVidWdnZXIsIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhhc0Jsb2NrPihbT3BzLkhhc0Jsb2NrLCBuYW1lXSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcz4oW09wcy5IYXNCbG9ja1BhcmFtcywgbmFtZV0pO1xuICB9XG5cbiAgcGFydGlhbChldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5QYXJ0aWFsLCBwYXJhbXNbMF0sIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9uc1xuXG4gIGxpdGVyYWwodmFsdWU6IEV4cHJlc3Npb25zLlZhbHVlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVuZGVmaW5lZD4oW09wcy5VbmRlZmluZWRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVmFsdWU+KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1bmtub3duKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVua25vd24+KFtPcHMuVW5rbm93biwgbmFtZV0pO1xuICB9XG5cbiAgZ2V0KGhlYWQ6IG51bWJlciwgcGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5HZXQ+KFtPcHMuR2V0LCBoZWFkLCBwYXRoXSk7XG4gIH1cblxuICBtYXliZUxvY2FsKHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuTWF5YmVMb2NhbD4oW09wcy5NYXliZUxvY2FsLCBwYXRoXSk7XG4gIH1cblxuICBjb25jYXQoKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuQ29uY2F0PihbT3BzLkNvbmNhdCwgdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCldKTtcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IZWxwZXI+KFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcblxuICBzdGFydENvbXBvbmVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEJsb2NrKGVsZW1lbnRbJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChjb21wb25lbnQpO1xuICB9XG5cbiAgZW5kQ29tcG9uZW50KCk6IFtXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXR0cmlidXRlW10sIFdpcmVGb3JtYXQuQ29yZS5IYXNoLCBPcHRpb248V2lyZUZvcm1hdC5TZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgIGFzc2VydChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRCbG9jaywgXCJDb21waWxlciBidWc6IGVuZENvbXBvbmVudCgpIHNob3VsZCBlbmQgYSBjb21wb25lbnRcIik7XG4gICAgcmV0dXJuIChjb21wb25lbnQgYXMgQ29tcG9uZW50QmxvY2spLnRvSlNPTigpO1xuICB9XG5cbiAgcHJlcGFyZUFycmF5KHNpemU6IG51bWJlcikge1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhbHVlcy5wdXNoKHRoaXMucG9wVmFsdWUoKSBhcyBFeHByZXNzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxQYXJhbXM+KHZhbHVlcyk7XG4gIH1cblxuICBwcmVwYXJlT2JqZWN0KHNpemU6IG51bWJlcikge1xuICAgIGFzc2VydCh0aGlzLnZhbHVlcy5sZW5ndGggPj0gc2l6ZSwgYEV4cGVjdGVkICR7c2l6ZX0gdmFsdWVzIG9uIHRoZSBzdGFjaywgZm91bmQgJHt0aGlzLnZhbHVlcy5sZW5ndGh9YCk7XG5cbiAgICBsZXQga2V5czogc3RyaW5nW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgbGV0IHZhbHVlczogRXhwcmVzc2lvbltdID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGtleXNbaV0gPSB0aGlzLnBvcFZhbHVlPHN0cj4oKTtcbiAgICAgIHZhbHVlc1tpXSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxIYXNoPihba2V5cywgdmFsdWVzXSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgcHVzaChhcmdzOiBTdGF0ZW1lbnQpIHtcbiAgICB3aGlsZSAoYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSBudWxsKSB7XG4gICAgICBhcmdzLnBvcCgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsb2NrLnB1c2goYXJncyk7XG4gIH1cblxuICBwdXNoVmFsdWU8UyBleHRlbmRzIEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoPih2YWw6IFMpIHtcbiAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbCk7XG4gIH1cblxuICBwb3BWYWx1ZTxUIGV4dGVuZHMgU3RhY2tWYWx1ZT4oKTogVCB7XG4gICAgYXNzZXJ0KHRoaXMudmFsdWVzLmxlbmd0aCwgXCJObyBleHByZXNzaW9uIGZvdW5kIG9uIHN0YWNrXCIpO1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5wb3AoKSBhcyBUO1xuICB9XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImphdmFzY3JpcHQtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFJdkQsT0FBTyxFQU1MLFVBQVUsRUFHVixHQUFHLEVBQ0osTUFBTSxzQkFBc0IsQ0FBQztBQVE5QixNQUFNO0lBQU47UUFDUyxlQUFVLEdBQWdCLEVBQUUsQ0FBQztJQU90QyxDQUFDO0lBSEMsSUFBSSxDQUFDLFNBQW9CO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQUVELE1BQU0sa0JBQW1CLFNBQVEsS0FBSztJQUNwQyxZQUFtQixLQUF1QjtRQUN4QyxLQUFLLEVBQUUsQ0FBQztRQURTLFVBQUssR0FBTCxLQUFLLENBQWtCO0lBRTFDLENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxDQUFDO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7U0FDN0IsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sb0JBQXFCLFNBQVEsS0FBSztJQVd0QyxZQUFvQixXQUErQjtRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQURVLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQVY1QyxTQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ2xCLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQy9CLFVBQUssR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQzlCLFlBQU8sR0FBZ0IsRUFBRSxDQUFDO1FBQzFCLFNBQUksR0FBNkIsRUFBRSxDQUFDO1FBQ3BDLFdBQU0sR0FBdUMsRUFBRSxDQUFDO1FBQ2hELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDZixlQUFVLEdB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QUFhLENBQUMsSUFBWTtRQUV4QixJQUFJLElBQUksR0FBYSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLE1BQU0sR0FBaUIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0MsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBTyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFjLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsYUFBYTtJQUViLElBQUksQ0FBQyxJQUFlO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2IsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxTQUFTLENBQXVDLEdBQU07UUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQU8sQ0FBQztJQUNoQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBTdGFjaywgRGljdFNldCwgT3B0aW9uIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBCbG9ja1N5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUgfSBmcm9tICcuL3RlbXBsYXRlLXZpc2l0b3InO1xuXG5pbXBvcnQge1xuICBUZW1wbGF0ZU1ldGEsXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBTZXJpYWxpemVkVGVtcGxhdGUsXG4gIENvcmUsXG4gIFN0YXRlbWVudCxcbiAgU3RhdGVtZW50cyxcbiAgRXhwcmVzc2lvbixcbiAgRXhwcmVzc2lvbnMsXG4gIE9wc1xufSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmV4cG9ydCB0eXBlIHN0ciA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBhcmFtcyA9IENvcmUuUGFyYW1zO1xuZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcbmV4cG9ydCB0eXBlIFBhdGggPSBDb3JlLlBhdGg7XG5leHBvcnQgdHlwZSBTdGFja1ZhbHVlID0gRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2ggfCBzdHI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9jayB7XG4gIHB1YmxpYyBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIGFic3RyYWN0IHRvSlNPTigpOiBPYmplY3Q7XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdG9KU09OKCk6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyB0eXBlID0gXCJ0ZW1wbGF0ZVwiO1xuICBwdWJsaWMgeWllbGRzID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgbmFtZWQgPSBuZXcgRGljdFNldDxzdHJpbmc+KCk7XG4gIHB1YmxpYyBwcmVsdWRlOiBTdGF0ZW1lbnRbXSA9IFtdO1xuICBwdWJsaWMgaGVhZDogU3RhdGVtZW50cy5FbGVtZW50SGVhZFtdID0gW107XG4gIHB1YmxpYyBibG9ja3M6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrW10gPSBbXTtcbiAgcHVibGljIGhhc0V2YWwgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzYXdFbGVtZW50ID0gZmFsc2U7XG4gIHByaXZhdGUgaW5QYXJhbXMgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICghdGhpcy5zYXdFbGVtZW50KSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc09wZW5FbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5zYXdFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pblBhcmFtcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJlbHVkZS5wdXNoKHN0YXRlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oZWFkLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0luRWxlbWVudEhlYWQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmhlYWQucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgIHByZWx1ZGU6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMucHJlbHVkZSA6IG51bGwsXG4gICAgICBoZWFkOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLmhlYWQgOiBudWxsLFxuICAgICAgc3RhdGVtZW50czogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5zdGF0ZW1lbnRzIDogdGhpcy5wcmVsdWRlLFxuICAgICAgaGFzRXZhbDogdGhpcy5oYXNFdmFsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG4gIHB1YmxpYyBhcmd1bWVudHM6IFN0YXRlbWVudHMuQXJndW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIGluUGFyYW1zID0gdHJ1ZTtcbiAgcHVibGljIHBvc2l0aW9uYWxzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0FyZ3VtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChTdGF0ZW1lbnRzLmlzQXR0cmlidXRlKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBFbGVtZW50IG1vZGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBbV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBXaXJlRm9ybWF0LkNvcmUuSGFzaCwgT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBhcmdzID0gdGhpcy5hcmd1bWVudHM7XG4gICAgbGV0IGtleXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzFdKTtcbiAgICBsZXQgdmFsdWVzID0gYXJncy5tYXAoYXJnID0+IGFyZ1syXSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgW2tleXMsIHZhbHVlc10sXG4gICAgICB7XG4gICAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgfVxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgcHVibGljIGJsb2NrOiBUZW1wbGF0ZUJsb2NrO1xuXG4gIGNvbnN0cnVjdG9yKHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSwgcHVibGljIG1ldGE6IFQpIHtcbiAgICB0aGlzLmJsb2NrID0gbmV3IFRlbXBsYXRlQmxvY2soc3ltYm9scyk7XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlPFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYmxvY2s6IHRoaXMuYmxvY2sudG9KU09OKCksXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphdmFTY3JpcHRDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBwcm9jZXNzPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIG1ldGE6IFQpOiBUZW1wbGF0ZTxUPiB7XG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IEphdmFTY3JpcHRDb21waWxlcjxUPihvcGNvZGVzLCBzeW1ib2xzLCBtZXRhKTtcbiAgICByZXR1cm4gY29tcGlsZXIucHJvY2VzcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZTogVGVtcGxhdGU8VD47XG4gIHByaXZhdGUgYmxvY2tzID0gbmV3IFN0YWNrPEJsb2NrPigpO1xuICBwcml2YXRlIG9wY29kZXM6IGFueVtdO1xuICBwcml2YXRlIHZhbHVlczogU3RhY2tWYWx1ZVtdID0gW107XG5cbiAgY29uc3RydWN0b3Iob3Bjb2RlczogYW55W10sIHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSwgbWV0YTogVCkge1xuICAgIHRoaXMub3Bjb2RlcyA9IG9wY29kZXM7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShzeW1ib2xzLCBtZXRhKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50QmxvY2soKTogQmxvY2sge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5jdXJyZW50O1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZTxUPiB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2sobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogbnVtYmVyLCBpbnZlcnNlOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG5cbiAgICB0aGlzLnB1c2goW09wcy5CbG9jaywgbmFtZSwgcGFyYW1zLCBoYXNoLCBibG9ja3NbdGVtcGxhdGVdLCBibG9ja3NbaW52ZXJzZV1dKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmICh0YWcuaW5kZXhPZignLScpICE9PSAtMSkge1xuICAgICAgdGhpcy5zdGFydENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYmxvY2tQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiA8JHtlbGVtZW50LnRhZ30+IGlzIG5vdCBhIGNvbXBvbmVudCBhbmQgZG9lc24ndCBzdXBwb3J0IGJsb2NrIHBhcmFtZXRlcnNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlbkVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICB0aGlzLnB1c2goW09wcy5GbHVzaEVsZW1lbnRdKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgIGxldCBbYXR0cnMsIGFyZ3MsIGJsb2NrXSA9IHRoaXMuZW5kQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLnB1c2goW09wcy5Db21wb25lbnQsIHRhZywgYXR0cnMsIGFyZ3MsIGJsb2NrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLkNsb3NlRWxlbWVudF0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBkeW5hbWljQXR0cihuYW1lOiBzdHIsIG5hbWVzcGFjZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICB0cnVzdGluZ0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5UcnVzdGluZ0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIHN0YXRpY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG5cbiAgZHluYW1pY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuRHluYW1pY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIHlpZWxkKHRvOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuWWllbGQsIHRvLCBwYXJhbXNdKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKGV2YWxJbmZvOiBDb3JlLkV2YWxJbmZvKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRGVidWdnZXIsIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhhc0Jsb2NrPihbT3BzLkhhc0Jsb2NrLCBuYW1lXSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcz4oW09wcy5IYXNCbG9ja1BhcmFtcywgbmFtZV0pO1xuICB9XG5cbiAgcGFydGlhbChldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5QYXJ0aWFsLCBwYXJhbXNbMF0sIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9uc1xuXG4gIGxpdGVyYWwodmFsdWU6IEV4cHJlc3Npb25zLlZhbHVlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVuZGVmaW5lZD4oW09wcy5VbmRlZmluZWRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVmFsdWU+KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1bmtub3duKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVua25vd24+KFtPcHMuVW5rbm93biwgbmFtZV0pO1xuICB9XG5cbiAgZ2V0KGhlYWQ6IG51bWJlciwgcGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5HZXQ+KFtPcHMuR2V0LCBoZWFkLCBwYXRoXSk7XG4gIH1cblxuICBtYXliZUxvY2FsKHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuTWF5YmVMb2NhbD4oW09wcy5NYXliZUxvY2FsLCBwYXRoXSk7XG4gIH1cblxuICBjb25jYXQoKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuQ29uY2F0PihbT3BzLkNvbmNhdCwgdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCldKTtcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IZWxwZXI+KFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcblxuICBzdGFydENvbXBvbmVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEJsb2NrKGVsZW1lbnRbJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChjb21wb25lbnQpO1xuICB9XG5cbiAgZW5kQ29tcG9uZW50KCk6IFtXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXR0cmlidXRlW10sIFdpcmVGb3JtYXQuQ29yZS5IYXNoLCBPcHRpb248V2lyZUZvcm1hdC5TZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgIHJldHVybiAoY29tcG9uZW50IGFzIENvbXBvbmVudEJsb2NrKS50b0pTT04oKTtcbiAgfVxuXG4gIHByZXBhcmVBcnJheShzaXplOiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkgYXMgRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8UGFyYW1zPih2YWx1ZXMpO1xuICB9XG5cbiAgcHJlcGFyZU9iamVjdChzaXplOiBudW1iZXIpIHtcblxuICAgIGxldCBrZXlzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShzaXplKTtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAga2V5c1tpXSA9IHRoaXMucG9wVmFsdWU8c3RyPigpO1xuICAgICAgdmFsdWVzW2ldID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFZhbHVlPEhhc2g+KFtrZXlzLCB2YWx1ZXNdKTtcbiAgfVxuXG4gIC8vLyBVdGlsaXRpZXNcblxuICBwdXNoKGFyZ3M6IFN0YXRlbWVudCkge1xuICAgIHdoaWxlIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IG51bGwpIHtcbiAgICAgIGFyZ3MucG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50QmxvY2sucHVzaChhcmdzKTtcbiAgfVxuXG4gIHB1c2hWYWx1ZTxTIGV4dGVuZHMgRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2g+KHZhbDogUykge1xuICAgIHRoaXMudmFsdWVzLnB1c2godmFsKTtcbiAgfVxuXG4gIHBvcFZhbHVlPFQgZXh0ZW5kcyBTdGFja1ZhbHVlPigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMucG9wKCkgYXMgVDtcbiAgfVxufVxuIl19 |
import TemplateVisitor from "./template-visitor"; | ||
import JavaScriptCompiler from "./javascript-compiler"; | ||
import { Stack, getAttrNamespace } from "@glimmer/util"; | ||
import { assert, expect } from "@glimmer/util"; | ||
import { isLiteral } from '@glimmer/syntax'; | ||
@@ -26,3 +25,3 @@ function isTrustedValue(value) { | ||
get symbols() { | ||
return expect(this.symbolStack.current, 'Expected a symbol table on the stack'); | ||
return this.symbolStack.current; | ||
} | ||
@@ -272,3 +271,2 @@ process(actions) { | ||
let param = params[i]; | ||
assert(this[param.type], `Unimplemented ${param.type} on TemplateCompiler`); | ||
this[param.type](param); | ||
@@ -286,3 +284,2 @@ } | ||
let { key, value } = pairs[i]; | ||
assert(this[value.type], `Unimplemented ${value.type} on TemplateCompiler`); | ||
this[value.type](value); | ||
@@ -426,2 +423,2 @@ this.opcode('literal', null, key); | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGVBQXdDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUUsT0FBTyxrQkFBZ0MsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE9BQU8sRUFBTyxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU1qRCx3QkFBd0IsS0FBVTtJQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTztJQWlCWixZQUFZLE9BQTBCO1FBTjlCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixnQkFBVyxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7UUFDdkMsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUcxQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQWxCRCxNQUFNLENBQUMsT0FBTyxDQUF5QixPQUEwQixFQUFFLEdBQWdCO1FBQ2pGLElBQUksZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDNUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQixJQUFJLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9B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QU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZW1wbGF0ZVZpc2l0b3IsIHsgU3ltYm9sVGFibGUsIEFjdGlvbiB9IGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIsIHsgVGVtcGxhdGUgfSBmcm9tIFwiLi9qYXZhc2NyaXB0LWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBTdGFjaywgZ2V0QXR0ck5hbWVzcGFjZSB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBhc3NlcnQsIGV4cGVjdCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1ldGEgfSBmcm9tIFwiQGdsaW1tZXIvd2lyZS1mb3JtYXRcIjtcbmltcG9ydCB7IEFTVCwgaXNMaXRlcmFsIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcblxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlT3B0aW9uczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIG1ldGE6IFQ7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1c3RlZFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlLmVzY2FwZWQgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUuZXNjYXBlZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBjb21waWxlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+LCBhc3Q6IEFTVC5Qcm9ncmFtKTogVGVtcGxhdGU8VD4ge1xuICAgIGxldCB0ZW1wbGF0ZVZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKCk7XG4gICAgdGVtcGxhdGVWaXNpdG9yLnZpc2l0KGFzdCk7XG5cbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgVGVtcGxhdGVDb21waWxlcihvcHRpb25zKTtcbiAgICBsZXQgb3Bjb2RlcyA9IGNvbXBpbGVyLnByb2Nlc3ModGVtcGxhdGVWaXNpdG9yLmFjdGlvbnMpO1xuICAgIHJldHVybiBKYXZhU2NyaXB0Q29tcGlsZXIucHJvY2VzczxUPihvcGNvZGVzLCBhc3RbJ3N5bWJvbHMnXSwgb3B0aW9ucy5tZXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgb3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD47XG4gIHByaXZhdGUgdGVtcGxhdGVJZCA9IDA7XG4gIHByaXZhdGUgdGVtcGxhdGVJZHM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgc3ltYm9sU3RhY2sgPSBuZXcgU3RhY2s8U3ltYm9sVGFibGU+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBpbmNsdWRlTWV0YSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIGdldCBzeW1ib2xzKCk6IFN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuc3ltYm9sU3RhY2suY3VycmVudCwgJ0V4cGVjdGVkIGEgc3ltYm9sIHRhYmxlIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcyhhY3Rpb25zOiBBY3Rpb25bXSk6IEFjdGlvbltdIHtcbiAgICBhY3Rpb25zLmZvckVhY2goKFtuYW1lLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW25hbWVdKSB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCAke25hbWV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTsgfVxuICAgICAgKHRoaXNbbmFtZV0gYXMgYW55KSguLi5hcmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5vcGNvZGVzO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKHByb2dyYW06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICB0aGlzLm9wY29kZSgnc3RhcnRQcm9ncmFtJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2VuZFByb2dyYW0nLCBudWxsKTtcbiAgfVxuXG4gIHN0YXJ0QmxvY2socHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMudGVtcGxhdGVJZCsrO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMudGVtcGxhdGVJZHMucHVzaCh0aGlzLnRlbXBsYXRlSWQgLSAxKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kQmxvY2snLCBudWxsKTtcbiAgfVxuXG4gIHRleHQoW2FjdGlvbl06IFtBU1QuVGV4dE5vZGVdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3RleHQnLCBhY3Rpb24sIGFjdGlvbi5jaGFycyk7XG4gIH1cblxuICBjb21tZW50KFthY3Rpb25dOiBbQVNULkNvbW1lbnRTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2NvbW1lbnQnLCBhY3Rpb24sIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcblxuICAgIHRoaXMub3Bjb2RlKCdvcGVuRWxlbWVudCcsIGFjdGlvbiwgYWN0aW9uKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZShbYWN0aW9uLmF0dHJpYnV0ZXNbaV1dKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5tb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubW9kaWZpZXIoW2FjdGlvbi5tb2RpZmllcnNbaV1dKTtcbiAgICB9XG4gICAgdGhpcy5vcGNvZGUoJ2ZsdXNoRWxlbWVudCcsIG51bGwpO1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChhY3Rpb25bJ3N5bWJvbHMnXSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoW2FjdGlvbl06IFtBU1QuRWxlbWVudE5vZGVdKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnY2xvc2VFbGVtZW50JywgbnVsbCwgYWN0aW9uKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZShbYWN0aW9uXTogW0FTVC5BdHRyTm9kZV0pIHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gYWN0aW9uO1xuXG4gICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG5cbiAgICBsZXQgaXNTdGF0aWMgPSB0aGlzLnByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgLy8gQXJndW1lbnRzXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlzVHJ1c3RpbmcgPSBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVzdGluZykge1xuICAgICAgICB0aGlzLm9wY29kZSgndHJ1c3RpbmdBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vZGlmaWVyKFthY3Rpb25dOiBbQVNULkVsZW1lbnRNb2RpZmllclN0YXRlbWVudF0pIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoYWN0aW9uLnBhdGgsIGFjdGlvbi5sb2MsICdtb2RpZmllcicpO1xuXG4gICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG5cbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICB0aGlzLm9wY29kZSgnbW9kaWZpZXInLCBhY3Rpb24sIHBhcnRzWzBdKTtcbiAgfVxuXG4gIG11c3RhY2hlKFthY3Rpb25dOiBbQVNULk11c3RhY2hlU3RhdGVtZW50XSkge1xuICAgIGxldCB7IHBhdGggfSA9IGFjdGlvbjtcblxuICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNZaWVsZChwYXRoKSkge1xuICAgICAgbGV0IHRvID0gYXNzZXJ0VmFsaWRZaWVsZChhY3Rpb24pO1xuICAgICAgdGhpcy55aWVsZCh0bywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVidWdnZXIocGF0aCkpIHtcbiAgICAgIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShhY3Rpb24pO1xuICAgICAgdGhpcy5kZWJ1Z2dlcignZGVidWdnZXInLCBhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICB9XG4gIH1cblxuICBibG9jayhbYWN0aW9uLyosIGluZGV4LCBjb3VudCovXTogW0FTVC5CbG9ja1N0YXRlbWVudF0pIHtcbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICBsZXQgdGVtcGxhdGVJZCA9IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0c1swXSwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG5cbiAgYXJnKFtwYXRoXTogW0FTVC5QYXRoRXhwcmVzc2lvbl0pIHtcbiAgICBsZXQgeyBwYXJ0czogW2hlYWQsIC4uLnJlc3RdIH0gPSBwYXRoO1xuICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChoZWFkKTtcbiAgICB0aGlzLm9wY29kZSgnZ2V0JywgcGF0aCwgc3ltYm9sLCByZXN0KTtcbiAgfVxuXG4gIG11c3RhY2hlRXhwcmVzc2lvbihleHByOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBleHByLCBwYXRoLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzQnVpbHRJbkhlbHBlcihwYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIgYXMgQVNULkNhbGwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgfSBlbHNlIGlmIChpc0hlbHBlckludm9jYXRpb24oZXhwcikpIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICB9IGVsc2UgaWYgKHBhdGgudGhpcykge1xuICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgdGhpcy5zeW1ib2xzLmdldChoZWFkKSwgcGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgndW5rbm93bicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbWF5YmVMb2NhbCcsIGV4cHIsIHBhdGgucGFydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBTeW50YXhcblxuICB5aWVsZCh0bzogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgneWllbGQnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKHRvKSk7XG4gIH1cblxuICBkZWJ1Z2dlcihfbmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMub3Bjb2RlKCdkZWJ1Z2dlcicsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2hhc0Jsb2NrJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhuYW1lKSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2tQYXJhbXMnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIHBhcnRpYWwoX3BhcmFtczogQVNULkV4cHJlc3Npb25bXSwgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoJ3BhcnRpYWwnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5nZXRFdmFsSW5mbygpKTtcbiAgfVxuXG4gIGJ1aWx0SW5IZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgIGlmIChpc0hhc0Jsb2NrKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9jayhuYW1lLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzSGFzQmxvY2tQYXJhbXMocGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrUGFyYW1zKG5hbWUsIGV4cHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9ucywgaW52b2tlZCByZWN1cnNpdmVseSBmcm9tIHByZXBhcmVQYXJhbXMgYW5kIHByZXBhcmVIYXNoXG5cbiAgU3ViRXhwcmVzc2lvbihleHByOiBBU1QuU3ViRXhwcmVzc2lvbikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwci5wYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgZXhwci5wYXRoLnBhcnRzWzBdKTtcbiAgICB9XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbihleHByOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwci5kYXRhKSB7XG4gICAgICB0aGlzLmFyZyhbZXhwcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBzeW1ib2xzIH0gPSB0aGlzO1xuICAgICAgbGV0IFtoZWFkXSA9IGV4cHIucGFydHM7XG5cbiAgICAgIGlmIChleHByLnRoaXMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfSBlbHNlICBpZiAoc3ltYm9scy5oYXMoaGVhZCkpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIHN5bWJvbHMuZ2V0KGhlYWQpLCBleHByLnBhcnRzLnNsaWNlKDEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBleHByLnBhcnRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBTdHJpbmdMaXRlcmFsKGFjdGlvbjogQVNULlN0cmluZ0xpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBCb29sZWFuTGl0ZXJhbChhY3Rpb246IEFTVC5Cb29sZWFuTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bWJlckxpdGVyYWwoYWN0aW9uOiBBU1QuTnVtYmVyTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bGxMaXRlcmFsKGFjdGlvbjogQVNULk51bGxMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgVW5kZWZpbmVkTGl0ZXJhbChhY3Rpb246IEFTVC5VbmRlZmluZWRMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIG9wY29kZShuYW1lOiBhbnksIGFjdGlvbjogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGxldCBvcGNvZGUgPSBbbmFtZSwgLi4uYXJnc107XG4gICAgaWYgKHRoaXMuaW5jbHVkZU1ldGEgJiYgYWN0aW9uKSB7XG4gICAgICBvcGNvZGUucHVzaCh0aGlzLm1ldGEoYWN0aW9uKSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgfVxuXG4gIHByZXBhcmVIZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoZXhwci5wYXRoLCBleHByLmxvYywgJ2hlbHBlcicpO1xuXG4gICAgbGV0IHsgcGFyYW1zLCBoYXNoIH0gPSBleHByO1xuXG4gICAgdGhpcy5wcmVwYXJlSGFzaChoYXNoKTtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIHByZXBhcmVQYXJhbXMocGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdKSB7XG4gICAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBwYXJhbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBwYXJhbSA9IHBhcmFtc1tpXTtcblxuICAgICAgYXNzZXJ0KHRoaXNbcGFyYW0udHlwZV0sIGBVbmltcGxlbWVudGVkICR7cGFyYW0udHlwZX0gb24gVGVtcGxhdGVDb21waWxlcmApO1xuICAgICAgKHRoaXNbcGFyYW0udHlwZV0gYXMgYW55KShwYXJhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcmFtcy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUhhc2goaGFzaDogQVNULkhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gICAgaWYgKCFwYWlycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhaXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgeyBrZXksIHZhbHVlIH0gPSBwYWlyc1tpXTtcblxuICAgICAgYXNzZXJ0KHRoaXNbdmFsdWUudHlwZV0sIGBVbmltcGxlbWVudGVkICR7dmFsdWUudHlwZX0gb24gVGVtcGxhdGVDb21waWxlcmApO1xuICAgICAgKHRoaXNbdmFsdWUudHlwZV0gYXMgYW55KSh2YWx1ZSk7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGtleSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVPYmplY3QnLCBudWxsLCBwYWlycy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlOiBBU1QuQXR0ck5vZGVbJ3ZhbHVlJ10pIHtcbiAgICAvLyByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgaWYgdGhlIHZhbHVlIGlzIHN0YXRpY1xuXG4gICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgdmFsdWUsIHZhbHVlLmNoYXJzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdNdXN0YWNoZVN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3ZhbHVlXSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMucHJlcGFyZUNvbmNhdFBhcnRzKHZhbHVlLnBhcnRzKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2NvbmNhdCcsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVDb25jYXRQYXJ0cyhwYXJ0czogQVNULkNvbmNhdFN0YXRlbWVudFsncGFydHMnXSkge1xuICAgIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgaWYgKHBhcnQudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFtwYXJ0XSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIHBhcnQuY2hhcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJ0cy5sZW5ndGgpO1xuICB9XG5cbiAgYXR0cmlidXRlTXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgfVxuXG4gIG1ldGEobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgbGV0IGxvYyA9IG5vZGUubG9jO1xuICAgIGlmICghbG9jKSB7IHJldHVybiBbXTsgfVxuXG4gICAgbGV0IHsgc291cmNlLCBzdGFydCwgZW5kIH0gPSBsb2M7XG4gICAgcmV0dXJuIFsgJ2xvYycsIFtzb3VyY2UgfHwgbnVsbCwgW3N0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbl0sIFtlbmQubGluZSwgZW5kLmNvbHVtbl1dIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWxwZXJJbnZvY2F0aW9uKG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBtdXN0YWNoZSBpcyBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgJiB7IHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiB9IHtcbiAgcmV0dXJuIChtdXN0YWNoZS5wYXJhbXMgJiYgbXVzdGFjaGUucGFyYW1zLmxlbmd0aCA+IDApIHx8XG4gICAgKG11c3RhY2hlLmhhc2ggJiYgbXVzdGFjaGUuaGFzaC5wYWlycy5sZW5ndGggPiAwKTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVQYXRoKHsgcGFydHMgfTogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDE7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWwoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24sIHN5bWJvbHM6IFN5bWJvbFRhYmxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzeW1ib2xzICYmIC8qIHBhcnRzLmxlbmd0aCAmJiAqLyBzeW1ib2xzLmhhcyhwYXJ0c1swXSk7XG59XG5cbmZ1bmN0aW9uIGlzWWllbGQocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAneWllbGQnO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRpYWwocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAncGFydGlhbCc7XG59XG5cbmZ1bmN0aW9uIGlzRGVidWdnZXIocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnZGVidWdnZXInO1xufVxuXG5mdW5jdGlvbiBpc0hhc0Jsb2NrKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jayc7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2tQYXJhbXMocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrLXBhcmFtcyc7XG59XG5cbmZ1bmN0aW9uIGlzQnVpbHRJbkhlbHBlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIGlzSGFzQmxvY2socGF0aCkgfHwgaXNIYXNCbG9ja1BhcmFtcyhwYXRoKTtcbn1cblxuZnVuY3Rpb24gaXNBcmcocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXBhdGhbJ2RhdGEnXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNTaW1wbGVQYXRoKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiwgbG9jOiBBU1QuU291cmNlTG9jYXRpb24sIGNvbnRleHQ6IHN0cmluZykge1xuICBpZiAoIWlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgXFxgJHtwYXRoLm9yaWdpbmFsfVxcYCBpcyBub3QgYSB2YWxpZCBuYW1lIGZvciBhICR7Y29udGV4dH0gb24gbGluZSAke2xvYy5zdGFydC5saW5lfS5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFlpZWxkKHsgaGFzaCB9OiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBzdHJpbmcge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gIGlmICgocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLmtleSAhPT0gJ3RvJykgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeWllbGQgb25seSB0YWtlcyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudDogJ3RvJ2ApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWVgKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAocGFpcnNbMF0udmFsdWUgYXMgQVNULlN0cmluZ0xpdGVyYWwpLnZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbCh7IHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgbG9jIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkgLyogOiBleHByICovIHtcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXJ0aWFsIGZvdW5kIHdpdGggbm8gYXJndW1lbnRzLiBZb3UgbXVzdCBzcGVjaWZ5IGEgdGVtcGxhdGUgbmFtZS4gKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcnRpYWwgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9IGVsc2UgaWYgKCFlc2NhcGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB7e3twYXJ0aWFsIC4uLn19fSBpcyBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIHt7cGFydGlhbCAuLi59fSBpbnN0ZWFkIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKHR5cGU6IHN0cmluZywgeyBwYXJhbXMsIGhhc2gsIGxvYyB9OiBBU1QuQ2FsbCk6IHN0cmluZyB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfSBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IHBhcmFtID0gcGFyYW1zWzBdO1xuICAgIGlmIChwYXJhbS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgIHJldHVybiBwYXJhbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gb25seSB0YWtlcyBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZSh7IHBhcmFtcywgaGFzaCB9OiB7IHBhcmFtczogQVNULkV4cHJlc3Npb25bXSwgaGFzaDogQVNULkhhc2ggfSkge1xuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHNgKTtcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGVBQXdDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUUsT0FBTyxrQkFBZ0MsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhELE9BQU8sRUFBTyxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU1qRCx3QkFBd0IsS0FBVTtJQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTztJQWlCWixZQUFZLE9BQTBCO1FBTjlCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixnQkFBVyxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7UUFDdkMsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUcxQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQWxCRCxNQUFNLENBQUMsT0FBTyxDQUF5QixPQUEwQixFQUFFLEdBQWdCO1FBQ2pGLElBQUksZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDNUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQixJQUFJLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUks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O1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQztZQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNILENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLHFEQUFxRCxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDakcsQ0FBQztBQUNILENBQUM7QUFFRCxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFnRDtJQUM5RixFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZW1wbGF0ZVZpc2l0b3IsIHsgU3ltYm9sVGFibGUsIEFjdGlvbiB9IGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIsIHsgVGVtcGxhdGUgfSBmcm9tIFwiLi9qYXZhc2NyaXB0LWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBTdGFjaywgZ2V0QXR0ck5hbWVzcGFjZSB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1ldGEgfSBmcm9tIFwiQGdsaW1tZXIvd2lyZS1mb3JtYXRcIjtcbmltcG9ydCB7IEFTVCwgaXNMaXRlcmFsIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcblxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlT3B0aW9uczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIG1ldGE6IFQ7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1c3RlZFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlLmVzY2FwZWQgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUuZXNjYXBlZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBjb21waWxlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+LCBhc3Q6IEFTVC5Qcm9ncmFtKTogVGVtcGxhdGU8VD4ge1xuICAgIGxldCB0ZW1wbGF0ZVZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKCk7XG4gICAgdGVtcGxhdGVWaXNpdG9yLnZpc2l0KGFzdCk7XG5cbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgVGVtcGxhdGVDb21waWxlcihvcHRpb25zKTtcbiAgICBsZXQgb3Bjb2RlcyA9IGNvbXBpbGVyLnByb2Nlc3ModGVtcGxhdGVWaXNpdG9yLmFjdGlvbnMpO1xuICAgIHJldHVybiBKYXZhU2NyaXB0Q29tcGlsZXIucHJvY2VzczxUPihvcGNvZGVzLCBhc3RbJ3N5bWJvbHMnXSwgb3B0aW9ucy5tZXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgb3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD47XG4gIHByaXZhdGUgdGVtcGxhdGVJZCA9IDA7XG4gIHByaXZhdGUgdGVtcGxhdGVJZHM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgc3ltYm9sU3RhY2sgPSBuZXcgU3RhY2s8U3ltYm9sVGFibGU+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBpbmNsdWRlTWV0YSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIGdldCBzeW1ib2xzKCk6IFN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xTdGFjay5jdXJyZW50O1xuICB9XG5cbiAgcHJvY2VzcyhhY3Rpb25zOiBBY3Rpb25bXSk6IEFjdGlvbltdIHtcbiAgICBhY3Rpb25zLmZvckVhY2goKFtuYW1lLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW25hbWVdKSB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCAke25hbWV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTsgfVxuICAgICAgKHRoaXNbbmFtZV0gYXMgYW55KSguLi5hcmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5vcGNvZGVzO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKHByb2dyYW06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICB0aGlzLm9wY29kZSgnc3RhcnRQcm9ncmFtJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2VuZFByb2dyYW0nLCBudWxsKTtcbiAgfVxuXG4gIHN0YXJ0QmxvY2socHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMudGVtcGxhdGVJZCsrO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMudGVtcGxhdGVJZHMucHVzaCh0aGlzLnRlbXBsYXRlSWQgLSAxKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kQmxvY2snLCBudWxsKTtcbiAgfVxuXG4gIHRleHQoW2FjdGlvbl06IFtBU1QuVGV4dE5vZGVdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3RleHQnLCBhY3Rpb24sIGFjdGlvbi5jaGFycyk7XG4gIH1cblxuICBjb21tZW50KFthY3Rpb25dOiBbQVNULkNvbW1lbnRTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2NvbW1lbnQnLCBhY3Rpb24sIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcblxuICAgIHRoaXMub3Bjb2RlKCdvcGVuRWxlbWVudCcsIGFjdGlvbiwgYWN0aW9uKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZShbYWN0aW9uLmF0dHJpYnV0ZXNbaV1dKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5tb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubW9kaWZpZXIoW2FjdGlvbi5tb2RpZmllcnNbaV1dKTtcbiAgICB9XG4gICAgdGhpcy5vcGNvZGUoJ2ZsdXNoRWxlbWVudCcsIG51bGwpO1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChhY3Rpb25bJ3N5bWJvbHMnXSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoW2FjdGlvbl06IFtBU1QuRWxlbWVudE5vZGVdKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnY2xvc2VFbGVtZW50JywgbnVsbCwgYWN0aW9uKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZShbYWN0aW9uXTogW0FTVC5BdHRyTm9kZV0pIHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gYWN0aW9uO1xuXG4gICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG5cbiAgICBsZXQgaXNTdGF0aWMgPSB0aGlzLnByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgLy8gQXJndW1lbnRzXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlzVHJ1c3RpbmcgPSBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVzdGluZykge1xuICAgICAgICB0aGlzLm9wY29kZSgndHJ1c3RpbmdBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vZGlmaWVyKFthY3Rpb25dOiBbQVNULkVsZW1lbnRNb2RpZmllclN0YXRlbWVudF0pIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoYWN0aW9uLnBhdGgsIGFjdGlvbi5sb2MsICdtb2RpZmllcicpO1xuXG4gICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG5cbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICB0aGlzLm9wY29kZSgnbW9kaWZpZXInLCBhY3Rpb24sIHBhcnRzWzBdKTtcbiAgfVxuXG4gIG11c3RhY2hlKFthY3Rpb25dOiBbQVNULk11c3RhY2hlU3RhdGVtZW50XSkge1xuICAgIGxldCB7IHBhdGggfSA9IGFjdGlvbjtcblxuICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNZaWVsZChwYXRoKSkge1xuICAgICAgbGV0IHRvID0gYXNzZXJ0VmFsaWRZaWVsZChhY3Rpb24pO1xuICAgICAgdGhpcy55aWVsZCh0bywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVidWdnZXIocGF0aCkpIHtcbiAgICAgIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShhY3Rpb24pO1xuICAgICAgdGhpcy5kZWJ1Z2dlcignZGVidWdnZXInLCBhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICB9XG4gIH1cblxuICBibG9jayhbYWN0aW9uLyosIGluZGV4LCBjb3VudCovXTogW0FTVC5CbG9ja1N0YXRlbWVudF0pIHtcbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICBsZXQgdGVtcGxhdGVJZCA9IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0c1swXSwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG5cbiAgYXJnKFtwYXRoXTogW0FTVC5QYXRoRXhwcmVzc2lvbl0pIHtcbiAgICBsZXQgeyBwYXJ0czogW2hlYWQsIC4uLnJlc3RdIH0gPSBwYXRoO1xuICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChoZWFkKTtcbiAgICB0aGlzLm9wY29kZSgnZ2V0JywgcGF0aCwgc3ltYm9sLCByZXN0KTtcbiAgfVxuXG4gIG11c3RhY2hlRXhwcmVzc2lvbihleHByOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBleHByLCBwYXRoLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzQnVpbHRJbkhlbHBlcihwYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIgYXMgQVNULkNhbGwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgfSBlbHNlIGlmIChpc0hlbHBlckludm9jYXRpb24oZXhwcikpIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICB9IGVsc2UgaWYgKHBhdGgudGhpcykge1xuICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgdGhpcy5zeW1ib2xzLmdldChoZWFkKSwgcGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgndW5rbm93bicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbWF5YmVMb2NhbCcsIGV4cHIsIHBhdGgucGFydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBTeW50YXhcblxuICB5aWVsZCh0bzogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgneWllbGQnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKHRvKSk7XG4gIH1cblxuICBkZWJ1Z2dlcihfbmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMub3Bjb2RlKCdkZWJ1Z2dlcicsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2hhc0Jsb2NrJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhuYW1lKSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2tQYXJhbXMnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIHBhcnRpYWwoX3BhcmFtczogQVNULkV4cHJlc3Npb25bXSwgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoJ3BhcnRpYWwnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5nZXRFdmFsSW5mbygpKTtcbiAgfVxuXG4gIGJ1aWx0SW5IZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgIGlmIChpc0hhc0Jsb2NrKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9jayhuYW1lLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzSGFzQmxvY2tQYXJhbXMocGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrUGFyYW1zKG5hbWUsIGV4cHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9ucywgaW52b2tlZCByZWN1cnNpdmVseSBmcm9tIHByZXBhcmVQYXJhbXMgYW5kIHByZXBhcmVIYXNoXG5cbiAgU3ViRXhwcmVzc2lvbihleHByOiBBU1QuU3ViRXhwcmVzc2lvbikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwci5wYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgZXhwci5wYXRoLnBhcnRzWzBdKTtcbiAgICB9XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbihleHByOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwci5kYXRhKSB7XG4gICAgICB0aGlzLmFyZyhbZXhwcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBzeW1ib2xzIH0gPSB0aGlzO1xuICAgICAgbGV0IFtoZWFkXSA9IGV4cHIucGFydHM7XG5cbiAgICAgIGlmIChleHByLnRoaXMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfSBlbHNlICBpZiAoc3ltYm9scy5oYXMoaGVhZCkpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIHN5bWJvbHMuZ2V0KGhlYWQpLCBleHByLnBhcnRzLnNsaWNlKDEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBleHByLnBhcnRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBTdHJpbmdMaXRlcmFsKGFjdGlvbjogQVNULlN0cmluZ0xpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBCb29sZWFuTGl0ZXJhbChhY3Rpb246IEFTVC5Cb29sZWFuTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bWJlckxpdGVyYWwoYWN0aW9uOiBBU1QuTnVtYmVyTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bGxMaXRlcmFsKGFjdGlvbjogQVNULk51bGxMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgVW5kZWZpbmVkTGl0ZXJhbChhY3Rpb246IEFTVC5VbmRlZmluZWRMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIG9wY29kZShuYW1lOiBhbnksIGFjdGlvbjogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGxldCBvcGNvZGUgPSBbbmFtZSwgLi4uYXJnc107XG4gICAgaWYgKHRoaXMuaW5jbHVkZU1ldGEgJiYgYWN0aW9uKSB7XG4gICAgICBvcGNvZGUucHVzaCh0aGlzLm1ldGEoYWN0aW9uKSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgfVxuXG4gIHByZXBhcmVIZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoZXhwci5wYXRoLCBleHByLmxvYywgJ2hlbHBlcicpO1xuXG4gICAgbGV0IHsgcGFyYW1zLCBoYXNoIH0gPSBleHByO1xuXG4gICAgdGhpcy5wcmVwYXJlSGFzaChoYXNoKTtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIHByZXBhcmVQYXJhbXMocGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdKSB7XG4gICAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBwYXJhbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBwYXJhbSA9IHBhcmFtc1tpXTtcblxuICAgICAgKHRoaXNbcGFyYW0udHlwZV0gYXMgYW55KShwYXJhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcmFtcy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUhhc2goaGFzaDogQVNULkhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gICAgaWYgKCFwYWlycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhaXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgeyBrZXksIHZhbHVlIH0gPSBwYWlyc1tpXTtcblxuICAgICAgKHRoaXNbdmFsdWUudHlwZV0gYXMgYW55KSh2YWx1ZSk7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGtleSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVPYmplY3QnLCBudWxsLCBwYWlycy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlOiBBU1QuQXR0ck5vZGVbJ3ZhbHVlJ10pIHtcbiAgICAvLyByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgaWYgdGhlIHZhbHVlIGlzIHN0YXRpY1xuXG4gICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgdmFsdWUsIHZhbHVlLmNoYXJzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdNdXN0YWNoZVN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3ZhbHVlXSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMucHJlcGFyZUNvbmNhdFBhcnRzKHZhbHVlLnBhcnRzKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2NvbmNhdCcsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVDb25jYXRQYXJ0cyhwYXJ0czogQVNULkNvbmNhdFN0YXRlbWVudFsncGFydHMnXSkge1xuICAgIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgaWYgKHBhcnQudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFtwYXJ0XSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIHBhcnQuY2hhcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJ0cy5sZW5ndGgpO1xuICB9XG5cbiAgYXR0cmlidXRlTXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgfVxuXG4gIG1ldGEobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgbGV0IGxvYyA9IG5vZGUubG9jO1xuICAgIGlmICghbG9jKSB7IHJldHVybiBbXTsgfVxuXG4gICAgbGV0IHsgc291cmNlLCBzdGFydCwgZW5kIH0gPSBsb2M7XG4gICAgcmV0dXJuIFsgJ2xvYycsIFtzb3VyY2UgfHwgbnVsbCwgW3N0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbl0sIFtlbmQubGluZSwgZW5kLmNvbHVtbl1dIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWxwZXJJbnZvY2F0aW9uKG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBtdXN0YWNoZSBpcyBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgJiB7IHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiB9IHtcbiAgcmV0dXJuIChtdXN0YWNoZS5wYXJhbXMgJiYgbXVzdGFjaGUucGFyYW1zLmxlbmd0aCA+IDApIHx8XG4gICAgKG11c3RhY2hlLmhhc2ggJiYgbXVzdGFjaGUuaGFzaC5wYWlycy5sZW5ndGggPiAwKTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVQYXRoKHsgcGFydHMgfTogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDE7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWwoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24sIHN5bWJvbHM6IFN5bWJvbFRhYmxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzeW1ib2xzICYmIC8qIHBhcnRzLmxlbmd0aCAmJiAqLyBzeW1ib2xzLmhhcyhwYXJ0c1swXSk7XG59XG5cbmZ1bmN0aW9uIGlzWWllbGQocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAneWllbGQnO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRpYWwocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAncGFydGlhbCc7XG59XG5cbmZ1bmN0aW9uIGlzRGVidWdnZXIocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnZGVidWdnZXInO1xufVxuXG5mdW5jdGlvbiBpc0hhc0Jsb2NrKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jayc7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2tQYXJhbXMocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrLXBhcmFtcyc7XG59XG5cbmZ1bmN0aW9uIGlzQnVpbHRJbkhlbHBlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIGlzSGFzQmxvY2socGF0aCkgfHwgaXNIYXNCbG9ja1BhcmFtcyhwYXRoKTtcbn1cblxuZnVuY3Rpb24gaXNBcmcocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXBhdGhbJ2RhdGEnXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNTaW1wbGVQYXRoKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiwgbG9jOiBBU1QuU291cmNlTG9jYXRpb24sIGNvbnRleHQ6IHN0cmluZykge1xuICBpZiAoIWlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgXFxgJHtwYXRoLm9yaWdpbmFsfVxcYCBpcyBub3QgYSB2YWxpZCBuYW1lIGZvciBhICR7Y29udGV4dH0gb24gbGluZSAke2xvYy5zdGFydC5saW5lfS5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFlpZWxkKHsgaGFzaCB9OiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBzdHJpbmcge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gIGlmICgocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLmtleSAhPT0gJ3RvJykgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeWllbGQgb25seSB0YWtlcyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudDogJ3RvJ2ApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWVgKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAocGFpcnNbMF0udmFsdWUgYXMgQVNULlN0cmluZ0xpdGVyYWwpLnZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbCh7IHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgbG9jIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkgLyogOiBleHByICovIHtcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXJ0aWFsIGZvdW5kIHdpdGggbm8gYXJndW1lbnRzLiBZb3UgbXVzdCBzcGVjaWZ5IGEgdGVtcGxhdGUgbmFtZS4gKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcnRpYWwgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9IGVsc2UgaWYgKCFlc2NhcGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB7e3twYXJ0aWFsIC4uLn19fSBpcyBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIHt7cGFydGlhbCAuLi59fSBpbnN0ZWFkIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKHR5cGU6IHN0cmluZywgeyBwYXJhbXMsIGhhc2gsIGxvYyB9OiBBU1QuQ2FsbCk6IHN0cmluZyB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfSBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IHBhcmFtID0gcGFyYW1zWzBdO1xuICAgIGlmIChwYXJhbS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgIHJldHVybiBwYXJhbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gb25seSB0YWtlcyBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZSh7IHBhcmFtcywgaGFzaCB9OiB7IHBhcmFtczogQVNULkV4cHJlc3Npb25bXSwgaGFzaDogQVNULkhhc2ggfSkge1xuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHNgKTtcbiAgfVxufVxuIl19 |
@@ -1,2 +0,2 @@ | ||
import { dict, unreachable, expect } from '@glimmer/util'; | ||
import { dict } from '@glimmer/util'; | ||
export class SymbolTable { | ||
@@ -23,3 +23,2 @@ static top() { | ||
get(_name) { | ||
throw unreachable(); | ||
} | ||
@@ -278,3 +277,3 @@ getLocalsMap() { | ||
get currentFrame() { | ||
return expect(this.getCurrentFrame(), "Expected a current frame"); | ||
return this.getCurrentFrame(); | ||
} | ||
@@ -311,2 +310,2 @@ getCurrentFrame() { | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFnQixJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RSxNQUFNO0lBQ0osTUFBTSxDQUFDLEdBQUc7UUFDUixNQUFNLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFZRCxLQUFLLENBQUMsTUFBZ0I7UUFDcEIsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGO0FBRUQsTUFBTSx5QkFBMEIsU0FBUSxXQUFXO0lBQW5EOztRQUNTLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFFdEIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFVBQUssR0FBRyxJQUFJLEVBQVUsQ0FBQztRQUN2QixXQUFNLEdBQUcsSUFBSSxFQUFVLENBQUM7SUEwQ2xDLENBQUM7SUF4Q0MsR0FBRyxDQUFDLEtBQWE7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELEdBQUcsQ0FBQyxLQUFhO1FBQ2YsTUFBTSxXQUFXLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVk7UUFDeEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixFQUFFLENB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QUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sUUFBUTtRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUVELGdFQUFnRTtBQUNoRSxtREFBbUQ7QUFDbkQsb0JBQW9CLEtBQWlCLEVBQUUsT0FBdUM7SUFDNUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFZixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0QyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzVELFFBQVEsQ0FBQztRQUNYLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLEtBQUssRUFBRSxDQUFDO1FBQ1YsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQ29yZSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IERpY3QsIE9wdGlvbiwgZGljdCwgdW5yZWFjaGFibGUsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3ltYm9sVGFibGUge1xuICBzdGF0aWMgdG9wKCk6IFByb2dyYW1TeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9ncmFtU3ltYm9sVGFibGUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj47XG4gIGFic3RyYWN0IGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm87XG5cbiAgYWJzdHJhY3QgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgY2hpbGQobG9jYWxzOiBzdHJpbmdbXSk6IEJsb2NrU3ltYm9sVGFibGUge1xuICAgIGxldCBzeW1ib2xzID0gbG9jYWxzLm1hcChuYW1lID0+IHRoaXMuYWxsb2NhdGUobmFtZSkpO1xuICAgIHJldHVybiBuZXcgQmxvY2tTeW1ib2xUYWJsZSh0aGlzLCBsb2NhbHMsIHN5bWJvbHMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc2l6ZSA9IDE7XG4gIHByaXZhdGUgbmFtZWQgPSBkaWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBkaWN0PG51bWJlcj4oKTtcblxuICBoYXMoX25hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldChfbmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IHVucmVhY2hhYmxlKCk7XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXTtcblxuICAgIGlmICghbmFtZWQpIHtcbiAgICAgIG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYEAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWVkO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdO1xuXG4gICAgaWYgKCFibG9jaykge1xuICAgICAgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYCYke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0aGlzLnN5bWJvbHMucHVzaChpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gdGhpcy5zaXplKys7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsb2NrU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTeW1ib2xUYWJsZSwgcHVibGljIHN5bWJvbHM6IHN0cmluZ1tdLCBwdWJsaWMgc2xvdHM6IG51bWJlcltdKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpICE9PSAtMSkgfHwgdGhpcy5wYXJlbnQuaGFzKG5hbWUpO1xuICB9XG5cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IHNsb3QgPSB0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKTtcbiAgICByZXR1cm4gc2xvdCA9PT0gLTEgPyB0aGlzLnBhcmVudC5nZXQobmFtZSkgOiB0aGlzLnNsb3RzW3Nsb3RdO1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgbGV0IGRpY3QgPSB0aGlzLnBhcmVudC5nZXRMb2NhbHNNYXAoKTtcbiAgICB0aGlzLnN5bWJvbHMuZm9yRWFjaChzeW1ib2wgPT4gZGljdFtzeW1ib2xdID0gdGhpcy5nZXQoc3ltYm9sKSk7XG4gICAgcmV0dXJuIGRpY3Q7XG4gIH1cblxuICBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvIHtcbiAgICBsZXQgbG9jYWxzID0gdGhpcy5nZXRMb2NhbHNNYXAoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobG9jYWxzKS5tYXAoc3ltYm9sID0+IGxvY2Fsc1tzeW1ib2xdKTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVOYW1lZChuYW1lKTtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVCbG9jayhuYW1lKTtcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlKGlkZW50aWZpZXIpO1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgaW4gYW4gQVNUIGFuZCBvdXRwdXRzIGEgbGlzdCBvZiBhY3Rpb25zIHRvIGJlIGNvbnN1bWVkXG4gKiBieSBhIGNvbXBpbGVyLiBGb3IgZXhhbXBsZSwgdGhlIHRlbXBsYXRlXG4gKlxuICogICAgIGZvb3t7YmFyfX08ZGl2PmJhejwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDNdXSxcbiAqICAgICAgWydtdXN0YWNoZScsIFttdXN0YWNoZU5vZGUsIDEsIDNdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgMywgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDNdLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGlzIHZpc2l0b3Igd2Fsa3MgdGhlIEFTVCBkZXB0aCBmaXJzdCBhbmQgYmFja3dhcmRzLiBBc1xuICogYSByZXN1bHQgdGhlIGJvdHRvbS1tb3N0IGNoaWxkIHRlbXBsYXRlIHdpbGwgYXBwZWFyIGF0IHRoZVxuICogdG9wIG9mIHRoZSBhY3Rpb25zIGxpc3Qgd2hlcmVhcyB0aGUgcm9vdCB0ZW1wbGF0ZSB3aWxsIGFwcGVhclxuICogYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdC4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAgIDxkaXY+e3sjaWZ9fWZvb3t7ZWxzZX19YmFyPGI+PC9iPnt7L2lmfX08L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAyLCAwXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDIsIDBdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDJdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDJdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMSwgMV1dLFxuICogICAgICBbJ2Jsb2NrJywgW2Jsb2NrTm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBpcyBtYWludGFpbmVkIGJ5IGEgc3RhY2sgb2YgZnJhbWVzLlxuICogV2hlbmV2ZXIgYSBub2RlIHdpdGggY2hpbGRyZW4gaXMgZW50ZXJlZCAoZWl0aGVyIGEgUHJvZ3JhbU5vZGVcbiAqIG9yIGFuIEVsZW1lbnROb2RlKSBhIGZyYW1lIGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFjay4gVGhlIGZyYW1lXG4gKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBvZiB0aGF0XG4gKiBub2RlLiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgIC0gaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hpbGQgbm9kZSBiZWluZyB2aXNpdGVkXG4gKiAgIC0gdGhlIG51bWJlciBvZiBtdXN0YWNoZXMgY29udGFpbmVkIHdpdGhpbiBpdHMgY2hpbGQgbm9kZXNcbiAqICAgLSB0aGUgbGlzdCBvZiBhY3Rpb25zIGdlbmVyYXRlZCBieSBpdHMgY2hpbGQgbm9kZXNcbiAqL1xuXG5jbGFzcyBGcmFtZSB7XG4gIHB1YmxpYyBwYXJlbnROb2RlOiBPcHRpb248T2JqZWN0PiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZHJlbjogT3B0aW9uPEFTVC5Ob2RlW10+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkSW5kZXg6IE9wdGlvbjxudW1iZXI+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkQ291bnQ6IE9wdGlvbjxudW1iZXI+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkVGVtcGxhdGVDb3VudCA9IDA7XG4gIHB1YmxpYyBtdXN0YWNoZUNvdW50ID0gMDtcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIHB1YmxpYyBibGFua0NoaWxkVGV4dE5vZGVzOiBPcHRpb248bnVtYmVyW10+ID0gbnVsbDtcbiAgcHVibGljIHN5bWJvbHM6IE9wdGlvbjxTeW1ib2xUYWJsZT4gPSBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEFjdGlvbiB7XG4gIGV4cG9ydCB0eXBlIFN0YXJ0UHJvZ3JhbSA9IFsnc3RhcnRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIEVuZFByb2dyYW0gPSBbJ2VuZFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBTdGFydEJsb2NrID0gWydzdGFydEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIEVuZEJsb2NrID0gWydlbmRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIEJsb2NrID0gWydibG9jaycsIFtBU1QuQmxvY2tTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE11c3RhY2hlID0gWydtdXN0YWNoZScsIFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgfCBBU1QuUGFydGlhbFN0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgT3BlbkVsZW1lbnQgPSBbJ29wZW5FbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgQ2xvc2VFbGVtZW50ID0gWydjbG9zZUVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBUZXh0ID0gWyd0ZXh0JywgW0FTVC5UZXh0Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQ29tbWVudCA9IFsnY29tbWVudCcsIFtBU1QuQ29tbWVudFN0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcblxuICBleHBvcnQgdHlwZSBBY3Rpb24gPVxuICAgICAgU3RhcnRQcm9ncmFtXG4gICAgfCBFbmRQcm9ncmFtXG4gICAgfCBTdGFydEJsb2NrXG4gICAgfCBFbmRCbG9ja1xuICAgIHwgQmxvY2tcbiAgICB8IE11c3RhY2hlXG4gICAgfCBPcGVuRWxlbWVudFxuICAgIHwgQ2xvc2VFbGVtZW50XG4gICAgfCBUZXh0XG4gICAgfCBDb21tZW50XG4gICAgO1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb24gPSBBY3Rpb24uQWN0aW9uO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZVZpc2l0b3Ige1xuICBwcml2YXRlIGZyYW1lU3RhY2s6IEZyYW1lW10gPSBbXTtcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIHByaXZhdGUgcHJvZ3JhbURlcHRoID0gLTE7XG5cbiAgdmlzaXQobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgdGhpc1tub2RlLnR5cGVdKG5vZGUpO1xuICB9XG5cbiAgLy8gVHJhdmVyc2FsIG1ldGhvZHNcblxuICBQcm9ncmFtKHByb2dyYW06IEFTVC5Qcm9ncmFtKSB7XG4gICAgdGhpcy5wcm9ncmFtRGVwdGgrKztcblxuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gICAgbGV0IHByb2dyYW1GcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBpZiAoIXBhcmVudEZyYW1lKSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBTeW1ib2xUYWJsZS50b3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG4gICAgfVxuXG4gICAgbGV0IHN0YXJ0VHlwZSwgZW5kVHlwZTtcblxuICAgIGlmICh0aGlzLnByb2dyYW1EZXB0aCA9PT0gMCkge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0UHJvZ3JhbSc7XG4gICAgICBlbmRUeXBlID0gJ2VuZFByb2dyYW0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRCbG9jayc7XG4gICAgICBlbmRUeXBlID0gJ2VuZEJsb2NrJztcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUucGFyZW50Tm9kZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkcmVuID0gcHJvZ3JhbS5ib2R5O1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZENvdW50ID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aDtcbiAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW2VuZFR5cGUsIFtwcm9ncmFtLCB0aGlzLnByb2dyYW1EZXB0aF1dIGFzIEFjdGlvbik7XG4gICAgcHJvZ3JhbUZyYW1lLnN5bWJvbHMgPSBwcm9ncmFtWydzeW1ib2xzJ107XG5cbiAgICBmb3IgKGxldCBpID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBwcm9ncmFtRnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KHByb2dyYW0uYm9keVtpXSk7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbc3RhcnRUeXBlLCBbXG4gICAgICBwcm9ncmFtLCBwcm9ncmFtRnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50LFxuICAgICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXG4gICAgXV0gYXMgQWN0aW9uKTtcbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICB0aGlzLnByb2dyYW1EZXB0aC0tO1xuXG4gICAgLy8gUHVzaCB0aGUgY29tcGxldGVkIHRlbXBsYXRlIGludG8gdGhlIGdsb2JhbCBhY3Rpb25zIGxpc3RcbiAgICBpZiAocGFyZW50RnJhbWUpIHsgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50Kys7IH1cbiAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5wcm9ncmFtRnJhbWUuYWN0aW9ucy5yZXZlcnNlKCkpO1xuICB9XG5cbiAgRWxlbWVudE5vZGUoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgbGV0IGVsZW1lbnRGcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBlbGVtZW50RnJhbWUucGFyZW50Tm9kZSA9IGVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRDb3VudCA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ICs9IGVsZW1lbnQubW9kaWZpZXJzLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIGVsZW1lbnRGcmFtZS5zeW1ib2xzID0gZWxlbWVudFsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQoZWxlbWVudC5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYWN0aW9uQXJnczogW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkSW5kZXghLFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRDb3VudCFcbiAgICBdO1xuXG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChbJ2Nsb3NlRWxlbWVudCcsIGFjdGlvbkFyZ3NdKTtcblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5hdHRyaWJ1dGVzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZWxlbWVudEZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmNoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgb3BlbiA9IFsnb3BlbkVsZW1lbnQnLCBbLi4uYWN0aW9uQXJncywgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQsIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKV1dIGFzIEFjdGlvbi5PcGVuRWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKG9wZW4pO1xuXG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBlbGVtZW50J3MgZnJhbWUgc3RhdGUgdG8gdGhlIHBhcmVudCBmcmFtZVxuICAgIGlmIChlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCA+IDApIHsgcGFyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrOyB9XG4gICAgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50ICs9IGVsZW1lbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQ7XG4gICAgcGFyZW50RnJhbWUuYWN0aW9ucy5wdXNoKC4uLmVsZW1lbnRGcmFtZS5hY3Rpb25zKTtcbiAgfVxuXG4gIEF0dHJOb2RlKGF0dHI6IEFTVC5BdHRyTm9kZSkge1xuICAgIGlmIChhdHRyLnZhbHVlLnR5cGUgIT09ICdUZXh0Tm9kZScpIHtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICB9XG4gIH07XG5cbiAgVGV4dE5vZGUodGV4dDogQVNULlRleHROb2RlKSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgaWYgKHRleHQuY2hhcnMgPT09ICcnKSB7XG4gICAgICBmcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzIS5wdXNoKGRvbUluZGV4T2YoZnJhbWUuY2hpbGRyZW4hLCB0ZXh0KSk7XG4gICAgfVxuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ3RleHQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQmxvY2tTdGF0ZW1lbnQobm9kZTogQVNULkJsb2NrU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG5cbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnYmxvY2snLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG5cbiAgICBpZiAobm9kZS5pbnZlcnNlKSB7IHRoaXMudmlzaXQobm9kZS5pbnZlcnNlKTsgfVxuICAgIGlmIChub2RlLnByb2dyYW0pIHsgdGhpcy52aXNpdChub2RlLnByb2dyYW0pOyB9XG4gIH07XG5cbiAgUGFydGlhbFN0YXRlbWVudChub2RlOiBBU1QuUGFydGlhbFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBDb21tZW50U3RhdGVtZW50KHRleHQ6IEFTVC5Db21tZW50U3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnY29tbWVudCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQoKSB7XG4gICAgLy8gSW50ZW50aW9uYWwgZW1wdHk6IEhhbmRsZWJhcnMgY29tbWVudHMgc2hvdWxkIG5vdCBhZmZlY3Qgb3V0cHV0LlxuICB9O1xuXG4gIE11c3RhY2hlU3RhdGVtZW50KG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbXVzdGFjaGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIC8vIEZyYW1lIGhlbHBlcnNcblxuICBwcml2YXRlIGdldCBjdXJyZW50RnJhbWUoKTogRnJhbWUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5nZXRDdXJyZW50RnJhbWUoKSwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgZnJhbWVcIik7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGcmFtZSgpOiBPcHRpb248RnJhbWU+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEZyYW1lKCkge1xuICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBwcml2YXRlIHBvcEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzOiBBU1QuTm9kZVtdLCBkb21Ob2RlOiBBU1QuVGV4dE5vZGUgfCBBU1QuRWxlbWVudE5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFnQixJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsTUFBTTtJQUNKLE1BQU0sQ0FBQyxHQUFHO1FBQ1IsTUFBTSxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBWUQsS0FBSyxDQUFDLE1BQWdCO1FBQ3BCLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDRjtBQUVELE1BQU0seUJBQTBCLFNBQVEsV0FBVztJQUFuRDs7UUFDUyxZQUFPLEdBQWEsRUFBRSxDQUFDO1FBRXRCLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxVQUFLLEdBQUcsSUFBSSxFQUFVLENBQUM7UUFDdkIsV0FBTSxHQUFHLElBQUksRUFBVSxDQUFDO0lBeUNsQyxDQUFDO0lBdkNDLEdBQUcsQ0FBQyxLQUFhO1FBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxHQUFHLENBQUMsS0FBYTtJQUNqQixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVk7UUFDeEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxLQUFLLEdB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QztJQUVPLFNBQVM7UUFDZixJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sUUFBUTtRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUVELGdFQUFnRTtBQUNoRSxtREFBbUQ7QUFDbkQsb0JBQW9CLEtBQWlCLEVBQUUsT0FBdUM7SUFDNUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFZixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0QyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzVELFFBQVEsQ0FBQztRQUNYLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLEtBQUssRUFBRSxDQUFDO1FBQ1YsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQ29yZSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IERpY3QsIE9wdGlvbiwgZGljdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3ltYm9sVGFibGUge1xuICBzdGF0aWMgdG9wKCk6IFByb2dyYW1TeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9ncmFtU3ltYm9sVGFibGUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj47XG4gIGFic3RyYWN0IGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm87XG5cbiAgYWJzdHJhY3QgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgY2hpbGQobG9jYWxzOiBzdHJpbmdbXSk6IEJsb2NrU3ltYm9sVGFibGUge1xuICAgIGxldCBzeW1ib2xzID0gbG9jYWxzLm1hcChuYW1lID0+IHRoaXMuYWxsb2NhdGUobmFtZSkpO1xuICAgIHJldHVybiBuZXcgQmxvY2tTeW1ib2xUYWJsZSh0aGlzLCBsb2NhbHMsIHN5bWJvbHMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc2l6ZSA9IDE7XG4gIHByaXZhdGUgbmFtZWQgPSBkaWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBkaWN0PG51bWJlcj4oKTtcblxuICBoYXMoX25hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldChfbmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV07XG5cbiAgICBpZiAoIW5hbWVkKSB7XG4gICAgICBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGBAJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBuYW1lZDtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXTtcblxuICAgIGlmICghYmxvY2spIHtcbiAgICAgIGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGAmJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBibG9jaztcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdGhpcy5zeW1ib2xzLnB1c2goaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSsrO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbG9ja1N5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU3ltYm9sVGFibGUsIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSwgcHVibGljIHNsb3RzOiBudW1iZXJbXSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHx8IHRoaXMucGFyZW50LmhhcyhuYW1lKTtcbiAgfVxuXG4gIGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBzbG90ID0gdGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSk7XG4gICAgcmV0dXJuIHNsb3QgPT09IC0xID8gdGhpcy5wYXJlbnQuZ2V0KG5hbWUpIDogdGhpcy5zbG90c1tzbG90XTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIGxldCBkaWN0ID0gdGhpcy5wYXJlbnQuZ2V0TG9jYWxzTWFwKCk7XG4gICAgdGhpcy5zeW1ib2xzLmZvckVhY2goc3ltYm9sID0+IGRpY3Rbc3ltYm9sXSA9IHRoaXMuZ2V0KHN5bWJvbCkpO1xuICAgIHJldHVybiBkaWN0O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgbGV0IGxvY2FscyA9IHRoaXMuZ2V0TG9jYWxzTWFwKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxvY2FscykubWFwKHN5bWJvbCA9PiBsb2NhbHNbc3ltYm9sXSk7XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlTmFtZWQobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlQmxvY2sobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZShpZGVudGlmaWVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGluIGFuIEFTVCBhbmQgb3V0cHV0cyBhIGxpc3Qgb2YgYWN0aW9ucyB0byBiZSBjb25zdW1lZFxuICogYnkgYSBjb21waWxlci4gRm9yIGV4YW1wbGUsIHRoZSB0ZW1wbGF0ZVxuICpcbiAqICAgICBmb297e2Jhcn19PGRpdj5iYXo8L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAzXV0sXG4gKiAgICAgIFsnbXVzdGFjaGUnLCBbbXVzdGFjaGVOb2RlLCAxLCAzXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDMsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhpcyB2aXNpdG9yIHdhbGtzIHRoZSBBU1QgZGVwdGggZmlyc3QgYW5kIGJhY2t3YXJkcy4gQXNcbiAqIGEgcmVzdWx0IHRoZSBib3R0b20tbW9zdCBjaGlsZCB0ZW1wbGF0ZSB3aWxsIGFwcGVhciBhdCB0aGVcbiAqIHRvcCBvZiB0aGUgYWN0aW9ucyBsaXN0IHdoZXJlYXMgdGhlIHJvb3QgdGVtcGxhdGUgd2lsbCBhcHBlYXJcbiAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QuIEZvciBleGFtcGxlLFxuICpcbiAqICAgICA8ZGl2Pnt7I2lmfX1mb297e2Vsc2V9fWJhcjxiPjwvYj57ey9pZn19PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMiwgMF1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyLCAwXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAyXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDEsIDFdXSxcbiAqICAgICAgWydibG9jaycsIFtibG9ja05vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgaXMgbWFpbnRhaW5lZCBieSBhIHN0YWNrIG9mIGZyYW1lcy5cbiAqIFdoZW5ldmVyIGEgbm9kZSB3aXRoIGNoaWxkcmVuIGlzIGVudGVyZWQgKGVpdGhlciBhIFByb2dyYW1Ob2RlXG4gKiBvciBhbiBFbGVtZW50Tm9kZSkgYSBmcmFtZSBpcyBwdXNoZWQgb250byB0aGUgc3RhY2suIFRoZSBmcmFtZVxuICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgb2YgdGhhdFxuICogbm9kZS4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAtIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoaWxkIG5vZGUgYmVpbmcgdmlzaXRlZFxuICogICAtIHRoZSBudW1iZXIgb2YgbXVzdGFjaGVzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGNoaWxkIG5vZGVzXG4gKiAgIC0gdGhlIGxpc3Qgb2YgYWN0aW9ucyBnZW5lcmF0ZWQgYnkgaXRzIGNoaWxkIG5vZGVzXG4gKi9cblxuY2xhc3MgRnJhbWUge1xuICBwdWJsaWMgcGFyZW50Tm9kZTogT3B0aW9uPE9iamVjdD4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRyZW46IE9wdGlvbjxBU1QuTm9kZVtdPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZEluZGV4OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZENvdW50OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZFRlbXBsYXRlQ291bnQgPSAwO1xuICBwdWJsaWMgbXVzdGFjaGVDb3VudCA9IDA7XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgYmxhbmtDaGlsZFRleHROb2RlczogT3B0aW9uPG51bWJlcltdPiA9IG51bGw7XG4gIHB1YmxpYyBzeW1ib2xzOiBPcHRpb248U3ltYm9sVGFibGU+ID0gbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb24ge1xuICBleHBvcnQgdHlwZSBTdGFydFByb2dyYW0gPSBbJ3N0YXJ0UHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRQcm9ncmFtID0gWydlbmRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgU3RhcnRCbG9jayA9IFsnc3RhcnRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRCbG9jayA9IFsnZW5kQmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBCbG9jayA9IFsnYmxvY2snLCBbQVNULkJsb2NrU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBNdXN0YWNoZSA9IFsnbXVzdGFjaGUnLCBbQVNULk11c3RhY2hlU3RhdGVtZW50IHwgQVNULlBhcnRpYWxTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE9wZW5FbGVtZW50ID0gWydvcGVuRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIENsb3NlRWxlbWVudCA9IFsnY2xvc2VFbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgVGV4dCA9IFsndGV4dCcsIFtBU1QuVGV4dE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIENvbW1lbnQgPSBbJ2NvbW1lbnQnLCBbQVNULkNvbW1lbnRTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uID1cbiAgICAgIFN0YXJ0UHJvZ3JhbVxuICAgIHwgRW5kUHJvZ3JhbVxuICAgIHwgU3RhcnRCbG9ja1xuICAgIHwgRW5kQmxvY2tcbiAgICB8IEJsb2NrXG4gICAgfCBNdXN0YWNoZVxuICAgIHwgT3BlbkVsZW1lbnRcbiAgICB8IENsb3NlRWxlbWVudFxuICAgIHwgVGV4dFxuICAgIHwgQ29tbWVudFxuICAgIDtcbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uID0gQWN0aW9uLkFjdGlvbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVWaXNpdG9yIHtcbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBGcmFtZVtdID0gW107XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIHByb2dyYW1EZXB0aCA9IC0xO1xuXG4gIHZpc2l0KG5vZGU6IEFTVC5CYXNlTm9kZSkge1xuICAgIHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgfVxuXG4gIC8vIFRyYXZlcnNhbCBtZXRob2RzXG5cbiAgUHJvZ3JhbShwcm9ncmFtOiBBU1QuUHJvZ3JhbSkge1xuICAgIHRoaXMucHJvZ3JhbURlcHRoKys7XG5cbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmdldEN1cnJlbnRGcmFtZSgpO1xuICAgIGxldCBwcm9ncmFtRnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgaWYgKCFwYXJlbnRGcmFtZSkge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gU3ltYm9sVGFibGUudG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKHByb2dyYW0uYmxvY2tQYXJhbXMpO1xuICAgIH1cblxuICAgIGxldCBzdGFydFR5cGUsIGVuZFR5cGU7XG5cbiAgICBpZiAodGhpcy5wcm9ncmFtRGVwdGggPT09IDApIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydFByb2dyYW0nO1xuICAgICAgZW5kVHlwZSA9ICdlbmRQcm9ncmFtJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0QmxvY2snO1xuICAgICAgZW5kVHlwZSA9ICdlbmRCbG9jayc7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLnBhcmVudE5vZGUgPSBwcm9ncmFtO1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZHJlbiA9IHByb2dyYW0uYm9keTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRDb3VudCA9IHByb2dyYW0uYm9keS5sZW5ndGg7XG4gICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtlbmRUeXBlLCBbcHJvZ3JhbSwgdGhpcy5wcm9ncmFtRGVwdGhdXSBhcyBBY3Rpb24pO1xuICAgIHByb2dyYW1GcmFtZS5zeW1ib2xzID0gcHJvZ3JhbVsnc3ltYm9scyddO1xuXG4gICAgZm9yIChsZXQgaSA9IHByb2dyYW0uYm9keS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgcHJvZ3JhbUZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChwcm9ncmFtLmJvZHlbaV0pO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW3N0YXJ0VHlwZSwgW1xuICAgICAgcHJvZ3JhbSwgcHJvZ3JhbUZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCxcbiAgICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKVxuICAgIF1dIGFzIEFjdGlvbik7XG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgdGhpcy5wcm9ncmFtRGVwdGgtLTtcblxuICAgIC8vIFB1c2ggdGhlIGNvbXBsZXRlZCB0ZW1wbGF0ZSBpbnRvIHRoZSBnbG9iYWwgYWN0aW9ucyBsaXN0XG4gICAgaWYgKHBhcmVudEZyYW1lKSB7IHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCsrOyB9XG4gICAgdGhpcy5hY3Rpb25zLnB1c2goLi4ucHJvZ3JhbUZyYW1lLmFjdGlvbnMucmV2ZXJzZSgpKTtcbiAgfVxuXG4gIEVsZW1lbnROb2RlKGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGxldCBlbGVtZW50RnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgZWxlbWVudEZyYW1lLnBhcmVudE5vZGUgPSBlbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkQ291bnQgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCArPSBlbGVtZW50Lm1vZGlmaWVycy5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBlbGVtZW50RnJhbWUuc3ltYm9scyA9IGVsZW1lbnRbJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKGVsZW1lbnQuYmxvY2tQYXJhbXMpO1xuXG4gICAgbGV0IGFjdGlvbkFyZ3M6IFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZEluZGV4ISxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkQ291bnQhXG4gICAgXTtcblxuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2goWydjbG9zZUVsZW1lbnQnLCBhY3Rpb25BcmdzXSk7XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuYXR0cmlidXRlc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGVsZW1lbnRGcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5jaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgbGV0IG9wZW4gPSBbJ29wZW5FbGVtZW50JywgWy4uLmFjdGlvbkFyZ3MsIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50LCBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKCldXSBhcyBBY3Rpb24uT3BlbkVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChvcGVuKTtcblxuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSB0aGUgZWxlbWVudCdzIGZyYW1lIHN0YXRlIHRvIHRoZSBwYXJlbnQgZnJhbWVcbiAgICBpZiAoZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgPiAwKSB7IHBhcmVudEZyYW1lLm11c3RhY2hlQ291bnQrKzsgfVxuICAgIHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCArPSBlbGVtZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50O1xuICAgIHBhcmVudEZyYW1lLmFjdGlvbnMucHVzaCguLi5lbGVtZW50RnJhbWUuYWN0aW9ucyk7XG4gIH1cblxuICBBdHRyTm9kZShhdHRyOiBBU1QuQXR0ck5vZGUpIHtcbiAgICBpZiAoYXR0ci52YWx1ZS50eXBlICE9PSAnVGV4dE5vZGUnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgfVxuICB9O1xuXG4gIFRleHROb2RlKHRleHQ6IEFTVC5UZXh0Tm9kZSkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGlmICh0ZXh0LmNoYXJzID09PSAnJykge1xuICAgICAgZnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyEucHVzaChkb21JbmRleE9mKGZyYW1lLmNoaWxkcmVuISwgdGV4dCkpO1xuICAgIH1cbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWyd0ZXh0JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIEJsb2NrU3RhdGVtZW50KG5vZGU6IEFTVC5CbG9ja1N0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2Jsb2NrJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuXG4gICAgaWYgKG5vZGUuaW52ZXJzZSkgeyB0aGlzLnZpc2l0KG5vZGUuaW52ZXJzZSk7IH1cbiAgICBpZiAobm9kZS5wcm9ncmFtKSB7IHRoaXMudmlzaXQobm9kZS5wcm9ncmFtKTsgfVxuICB9O1xuXG4gIFBhcnRpYWxTdGF0ZW1lbnQobm9kZTogQVNULlBhcnRpYWxTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQ29tbWVudFN0YXRlbWVudCh0ZXh0OiBBU1QuQ29tbWVudFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2NvbW1lbnQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgTXVzdGFjaGVDb21tZW50U3RhdGVtZW50KCkge1xuICAgIC8vIEludGVudGlvbmFsIGVtcHR5OiBIYW5kbGViYXJzIGNvbW1lbnRzIHNob3VsZCBub3QgYWZmZWN0IG91dHB1dC5cbiAgfTtcblxuICBNdXN0YWNoZVN0YXRlbWVudChtdXN0YWNoZTogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW211c3RhY2hlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICAvLyBGcmFtZSBoZWxwZXJzXG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudEZyYW1lKCk6IEZyYW1lIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZyYW1lKCk6IE9wdGlvbjxGcmFtZT4ge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2tbdGhpcy5mcmFtZVN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoRnJhbWUoKSB7XG4gICAgbGV0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5mcmFtZVN0YWNrLnB1c2goZnJhbWUpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wRnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBgZG9tTm9kZWAgaW4gdGhlIGBub2Rlc2AgYXJyYXksIHNraXBwaW5nXG4vLyBvdmVyIGFueSBub2RlcyB3aGljaCBkbyBub3QgcmVwcmVzZW50IERPTSBub2Rlcy5cbmZ1bmN0aW9uIGRvbUluZGV4T2Yobm9kZXM6IEFTVC5Ob2RlW10sIGRvbU5vZGU6IEFTVC5UZXh0Tm9kZSB8IEFTVC5FbGVtZW50Tm9kZSkge1xuICBsZXQgaW5kZXggPSAtMTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcblxuICAgIGlmIChub2RlLnR5cGUgIT09ICdUZXh0Tm9kZScgJiYgbm9kZS50eXBlICE9PSAnRWxlbWVudE5vZGUnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gZG9tTm9kZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cbiJdfQ== |
@@ -11,4 +11,3 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | ||
import { assert } from "@glimmer/util"; | ||
import { Stack, DictSet, expect } from "@glimmer/util"; | ||
import { Stack, DictSet } from "@glimmer/util"; | ||
import { Statements, Ops } from '@glimmer/wire-format'; | ||
@@ -248,4 +247,2 @@ export var Block = function () { | ||
var blocks = this.template.block.blocks; | ||
assert(typeof template !== 'number' || blocks[template] !== null, 'missing block in the compiler'); | ||
assert(typeof inverse !== 'number' || blocks[inverse] !== null, 'missing block in the compiler'); | ||
this.push([Ops.Block, name, params, hash, blocks[template], blocks[inverse]]); | ||
@@ -373,3 +370,2 @@ }; | ||
var component = this.blocks.pop(); | ||
assert(component instanceof ComponentBlock, "Compiler bug: endComponent() should end a component"); | ||
return component.toJSON(); | ||
@@ -387,3 +383,2 @@ }; | ||
JavaScriptCompiler.prototype.prepareObject = function prepareObject(size) { | ||
assert(this.values.length >= size, "Expected " + size + " values on the stack, found " + this.values.length); | ||
var keys = new Array(size); | ||
@@ -412,3 +407,2 @@ var values = new Array(size); | ||
JavaScriptCompiler.prototype.popValue = function popValue() { | ||
assert(this.values.length, "No expression found on stack"); | ||
return this.values.pop(); | ||
@@ -420,3 +414,3 @@ }; | ||
get: function () { | ||
return expect(this.blocks.current, 'Expected a block on the stack'); | ||
return this.blocks.current; | ||
} | ||
@@ -429,2 +423,2 @@ }]); | ||
export default JavaScriptCompiler; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImphdmFzY3JpcHQtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUNBLEFBQU8sU0FBRSxBQUFNLEFBQUUsY0FBTSxBQUFlLEFBQUM7QUFDdkMsQUFBTyxTQUFFLEFBQUssT0FBRSxBQUFPLFNBQVUsQUFBTSxBQUFFLGNBQU0sQUFBZSxBQUFDO0FBSS9ELEFBQU8sU0FNTCxBQUFVLFlBR1YsQUFBRyxBQUNKLFdBQU0sQUFBc0IsQUFBQztBQVE5QixBQUFNO0FBQU47OztBQUNTLGFBQVUsYUFBZ0IsQUFBRSxBQUFDLEFBT3RDO0FBQUM7O29CQUhDLEFBQUkscUJBQUMsQUFBb0I7QUFDdkIsQUFBSSxhQUFDLEFBQVUsV0FBQyxBQUFJLEtBQUMsQUFBUyxBQUFDLEFBQUMsQUFDbEM7QUFBQyxBQUNGOzs7O0FBRUQsQUFBTSxXQUFtQjs7O0FBQ3ZCLHlCQUFtQixBQUF1Qjs7O3FEQUN4QyxBQUFLLEFBQUUsQUFBQzs7QUFEUyxjQUFLLFFBQUwsQUFBSyxBQUFrQixBQUUxQzs7QUFBQzs7MEJBRUQsQUFBTTtBQUNKLEFBQU07QUFDSixBQUFVLHdCQUFFLEFBQUksS0FBQyxBQUFVO0FBQzNCLEFBQVUsd0JBQUUsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFLLEFBQzdCLEFBQUMsQUFDSjtBQUpTO0FBSVIsQUFDRjs7O0VBWGdDLEFBQUs7QUFhdEMsQUFBTSxXQUFxQjs7O0FBV3pCLDJCQUFvQixBQUErQjs7O3NEQUNqRCxBQUFLLEFBQUUsQUFBQzs7QUFEVSxlQUFXLGNBQVgsQUFBVyxBQUFvQjtBQVY1QyxlQUFJLE9BQUcsQUFBVSxBQUFDO0FBQ2xCLGVBQU0sU0FBRyxJQUFJLEFBQU8sQUFBVSxBQUFDO0FBQy9CLGVBQUssUUFBRyxJQUFJLEFBQU8sQUFBVSxBQUFDO0FBQzlCLGVBQU8sVUFBZ0IsQUFBRSxBQUFDO0FBQzFCLGVBQUksT0FB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RCxBQUFJLGFBQUMsQUFBUyxVQUFPLENBQUMsQUFBSSxNQUFFLEFBQU0sQUFBQyxBQUFDLEFBQUMsQUFDdkM7QUFBQztBQUVELEFBQWE7OztpQ0FFYixBQUFJLHFCQUFDLEFBQWU7QUFDbEIsZUFBTyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQU0sU0FBRyxBQUFDLEFBQUMsT0FBSyxBQUFJLE1BQUUsQUFBQztBQUN0QyxBQUFJLGlCQUFDLEFBQUcsQUFBRSxBQUFDLEFBQ2I7QUFBQztBQUVELEFBQUksYUFBQyxBQUFZLGFBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDLEFBQy9CO0FBQUM7O2lDQUVELEFBQVMsK0JBQXVDLEFBQU07QUFDcEQsQUFBSSxhQUFDLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBRyxBQUFDLEFBQUMsQUFDeEI7QUFBQzs7aUNBRUQsQUFBUTtBQUNOLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQU0sUUFBRSxBQUE4QixBQUFDLEFBQUM7QUFDM0QsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBRyxBQUFPLEFBQUMsQUFDaEM7QUFBQyxBQUNGOzs7OztBQXJPRyxBQUFNLG1CQUFDLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQU8sU0FBRSxBQUErQixBQUFDLEFBQUMsQUFDdEU7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFdpcmVGb3JtYXQgZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFN0YWNrLCBEaWN0U2V0LCBPcHRpb24sIGV4cGVjdCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQmxvY2tTeW1ib2xUYWJsZSwgUHJvZ3JhbVN5bWJvbFRhYmxlIH0gZnJvbSAnLi90ZW1wbGF0ZS12aXNpdG9yJztcblxuaW1wb3J0IHtcbiAgVGVtcGxhdGVNZXRhLFxuICBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayxcbiAgU2VyaWFsaXplZFRlbXBsYXRlLFxuICBDb3JlLFxuICBTdGF0ZW1lbnQsXG4gIFN0YXRlbWVudHMsXG4gIEV4cHJlc3Npb24sXG4gIEV4cHJlc3Npb25zLFxuICBPcHNcbn0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuXG5leHBvcnQgdHlwZSBzdHIgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBQYXJhbXMgPSBDb3JlLlBhcmFtcztcbmV4cG9ydCB0eXBlIEhhc2ggPSBDb3JlLkhhc2g7XG5leHBvcnQgdHlwZSBQYXRoID0gQ29yZS5QYXRoO1xuZXhwb3J0IHR5cGUgU3RhY2tWYWx1ZSA9IEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoIHwgc3RyO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2sge1xuICBwdWJsaWMgc3RhdGVtZW50czogU3RhdGVtZW50W10gPSBbXTtcblxuICBhYnN0cmFjdCB0b0pTT04oKTogT2JqZWN0O1xuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmxpbmVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgdHlwZSA9IFwidGVtcGxhdGVcIjtcbiAgcHVibGljIHlpZWxkcyA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIG5hbWVkID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgcHJlbHVkZTogU3RhdGVtZW50W10gPSBbXTtcbiAgcHVibGljIGhlYWQ6IFN0YXRlbWVudHMuRWxlbWVudEhlYWRbXSA9IFtdO1xuICBwdWJsaWMgYmxvY2tzOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9ja1tdID0gW107XG4gIHB1YmxpYyBoYXNFdmFsID0gZmFsc2U7XG4gIHByaXZhdGUgc2F3RWxlbWVudCA9IGZhbHNlO1xuICBwcml2YXRlIGluUGFyYW1zID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzeW1ib2xUYWJsZTogUHJvZ3JhbVN5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuc2F3RWxlbWVudCkge1xuICAgICAgaWYgKFN0YXRlbWVudHMuaXNPcGVuRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuc2F3RWxlbWVudCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByZWx1ZGUucHVzaChzdGF0ZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgaWYgKFN0YXRlbWVudHMuaXNGbHVzaEVsZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmluUGFyYW1zID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGVhZC5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNJbkVsZW1lbnRIZWFkKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5oZWFkLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogb25seSBwYXJhbWV0ZXJzIGFsbG93ZWQgYmVmb3JlIGZsdXNoLWVsZW1lbnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xzOiB0aGlzLnN5bWJvbFRhYmxlLnN5bWJvbHMsXG4gICAgICBwcmVsdWRlOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLnByZWx1ZGUgOiBudWxsLFxuICAgICAgaGVhZDogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5oZWFkIDogbnVsbCxcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMuc3RhdGVtZW50cyA6IHRoaXMucHJlbHVkZSxcbiAgICAgIGhhc0V2YWw6IHRoaXMuaGFzRXZhbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgYXR0cmlidXRlczogU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSA9IFtdO1xuICBwdWJsaWMgYXJndW1lbnRzOiBTdGF0ZW1lbnRzLkFyZ3VtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBpblBhcmFtcyA9IHRydWU7XG4gIHB1YmxpYyBwb3NpdGlvbmFsczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgaWYgKFN0YXRlbWVudHMuaXNGbHVzaEVsZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmluUGFyYW1zID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNBcmd1bWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXJndW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0F0dHJpYnV0ZShzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNNb2RpZmllcihzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogRWxlbWVudCBtb2RpZmllcnMgYXJlIG5vdCBhbGxvd2VkIGluIGNvbXBvbmVudHMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogb25seSBwYXJhbWV0ZXJzIGFsbG93ZWQgYmVmb3JlIGZsdXNoLWVsZW1lbnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogW1dpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSwgV2lyZUZvcm1hdC5Db3JlLkhhc2gsIE9wdGlvbjxXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jaz5dIHtcbiAgICBsZXQgYXJncyA9IHRoaXMuYXJndW1lbnRzO1xuICAgIGxldCBrZXlzID0gYXJncy5tYXAoYXJnID0+IGFyZ1sxXSk7XG4gICAgbGV0IHZhbHVlcyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMl0pO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgIFtrZXlzLCB2YWx1ZXNdLFxuICAgICAge1xuICAgICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICAgIH1cbiAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZTxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHB1YmxpYyBibG9jazogVGVtcGxhdGVCbG9jaztcblxuICBjb25zdHJ1Y3RvcihzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIHB1YmxpYyBtZXRhOiBUKSB7XG4gICAgdGhpcy5ibG9jayA9IG5ldyBUZW1wbGF0ZUJsb2NrKHN5bWJvbHMpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRUZW1wbGF0ZTxUPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJsb2NrOiB0aGlzLmJsb2NrLnRvSlNPTigpLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0Q29tcGlsZXI8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ge1xuICBzdGF0aWMgcHJvY2VzczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPihvcGNvZGVzOiBhbnlbXSwgc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlLCBtZXRhOiBUKTogVGVtcGxhdGU8VD4ge1xuICAgIGxldCBjb21waWxlciA9IG5ldyBKYXZhU2NyaXB0Q29tcGlsZXI8VD4ob3Bjb2Rlcywgc3ltYm9scywgbWV0YSk7XG4gICAgcmV0dXJuIGNvbXBpbGVyLnByb2Nlc3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlPFQ+O1xuICBwcml2YXRlIGJsb2NrcyA9IG5ldyBTdGFjazxCbG9jaz4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXTtcbiAgcHJpdmF0ZSB2YWx1ZXM6IFN0YWNrVmFsdWVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIG1ldGE6IFQpIHtcbiAgICB0aGlzLm9wY29kZXMgPSBvcGNvZGVzO1xuICAgIHRoaXMudGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoc3ltYm9scywgbWV0YSk7XG4gIH1cblxuICBnZXQgY3VycmVudEJsb2NrKCk6IEJsb2NrIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tzLmN1cnJlbnQsICdFeHBlY3RlZCBhIGJsb2NrIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZTxUPiB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2sobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogbnVtYmVyLCBpbnZlcnNlOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG4gICAgYXNzZXJ0KHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW3RlbXBsYXRlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG4gICAgYXNzZXJ0KHR5cGVvZiBpbnZlcnNlICE9PSAnbnVtYmVyJyB8fCBibG9ja3NbaW52ZXJzZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuQmxvY2ssIG5hbWUsIHBhcmFtcywgaGFzaCwgYmxvY2tzW3RlbXBsYXRlXSwgYmxvY2tzW2ludmVyc2VdXSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuc3RhcnRDb21wb25lbnQoZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmJsb2NrUGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogPCR7ZWxlbWVudC50YWd9PiBpcyBub3QgYSBjb21wb25lbnQgYW5kIGRvZXNuJ3Qgc3VwcG9ydCBibG9jayBwYXJhbWV0ZXJzYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLk9wZW5FbGVtZW50LCB0YWddKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaEVsZW1lbnQoKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRmx1c2hFbGVtZW50XSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHRhZyA9IGVsZW1lbnQudGFnO1xuXG4gICAgaWYgKHRhZy5pbmRleE9mKCctJykgIT09IC0xKSB7XG4gICAgICBsZXQgW2F0dHJzLCBhcmdzLCBibG9ja10gPSB0aGlzLmVuZENvbXBvbmVudCgpO1xuICAgICAgdGhpcy5wdXNoKFtPcHMuQ29tcG9uZW50LCB0YWcsIGF0dHJzLCBhcmdzLCBibG9ja10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5DbG9zZUVsZW1lbnRdKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWNBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgZHluYW1pY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgdHJ1c3RpbmdBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuVHJ1c3RpbmdBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBzdGF0aWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlN0YXRpY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIGR5bmFtaWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICB5aWVsZCh0bzogbnVtYmVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIHRoaXMucHVzaChbT3BzLllpZWxkLCB0bywgcGFyYW1zXSk7XG4gIH1cblxuICBkZWJ1Z2dlcihldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIHRoaXMucHVzaChbT3BzLkRlYnVnZ2VyLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9jaz4oW09wcy5IYXNCbG9jaywgbmFtZV0pO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMobmFtZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGFzQmxvY2tQYXJhbXM+KFtPcHMuSGFzQmxvY2tQYXJhbXMsIG5hbWVdKTtcbiAgfVxuXG4gIHBhcnRpYWwoZXZhbEluZm86IENvcmUuRXZhbEluZm8pIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuUGFydGlhbCwgcGFyYW1zWzBdLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICAvLy8gRXhwcmVzc2lvbnNcblxuICBsaXRlcmFsKHZhbHVlOiBFeHByZXNzaW9ucy5WYWx1ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5VbmRlZmluZWQ+KFtPcHMuVW5kZWZpbmVkXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlZhbHVlPih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdW5rbm93bihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Vbmtub3duPihbT3BzLlVua25vd24sIG5hbWVdKTtcbiAgfVxuXG4gIGdldChoZWFkOiBudW1iZXIsIHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuR2V0PihbT3BzLkdldCwgaGVhZCwgcGF0aF0pO1xuICB9XG5cbiAgbWF5YmVMb2NhbChwYXRoOiBzdHJpbmdbXSkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLk1heWJlTG9jYWw+KFtPcHMuTWF5YmVMb2NhbCwgcGF0aF0pO1xuICB9XG5cbiAgY29uY2F0KCkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkNvbmNhdD4oW09wcy5Db25jYXQsIHRoaXMucG9wVmFsdWU8UGFyYW1zPigpXSk7XG4gIH1cblxuICBoZWxwZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGVscGVyPihbT3BzLkhlbHBlciwgbmFtZSwgcGFyYW1zLCBoYXNoXSk7XG4gIH1cblxuICAvLy8gU3RhY2sgTWFuYWdlbWVudCBPcGNvZGVzXG5cbiAgc3RhcnRDb21wb25lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRCbG9jayhlbGVtZW50WydzeW1ib2xzJ10pO1xuICAgIHRoaXMuYmxvY2tzLnB1c2goY29tcG9uZW50KTtcbiAgfVxuXG4gIGVuZENvbXBvbmVudCgpOiBbV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBXaXJlRm9ybWF0LkNvcmUuSGFzaCwgT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmJsb2Nrcy5wb3AoKTtcbiAgICBhc3NlcnQoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50QmxvY2ssIFwiQ29tcGlsZXIgYnVnOiBlbmRDb21wb25lbnQoKSBzaG91bGQgZW5kIGEgY29tcG9uZW50XCIpO1xuICAgIHJldHVybiAoY29tcG9uZW50IGFzIENvbXBvbmVudEJsb2NrKS50b0pTT04oKTtcbiAgfVxuXG4gIHByZXBhcmVBcnJheShzaXplOiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkgYXMgRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8UGFyYW1zPih2YWx1ZXMpO1xuICB9XG5cbiAgcHJlcGFyZU9iamVjdChzaXplOiBudW1iZXIpIHtcbiAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoID49IHNpemUsIGBFeHBlY3RlZCAke3NpemV9IHZhbHVlcyBvbiB0aGUgc3RhY2ssIGZvdW5kICR7dGhpcy52YWx1ZXMubGVuZ3RofWApO1xuXG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KHNpemUpO1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBrZXlzW2ldID0gdGhpcy5wb3BWYWx1ZTxzdHI+KCk7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8SGFzaD4oW2tleXMsIHZhbHVlc10pO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIHB1c2goYXJnczogU3RhdGVtZW50KSB7XG4gICAgd2hpbGUgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gbnVsbCkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbG9jay5wdXNoKGFyZ3MpO1xuICB9XG5cbiAgcHVzaFZhbHVlPFMgZXh0ZW5kcyBFeHByZXNzaW9uIHwgUGFyYW1zIHwgSGFzaD4odmFsOiBTKSB7XG4gICAgdGhpcy52YWx1ZXMucHVzaCh2YWwpO1xuICB9XG5cbiAgcG9wVmFsdWU8VCBleHRlbmRzIFN0YWNrVmFsdWU+KCk6IFQge1xuICAgIGFzc2VydCh0aGlzLnZhbHVlcy5sZW5ndGgsIFwiTm8gZXhwcmVzc2lvbiBmb3VuZCBvbiBzdGFja1wiKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMucG9wKCkgYXMgVDtcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImphdmFzY3JpcHQtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUVBLEFBQU8sU0FBRSxBQUFLLE9BQUUsQUFBTyxBQUFVLGVBQU0sQUFBZSxBQUFDO0FBSXZELEFBQU8sU0FNTCxBQUFVLFlBR1YsQUFBRyxBQUNKLFdBQU0sQUFBc0IsQUFBQztBQVE5QixBQUFNO0FBQU47OztBQUNTLGFBQVUsYUFBZ0IsQUFBRSxBQUFDLEFBT3RDO0FBQUM7O29CQUhDLEFBQUkscUJBQUMsQUFBb0I7QUFDdkIsQUFBSSxhQUFDLEFBQVUsV0FBQyxBQUFJLEtBQUMsQUFBUyxBQUFDLEFBQUMsQUFDbEM7QUFBQyxBQUNGOzs7O0FBRUQsQUFBTSxXQUFtQjs7O0FBQ3ZCLHlCQUFtQixBQUF1Qjs7O3FEQUN4QyxBQUFLLEFBQUUsQUFBQzs7QUFEUyxjQUFLLFFBQUwsQUFBSyxBQUFrQixBQUUxQzs7QUFBQzs7MEJBRUQsQUFBTTtBQUNKLEFBQU07QUFDSixBQUFVLHdCQUFFLEFBQUksS0FBQyxBQUFVO0FBQzNCLEFBQVUsd0JBQUUsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFLLEFBQzdCLEFBQUMsQUFDSjtBQUpTO0FBSVIsQUFDRjs7O0VBWGdDLEFBQUs7QUFhdEMsQUFBTSxXQUFxQjs7O0FBV3pCLDJCQUFvQixBQUErQjs7O3NEQUNqRCxBQUFLLEFBQUUsQUFBQzs7QUFEVSxlQUFXLGNBQVgsQUFBVyxBQUFvQjtBQVY1QyxlQUFJLE9BQUcsQUFBVSxBQUFDO0FBQ2xCLGVBQU0sU0FBRyxJQUFJLEFBQU8sQUFBVSxBQUFDO0FBQy9CLGVBQUssUUFBRyxJQUFJLEFBQU8sQUFBVSxBQUFDO0FBQzlCLGVBQU8sVUFBZ0IsQUFBRSxBQUFDO0FBQzFCLGVBQUksT0FBNkIsQUFBRSxBQUFDO0FBQ3BDLGVBQU0sU0FBdUMsQUFBRSxBQUFDO0FBQ2hELGVBQU8s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LE9BQUMsQUFBRyxBQUFPLEFBQUMsQUFDaEM7QUFBQyxBQUNGOzs7OztBQWhPRyxBQUFNLG1CQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBTyxBQUFDLEFBQzdCO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBTdGFjaywgRGljdFNldCwgT3B0aW9uIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBCbG9ja1N5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUgfSBmcm9tICcuL3RlbXBsYXRlLXZpc2l0b3InO1xuXG5pbXBvcnQge1xuICBUZW1wbGF0ZU1ldGEsXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBTZXJpYWxpemVkVGVtcGxhdGUsXG4gIENvcmUsXG4gIFN0YXRlbWVudCxcbiAgU3RhdGVtZW50cyxcbiAgRXhwcmVzc2lvbixcbiAgRXhwcmVzc2lvbnMsXG4gIE9wc1xufSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmV4cG9ydCB0eXBlIHN0ciA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBhcmFtcyA9IENvcmUuUGFyYW1zO1xuZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcbmV4cG9ydCB0eXBlIFBhdGggPSBDb3JlLlBhdGg7XG5leHBvcnQgdHlwZSBTdGFja1ZhbHVlID0gRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2ggfCBzdHI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9jayB7XG4gIHB1YmxpYyBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIGFic3RyYWN0IHRvSlNPTigpOiBPYmplY3Q7XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdG9KU09OKCk6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyB0eXBlID0gXCJ0ZW1wbGF0ZVwiO1xuICBwdWJsaWMgeWllbGRzID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgbmFtZWQgPSBuZXcgRGljdFNldDxzdHJpbmc+KCk7XG4gIHB1YmxpYyBwcmVsdWRlOiBTdGF0ZW1lbnRbXSA9IFtdO1xuICBwdWJsaWMgaGVhZDogU3RhdGVtZW50cy5FbGVtZW50SGVhZFtdID0gW107XG4gIHB1YmxpYyBibG9ja3M6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrW10gPSBbXTtcbiAgcHVibGljIGhhc0V2YWwgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzYXdFbGVtZW50ID0gZmFsc2U7XG4gIHByaXZhdGUgaW5QYXJhbXMgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICghdGhpcy5zYXdFbGVtZW50KSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc09wZW5FbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5zYXdFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pblBhcmFtcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJlbHVkZS5wdXNoKHN0YXRlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oZWFkLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0luRWxlbWVudEhlYWQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmhlYWQucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgIHByZWx1ZGU6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMucHJlbHVkZSA6IG51bGwsXG4gICAgICBoZWFkOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLmhlYWQgOiBudWxsLFxuICAgICAgc3RhdGVtZW50czogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5zdGF0ZW1lbnRzIDogdGhpcy5wcmVsdWRlLFxuICAgICAgaGFzRXZhbDogdGhpcy5oYXNFdmFsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG4gIHB1YmxpYyBhcmd1bWVudHM6IFN0YXRlbWVudHMuQXJndW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIGluUGFyYW1zID0gdHJ1ZTtcbiAgcHVibGljIHBvc2l0aW9uYWxzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0FyZ3VtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChTdGF0ZW1lbnRzLmlzQXR0cmlidXRlKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBFbGVtZW50IG1vZGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBbV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBXaXJlRm9ybWF0LkNvcmUuSGFzaCwgT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBhcmdzID0gdGhpcy5hcmd1bWVudHM7XG4gICAgbGV0IGtleXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzFdKTtcbiAgICBsZXQgdmFsdWVzID0gYXJncy5tYXAoYXJnID0+IGFyZ1syXSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgW2tleXMsIHZhbHVlc10sXG4gICAgICB7XG4gICAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgfVxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgcHVibGljIGJsb2NrOiBUZW1wbGF0ZUJsb2NrO1xuXG4gIGNvbnN0cnVjdG9yKHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSwgcHVibGljIG1ldGE6IFQpIHtcbiAgICB0aGlzLmJsb2NrID0gbmV3IFRlbXBsYXRlQmxvY2soc3ltYm9scyk7XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlPFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYmxvY2s6IHRoaXMuYmxvY2sudG9KU09OKCksXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphdmFTY3JpcHRDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBwcm9jZXNzPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsIG1ldGE6IFQpOiBUZW1wbGF0ZTxUPiB7XG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IEphdmFTY3JpcHRDb21waWxlcjxUPihvcGNvZGVzLCBzeW1ib2xzLCBtZXRhKTtcbiAgICByZXR1cm4gY29tcGlsZXIucHJvY2VzcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZTogVGVtcGxhdGU8VD47XG4gIHByaXZhdGUgYmxvY2tzID0gbmV3IFN0YWNrPEJsb2NrPigpO1xuICBwcml2YXRlIG9wY29kZXM6IGFueVtdO1xuICBwcml2YXRlIHZhbHVlczogU3RhY2tWYWx1ZVtdID0gW107XG5cbiAgY29uc3RydWN0b3Iob3Bjb2RlczogYW55W10sIHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSwgbWV0YTogVCkge1xuICAgIHRoaXMub3Bjb2RlcyA9IG9wY29kZXM7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShzeW1ib2xzLCBtZXRhKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50QmxvY2soKTogQmxvY2sge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5jdXJyZW50O1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZTxUPiB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2sobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogbnVtYmVyLCBpbnZlcnNlOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG5cbiAgICB0aGlzLnB1c2goW09wcy5CbG9jaywgbmFtZSwgcGFyYW1zLCBoYXNoLCBibG9ja3NbdGVtcGxhdGVdLCBibG9ja3NbaW52ZXJzZV1dKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmICh0YWcuaW5kZXhPZignLScpICE9PSAtMSkge1xuICAgICAgdGhpcy5zdGFydENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYmxvY2tQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiA8JHtlbGVtZW50LnRhZ30+IGlzIG5vdCBhIGNvbXBvbmVudCBhbmQgZG9lc24ndCBzdXBwb3J0IGJsb2NrIHBhcmFtZXRlcnNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlbkVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICB0aGlzLnB1c2goW09wcy5GbHVzaEVsZW1lbnRdKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgIGxldCBbYXR0cnMsIGFyZ3MsIGJsb2NrXSA9IHRoaXMuZW5kQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLnB1c2goW09wcy5Db21wb25lbnQsIHRhZywgYXR0cnMsIGFyZ3MsIGJsb2NrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLkNsb3NlRWxlbWVudF0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBkeW5hbWljQXR0cihuYW1lOiBzdHIsIG5hbWVzcGFjZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICB0cnVzdGluZ0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5UcnVzdGluZ0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIHN0YXRpY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG5cbiAgZHluYW1pY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuRHluYW1pY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIHlpZWxkKHRvOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuWWllbGQsIHRvLCBwYXJhbXNdKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKGV2YWxJbmZvOiBDb3JlLkV2YWxJbmZvKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRGVidWdnZXIsIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhhc0Jsb2NrPihbT3BzLkhhc0Jsb2NrLCBuYW1lXSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcz4oW09wcy5IYXNCbG9ja1BhcmFtcywgbmFtZV0pO1xuICB9XG5cbiAgcGFydGlhbChldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5QYXJ0aWFsLCBwYXJhbXNbMF0sIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9uc1xuXG4gIGxpdGVyYWwodmFsdWU6IEV4cHJlc3Npb25zLlZhbHVlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVuZGVmaW5lZD4oW09wcy5VbmRlZmluZWRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVmFsdWU+KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1bmtub3duKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVua25vd24+KFtPcHMuVW5rbm93biwgbmFtZV0pO1xuICB9XG5cbiAgZ2V0KGhlYWQ6IG51bWJlciwgcGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5HZXQ+KFtPcHMuR2V0LCBoZWFkLCBwYXRoXSk7XG4gIH1cblxuICBtYXliZUxvY2FsKHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuTWF5YmVMb2NhbD4oW09wcy5NYXliZUxvY2FsLCBwYXRoXSk7XG4gIH1cblxuICBjb25jYXQoKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuQ29uY2F0PihbT3BzLkNvbmNhdCwgdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCldKTtcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IZWxwZXI+KFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcblxuICBzdGFydENvbXBvbmVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEJsb2NrKGVsZW1lbnRbJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChjb21wb25lbnQpO1xuICB9XG5cbiAgZW5kQ29tcG9uZW50KCk6IFtXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXR0cmlidXRlW10sIFdpcmVGb3JtYXQuQ29yZS5IYXNoLCBPcHRpb248V2lyZUZvcm1hdC5TZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgIHJldHVybiAoY29tcG9uZW50IGFzIENvbXBvbmVudEJsb2NrKS50b0pTT04oKTtcbiAgfVxuXG4gIHByZXBhcmVBcnJheShzaXplOiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkgYXMgRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8UGFyYW1zPih2YWx1ZXMpO1xuICB9XG5cbiAgcHJlcGFyZU9iamVjdChzaXplOiBudW1iZXIpIHtcblxuICAgIGxldCBrZXlzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShzaXplKTtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAga2V5c1tpXSA9IHRoaXMucG9wVmFsdWU8c3RyPigpO1xuICAgICAgdmFsdWVzW2ldID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFZhbHVlPEhhc2g+KFtrZXlzLCB2YWx1ZXNdKTtcbiAgfVxuXG4gIC8vLyBVdGlsaXRpZXNcblxuICBwdXNoKGFyZ3M6IFN0YXRlbWVudCkge1xuICAgIHdoaWxlIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IG51bGwpIHtcbiAgICAgIGFyZ3MucG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50QmxvY2sucHVzaChhcmdzKTtcbiAgfVxuXG4gIHB1c2hWYWx1ZTxTIGV4dGVuZHMgRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2g+KHZhbDogUykge1xuICAgIHRoaXMudmFsdWVzLnB1c2godmFsKTtcbiAgfVxuXG4gIHBvcFZhbHVlPFQgZXh0ZW5kcyBTdGFja1ZhbHVlPigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMucG9wKCkgYXMgVDtcbiAgfVxufVxuIl19 |
@@ -8,3 +8,2 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | ||
import { Stack, getAttrNamespace } from "@glimmer/util"; | ||
import { assert, expect } from "@glimmer/util"; | ||
import { isLiteral } from '@glimmer/syntax'; | ||
@@ -331,3 +330,2 @@ function isTrustedValue(value) { | ||
var param = params[i]; | ||
assert(this[param.type], "Unimplemented " + param.type + " on TemplateCompiler"); | ||
this[param.type](param); | ||
@@ -349,3 +347,2 @@ } | ||
assert(this[value.type], "Unimplemented " + value.type + " on TemplateCompiler"); | ||
this[value.type](value); | ||
@@ -406,3 +403,3 @@ this.opcode('literal', null, key); | ||
get: function () { | ||
return expect(this.symbolStack.current, 'Expected a symbol table on the stack'); | ||
return this.symbolStack.current; | ||
} | ||
@@ -518,2 +515,2 @@ }]); | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxBQUF3QyxxQkFBTSxBQUFvQixBQUFDO0FBQzFFLE9BQU8sQUFBZ0Msd0JBQU0sQUFBdUIsQUFBQztBQUNyRSxBQUFPLFNBQUUsQUFBSyxPQUFFLEFBQWdCLEFBQUUsd0JBQU0sQUFBZSxBQUFDO0FBQ3hELEFBQU8sU0FBRSxBQUFNLFFBQUUsQUFBTSxBQUFFLGNBQU0sQUFBZSxBQUFDO0FBRS9DLEFBQU8sU0FBTyxBQUFTLEFBQUUsaUJBQU0sQUFBaUIsQUFBQztBQU1qRCx3QkFBd0IsQUFBVTtBQUNoQyxBQUFNLFdBQUMsQUFBSyxNQUFDLEFBQU8sWUFBSyxBQUFTLGFBQUksQ0FBQyxBQUFLLE1BQUMsQUFBTyxBQUFDLEFBQ3ZEO0FBQUMsQUFFRCxBQUFNLEFBQUMsQUFBTzs7O0FBaUJaLDhCQUFZLEFBQTBCOzs7QUFOOUIsYUFBVSxhQUFHLEFBQUMsQUFBQztBQUNmLGFBQVcsY0FBYSxBQUFFLEFBQUM7QUFDM0IsYUFBVyxjQUFHLElBQUksQUFBSyxBQUFlLEFBQUM7QUFDdkMsYUFBTyxVQUFVLEFBQUUsQUFBQztBQUNwQixhQUFXLGNBQUcsQUFBSyxBQUFDO0FBRzFCLEFBQUksYUFBQyxBQUFPLFVBQUcsQUFBTyxXQUFJLEFBQUUsQUFBQyxBQUMvQjtBQWxCQSxBQUFNLEFBa0JMOztxQkFsQk0sQUFBTywyQkFBeUIsQUFBMEIsU0FBRSxBQUFnQjtBQUNqRixZQUFJLEFBQWUsa0JBQUcsSUFBSSxBQUFlLEFBQUUsQUFBQztBQUM1QyxBQUFlLHdCQUFDLEFBQUssTUFBQyxBQUFHLEFBQUMsQUFBQztBQUUzQixZQUFJLEFBQVEsV0FBRyxJQUFJLEFBQWdCLGlCQUFDLEFBQU8sQUFBQyxBQUFDO0FBQzdDLFlBQUksQUFBTyxVQUFHLEFBQVEsU0FBQyxBQUFPLFFBQUMs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QUFBSSxLQUFDLEFBQUssTUFBQyxBQUFNLFNBQUcsQUFBQyxBQUFDLEdBQUMsQUFBQztBQUNsQyxjQUFNLElBQUksQUFBSyxBQUFDLEFBQTRDLEFBQUMsQUFBQyxBQUNoRTtBQUFDO0FBRUQsQUFBRSxBQUFDLFFBQUMsQUFBTSxPQUFDLEFBQU0sV0FBSyxBQUFDLEFBQUMsR0FBQyxBQUFDO0FBQ3hCLEFBQU0sZUFBQyxBQUFTLEFBQUMsQUFDbkI7QUFBQyxBQUFDLEFBQUksV0FBQyxBQUFDO0FBQ04sY0FBTSxJQUFJLEFBQUssQUFBQyxBQUFpRCxBQUFDLEFBQUMsQUFDckU7QUFBQyxBQUNIO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGVtcGxhdGVWaXNpdG9yLCB7IFN5bWJvbFRhYmxlLCBBY3Rpb24gfSBmcm9tIFwiLi90ZW1wbGF0ZS12aXNpdG9yXCI7XG5pbXBvcnQgSmF2YVNjcmlwdENvbXBpbGVyLCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4vamF2YXNjcmlwdC1jb21waWxlclwiO1xuaW1wb3J0IHsgU3RhY2ssIGdldEF0dHJOYW1lc3BhY2UgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgYXNzZXJ0LCBleHBlY3QgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNZXRhIH0gZnJvbSBcIkBnbGltbWVyL3dpcmUtZm9ybWF0XCI7XG5pbXBvcnQgeyBBU1QsIGlzTGl0ZXJhbCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsZU9wdGlvbnM8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ge1xuICBtZXRhOiBUO1xufVxuXG5mdW5jdGlvbiBpc1RydXN0ZWRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZS5lc2NhcGVkICE9PSB1bmRlZmluZWQgJiYgIXZhbHVlLmVzY2FwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlQ29tcGlsZXI8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ge1xuICBzdGF0aWMgY29tcGlsZTxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPihvcHRpb25zOiBDb21waWxlT3B0aW9uczxUPiwgYXN0OiBBU1QuUHJvZ3JhbSk6IFRlbXBsYXRlPFQ+IHtcbiAgICBsZXQgdGVtcGxhdGVWaXNpdG9yID0gbmV3IFRlbXBsYXRlVmlzaXRvcigpO1xuICAgIHRlbXBsYXRlVmlzaXRvci52aXNpdChhc3QpO1xuXG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IFRlbXBsYXRlQ29tcGlsZXIob3B0aW9ucyk7XG4gICAgbGV0IG9wY29kZXMgPSBjb21waWxlci5wcm9jZXNzKHRlbXBsYXRlVmlzaXRvci5hY3Rpb25zKTtcbiAgICByZXR1cm4gSmF2YVNjcmlwdENvbXBpbGVyLnByb2Nlc3M8VD4ob3Bjb2RlcywgYXN0WydzeW1ib2xzJ10sIG9wdGlvbnMubWV0YSk7XG4gIH1cblxuICBwcml2YXRlIG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+O1xuICBwcml2YXRlIHRlbXBsYXRlSWQgPSAwO1xuICBwcml2YXRlIHRlbXBsYXRlSWRzOiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIHN5bWJvbFN0YWNrID0gbmV3IFN0YWNrPFN5bWJvbFRhYmxlPigpO1xuICBwcml2YXRlIG9wY29kZXM6IGFueVtdID0gW107XG4gIHByaXZhdGUgaW5jbHVkZU1ldGEgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDb21waWxlT3B0aW9uczxUPikge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIH1cblxuICBnZXQgc3ltYm9scygpOiBTeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLnN5bWJvbFN0YWNrLmN1cnJlbnQsICdFeHBlY3RlZCBhIHN5bWJvbCB0YWJsZSBvbiB0aGUgc3RhY2snKTtcbiAgfVxuXG4gIHByb2Nlc3MoYWN0aW9uczogQWN0aW9uW10pOiBBY3Rpb25bXSB7XG4gICAgYWN0aW9ucy5mb3JFYWNoKChbbmFtZSwgLi4uYXJnc10pID0+IHtcbiAgICAgIGlmICghdGhpc1tuYW1lXSkgeyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQgJHtuYW1lfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7IH1cbiAgICAgICh0aGlzW25hbWVdIGFzIGFueSkoLi4uYXJncyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMub3Bjb2RlcztcbiAgfVxuXG4gIHN0YXJ0UHJvZ3JhbShwcm9ncmFtOiBbQVNULlByb2dyYW1dKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKHByb2dyYW1bMF1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5vcGNvZGUoJ3N0YXJ0UHJvZ3JhbScsIHByb2dyYW0sIHByb2dyYW0pO1xuICB9XG5cbiAgZW5kUHJvZ3JhbSgpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMub3Bjb2RlKCdlbmRQcm9ncmFtJywgbnVsbCk7XG4gIH1cblxuICBzdGFydEJsb2NrKHByb2dyYW06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICB0aGlzLnRlbXBsYXRlSWQrKztcbiAgICB0aGlzLm9wY29kZSgnc3RhcnRCbG9jaycsIHByb2dyYW0sIHByb2dyYW0pO1xuICB9XG5cbiAgZW5kQmxvY2soKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLnRlbXBsYXRlSWRzLnB1c2godGhpcy50ZW1wbGF0ZUlkIC0gMSk7XG4gICAgdGhpcy5vcGNvZGUoJ2VuZEJsb2NrJywgbnVsbCk7XG4gIH1cblxuICB0ZXh0KFthY3Rpb25dOiBbQVNULlRleHROb2RlXSkge1xuICAgIHRoaXMub3Bjb2RlKCd0ZXh0JywgYWN0aW9uLCBhY3Rpb24uY2hhcnMpO1xuICB9XG5cbiAgY29tbWVudChbYWN0aW9uXTogW0FTVC5Db21tZW50U3RhdGVtZW50XSkge1xuICAgIHRoaXMub3Bjb2RlKCdjb21tZW50JywgYWN0aW9uLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQoW2FjdGlvbl06IFtBU1QuRWxlbWVudE5vZGVdKSB7XG5cbiAgICB0aGlzLm9wY29kZSgnb3BlbkVsZW1lbnQnLCBhY3Rpb24sIGFjdGlvbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3Rpb24uYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hdHRyaWJ1dGUoW2FjdGlvbi5hdHRyaWJ1dGVzW2ldXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3Rpb24ubW9kaWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm1vZGlmaWVyKFthY3Rpb24ubW9kaWZpZXJzW2ldXSk7XG4gICAgfVxuICAgIHRoaXMub3Bjb2RlKCdmbHVzaEVsZW1lbnQnLCBudWxsKTtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2goYWN0aW9uWydzeW1ib2xzJ10pO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KFthY3Rpb25dOiBbQVNULkVsZW1lbnROb2RlXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2Nsb3NlRWxlbWVudCcsIG51bGwsIGFjdGlvbik7XG4gIH1cblxuICBhdHRyaWJ1dGUoW2FjdGlvbl06IFtBU1QuQXR0ck5vZGVdKSB7XG4gICAgbGV0IHsgbmFtZSwgdmFsdWUgfSA9IGFjdGlvbjtcblxuICAgIGxldCBuYW1lc3BhY2UgPSBnZXRBdHRyTmFtZXNwYWNlKG5hbWUpO1xuXG4gICAgbGV0IGlzU3RhdGljID0gdGhpcy5wcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKG5hbWUuY2hhckF0KDApID09PSAnQCcpIHtcbiAgICAgIC8vIEFyZ3VtZW50c1xuICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdzdGF0aWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpc1RydXN0aW5nID0gaXNUcnVzdGVkVmFsdWUodmFsdWUpO1xuXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJ1c3RpbmcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3RydXN0aW5nQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtb2RpZmllcihbYWN0aW9uXTogW0FTVC5FbGVtZW50TW9kaWZpZXJTdGF0ZW1lbnRdKSB7XG4gICAgYXNzZXJ0SXNTaW1wbGVQYXRoKGFjdGlvbi5wYXRoLCBhY3Rpb24ubG9jLCAnbW9kaWZpZXInKTtcblxuICAgIGxldCB7IHBhdGg6IHsgcGFydHMgfSB9ID0gYWN0aW9uO1xuXG4gICAgdGhpcy5wcmVwYXJlSGVscGVyKGFjdGlvbik7XG4gICAgdGhpcy5vcGNvZGUoJ21vZGlmaWVyJywgYWN0aW9uLCBwYXJ0c1swXSk7XG4gIH1cblxuICBtdXN0YWNoZShbYWN0aW9uXTogW0FTVC5NdXN0YWNoZVN0YXRlbWVudF0pIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBhY3Rpb247XG5cbiAgICBpZiAoaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICB9IGVsc2UgaWYgKGlzWWllbGQocGF0aCkpIHtcbiAgICAgIGxldCB0byA9IGFzc2VydFZhbGlkWWllbGQoYWN0aW9uKTtcbiAgICAgIHRoaXMueWllbGQodG8sIGFjdGlvbik7XG4gICAgfSBlbHNlIGlmIChpc1BhcnRpYWwocGF0aCkpIHtcbiAgICAgIGxldCBwYXJhbXMgPSBhc3NlcnRWYWxpZFBhcnRpYWwoYWN0aW9uKTtcbiAgICAgIHRoaXMucGFydGlhbChwYXJhbXMsIGFjdGlvbik7XG4gICAgfSBlbHNlIGlmIChpc0RlYnVnZ2VyKHBhdGgpKSB7XG4gICAgICBhc3NlcnRWYWxpZERlYnVnZ2VyVXNhZ2UoYWN0aW9uKTtcbiAgICAgIHRoaXMuZGVidWdnZXIoJ2RlYnVnZ2VyJywgYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnLCBhY3Rpb24sICFhY3Rpb24uZXNjYXBlZCk7XG4gICAgfVxuICB9XG5cbiAgYmxvY2soW2FjdGlvbi8qLCBpbmRleCwgY291bnQqL106IFtBU1QuQmxvY2tTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5wcmVwYXJlSGVscGVyKGFjdGlvbik7XG4gICAgbGV0IHRlbXBsYXRlSWQgPSB0aGlzLnRlbXBsYXRlSWRzLnBvcCgpO1xuICAgIGxldCBpbnZlcnNlSWQgPSBhY3Rpb24uaW52ZXJzZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLnRlbXBsYXRlSWRzLnBvcCgpO1xuICAgIHRoaXMub3Bjb2RlKCdibG9jaycsIGFjdGlvbiwgYWN0aW9uLnBhdGgucGFydHNbMF0sIHRlbXBsYXRlSWQsIGludmVyc2VJZCk7XG4gIH1cblxuICAvLy8gSW50ZXJuYWwgYWN0aW9ucywgbm90IGZvdW5kIGluIHRoZSBvcmlnaW5hbCBwcm9jZXNzZWQgYWN0aW9uc1xuXG4gIGFyZyhbcGF0aF06IFtBU1QuUGF0aEV4cHJlc3Npb25dKSB7XG4gICAgbGV0IHsgcGFydHM6IFtoZWFkLCAuLi5yZXN0XSB9ID0gcGF0aDtcbiAgICBsZXQgc3ltYm9sID0gdGhpcy5zeW1ib2xzLmFsbG9jYXRlTmFtZWQoaGVhZCk7XG4gICAgdGhpcy5vcGNvZGUoJ2dldCcsIHBhdGgsIHN5bWJvbCwgcmVzdCk7XG4gIH1cblxuICBtdXN0YWNoZUV4cHJlc3Npb24oZXhwcjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgbGV0IHsgcGF0aCB9ID0gZXhwcjtcblxuICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgZXhwciwgcGF0aC52YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChpc0J1aWx0SW5IZWxwZXIocGF0aCkpIHtcbiAgICAgIHRoaXMuYnVpbHRJbkhlbHBlcihleHByIGFzIEFTVC5DYWxsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJnKHBhdGgpKSB7XG4gICAgICB0aGlzLmFyZyhbcGF0aF0pO1xuICAgIH0gZWxzZSBpZiAoaXNIZWxwZXJJbnZvY2F0aW9uKGV4cHIpKSB7XG4gICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgcGF0aC5wYXJ0c1swXSk7XG4gICAgfSBlbHNlIGlmIChwYXRoLnRoaXMpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBwYXRoLnBhcnRzKTtcbiAgICB9IGVsc2UgaWYgKGlzTG9jYWwocGF0aCwgdGhpcy5zeW1ib2xzKSkge1xuICAgICAgbGV0IFtoZWFkLCAuLi5wYXJ0c10gPSBwYXRoLnBhcnRzO1xuICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIHRoaXMuc3ltYm9scy5nZXQoaGVhZCksIHBhcnRzKTtcbiAgICB9IGVsc2UgaWYgKGlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ3Vua25vd24nLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ21heWJlTG9jYWwnLCBleHByLCBwYXRoLnBhcnRzKTtcbiAgICB9XG4gIH1cblxuICAvLy8gSW50ZXJuYWwgU3ludGF4XG5cbiAgeWllbGQodG86IHN0cmluZywgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoJ3lpZWxkJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayh0bykpO1xuICB9XG5cbiAgZGVidWdnZXIoX25hbWU6IHN0cmluZywgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLm9wY29kZSgnZGVidWdnZXInLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5nZXRFdmFsSW5mbygpKTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IHN0cmluZywgYWN0aW9uOiBBU1QuQ2FsbCkge1xuICAgIHRoaXMub3Bjb2RlKCdoYXNCbG9jaycsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sobmFtZSkpO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2hhc0Jsb2NrUGFyYW1zJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhuYW1lKSk7XG4gIH1cblxuICBwYXJ0aWFsKF9wYXJhbXM6IEFTVC5FeHByZXNzaW9uW10sIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgIHRoaXMub3Bjb2RlKCdwYXJ0aWFsJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKSk7XG4gIH1cblxuICBidWlsdEluSGVscGVyKGV4cHI6IEFTVC5DYWxsKSB7XG4gICAgbGV0IHsgcGF0aCB9ID0gZXhwcjtcbiAgICBpZiAoaXNIYXNCbG9jayhwYXRoKSkge1xuICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgIHRoaXMuaGFzQmxvY2sobmFtZSwgZXhwcik7XG4gICAgfSBlbHNlIGlmIChpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9ja1BhcmFtcyhuYW1lLCBleHByKTtcbiAgICB9XG4gIH1cblxuICAvLy8gRXhwcmVzc2lvbnMsIGludm9rZWQgcmVjdXJzaXZlbHkgZnJvbSBwcmVwYXJlUGFyYW1zIGFuZCBwcmVwYXJlSGFzaFxuXG4gIFN1YkV4cHJlc3Npb24oZXhwcjogQVNULlN1YkV4cHJlc3Npb24pIHtcbiAgICBpZiAoaXNCdWlsdEluSGVscGVyKGV4cHIucGF0aCkpIHtcbiAgICAgIHRoaXMuYnVpbHRJbkhlbHBlcihleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2hlbHBlcicsIGV4cHIsIGV4cHIucGF0aC5wYXJ0c1swXSk7XG4gICAgfVxuICB9XG5cbiAgUGF0aEV4cHJlc3Npb24oZXhwcjogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gICAgaWYgKGV4cHIuZGF0YSkge1xuICAgICAgdGhpcy5hcmcoW2V4cHJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHsgc3ltYm9scyB9ID0gdGhpcztcbiAgICAgIGxldCBbaGVhZF0gPSBleHByLnBhcnRzO1xuXG4gICAgICBpZiAoZXhwci50aGlzKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBleHByLnBhcnRzKTtcbiAgICAgIH0gZWxzZSAgaWYgKHN5bWJvbHMuaGFzKGhlYWQpKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCBzeW1ib2xzLmdldChoZWFkKSwgZXhwci5wYXJ0cy5zbGljZSgxKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgZXhwci5wYXJ0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgU3RyaW5nTGl0ZXJhbChhY3Rpb246IEFTVC5TdHJpbmdMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgQm9vbGVhbkxpdGVyYWwoYWN0aW9uOiBBU1QuQm9vbGVhbkxpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBOdW1iZXJMaXRlcmFsKGFjdGlvbjogQVNULk51bWJlckxpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBOdWxsTGl0ZXJhbChhY3Rpb246IEFTVC5OdWxsTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIFVuZGVmaW5lZExpdGVyYWwoYWN0aW9uOiBBU1QuVW5kZWZpbmVkTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIC8vLyBVdGlsaXRpZXNcblxuICBvcGNvZGUobmFtZTogYW55LCBhY3Rpb246IGFueSwgLi4uYXJnczogYW55W10pIHtcbiAgICBsZXQgb3Bjb2RlID0gW25hbWUsIC4uLmFyZ3NdO1xuICAgIGlmICh0aGlzLmluY2x1ZGVNZXRhICYmIGFjdGlvbikge1xuICAgICAgb3Bjb2RlLnB1c2godGhpcy5tZXRhKGFjdGlvbikpO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2Rlcy5wdXNoKG9wY29kZSk7XG4gIH1cblxuICBwcmVwYXJlSGVscGVyKGV4cHI6IEFTVC5DYWxsKSB7XG4gICAgYXNzZXJ0SXNTaW1wbGVQYXRoKGV4cHIucGF0aCwgZXhwci5sb2MsICdoZWxwZXInKTtcblxuICAgIGxldCB7IHBhcmFtcywgaGFzaCB9ID0gZXhwcjtcblxuICAgIHRoaXMucHJlcGFyZUhhc2goaGFzaCk7XG4gICAgdGhpcy5wcmVwYXJlUGFyYW1zKHBhcmFtcyk7XG4gIH1cblxuICBwcmVwYXJlUGFyYW1zKHBhcmFtczogQVNULkV4cHJlc3Npb25bXSkge1xuICAgIGlmICghcGFyYW1zLmxlbmd0aCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFyYW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcGFyYW0gPSBwYXJhbXNbaV07XG5cbiAgICAgIGFzc2VydCh0aGlzW3BhcmFtLnR5cGVdLCBgVW5pbXBsZW1lbnRlZCAke3BhcmFtLnR5cGV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTtcbiAgICAgICh0aGlzW3BhcmFtLnR5cGVdIGFzIGFueSkocGFyYW0pO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJhbXMubGVuZ3RoKTtcbiAgfVxuXG4gIHByZXBhcmVIYXNoKGhhc2g6IEFTVC5IYXNoKSB7XG4gICAgbGV0IHBhaXJzID0gaGFzaC5wYWlycztcblxuICAgIGlmICghcGFpcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBwYWlycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHsga2V5LCB2YWx1ZSB9ID0gcGFpcnNbaV07XG5cbiAgICAgIGFzc2VydCh0aGlzW3ZhbHVlLnR5cGVdLCBgVW5pbXBsZW1lbnRlZCAke3ZhbHVlLnR5cGV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTtcbiAgICAgICh0aGlzW3ZhbHVlLnR5cGVdIGFzIGFueSkodmFsdWUpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBrZXkpO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlT2JqZWN0JywgbnVsbCwgcGFpcnMubGVuZ3RoKTtcbiAgfVxuXG4gIHByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZTogQVNULkF0dHJOb2RlWyd2YWx1ZSddKSB7XG4gICAgLy8gcmV0dXJucyB0aGUgc3RhdGljIHZhbHVlIGlmIHRoZSB2YWx1ZSBpcyBzdGF0aWNcblxuICAgIHN3aXRjaCAodmFsdWUudHlwZSkge1xuICAgICAgY2FzZSAnVGV4dE5vZGUnOlxuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIHZhbHVlLCB2YWx1ZS5jaGFycyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnTXVzdGFjaGVTdGF0ZW1lbnQnOlxuICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFt2YWx1ZV0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICdDb25jYXRTdGF0ZW1lbnQnOlxuICAgICAgICB0aGlzLnByZXBhcmVDb25jYXRQYXJ0cyh2YWx1ZS5wYXJ0cyk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdjb25jYXQnLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlQ29uY2F0UGFydHMocGFydHM6IEFTVC5Db25jYXRTdGF0ZW1lbnRbJ3BhcnRzJ10pIHtcbiAgICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBwYXJ0ID0gcGFydHNbaV07XG5cbiAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbcGFydF0pO1xuICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBwYXJ0LmNoYXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZUFycmF5JywgbnVsbCwgcGFydHMubGVuZ3RoKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZU11c3RhY2hlKFthY3Rpb25dOiBbQVNULk11c3RhY2hlU3RhdGVtZW50XSkge1xuICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gIH1cblxuICBtZXRhKG5vZGU6IEFTVC5CYXNlTm9kZSkge1xuICAgIGxldCBsb2MgPSBub2RlLmxvYztcbiAgICBpZiAoIWxvYykgeyByZXR1cm4gW107IH1cblxuICAgIGxldCB7IHNvdXJjZSwgc3RhcnQsIGVuZCB9ID0gbG9jO1xuICAgIHJldHVybiBbICdsb2MnLCBbc291cmNlIHx8IG51bGwsIFtzdGFydC5saW5lLCBzdGFydC5jb2x1bW5dLCBbZW5kLmxpbmUsIGVuZC5jb2x1bW5dXSBdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSGVscGVySW52b2NhdGlvbihtdXN0YWNoZTogQVNULk11c3RhY2hlU3RhdGVtZW50KTogbXVzdGFjaGUgaXMgQVNULk11c3RhY2hlU3RhdGVtZW50ICYgeyBwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24gfSB7XG4gIHJldHVybiAobXVzdGFjaGUucGFyYW1zICYmIG11c3RhY2hlLnBhcmFtcy5sZW5ndGggPiAwKSB8fFxuICAgIChtdXN0YWNoZS5oYXNoICYmIG11c3RhY2hlLmhhc2gucGFpcnMubGVuZ3RoID4gMCk7XG59XG5cbmZ1bmN0aW9uIGlzU2ltcGxlUGF0aCh7IHBhcnRzIH06IEFTVC5QYXRoRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAxO1xufVxuXG5mdW5jdGlvbiBpc0xvY2FsKHsgcGFydHMgfTogQVNULlBhdGhFeHByZXNzaW9uLCBzeW1ib2xzOiBTeW1ib2xUYWJsZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3ltYm9scyAmJiAvKiBwYXJ0cy5sZW5ndGggJiYgKi8gc3ltYm9scy5oYXMocGFydHNbMF0pO1xufVxuXG5mdW5jdGlvbiBpc1lpZWxkKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ3lpZWxkJztcbn1cblxuZnVuY3Rpb24gaXNQYXJ0aWFsKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ3BhcnRpYWwnO1xufVxuXG5mdW5jdGlvbiBpc0RlYnVnZ2VyKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2RlYnVnZ2VyJztcbn1cblxuZnVuY3Rpb24gaXNIYXNCbG9jayhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2snO1xufVxuXG5mdW5jdGlvbiBpc0hhc0Jsb2NrUGFyYW1zKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jay1wYXJhbXMnO1xufVxuXG5mdW5jdGlvbiBpc0J1aWx0SW5IZWxwZXIocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBpc0hhc0Jsb2NrKHBhdGgpIHx8IGlzSGFzQmxvY2tQYXJhbXMocGF0aCk7XG59XG5cbmZ1bmN0aW9uIGlzQXJnKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gISFwYXRoWydkYXRhJ107XG59XG5cbmZ1bmN0aW9uIGFzc2VydElzU2ltcGxlUGF0aChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24sIGxvYzogQVNULlNvdXJjZUxvY2F0aW9uLCBjb250ZXh0OiBzdHJpbmcpIHtcbiAgaWYgKCFpc1NpbXBsZVBhdGgocGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFxcYCR7cGF0aC5vcmlnaW5hbH1cXGAgaXMgbm90IGEgdmFsaWQgbmFtZSBmb3IgYSAke2NvbnRleHR9IG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0uYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRZaWVsZCh7IGhhc2ggfTogQVNULk11c3RhY2hlU3RhdGVtZW50KTogc3RyaW5nIHtcbiAgbGV0IHBhaXJzID0gaGFzaC5wYWlycztcblxuICBpZiAoKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS5rZXkgIT09ICd0bycpIHx8IHBhaXJzLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHlpZWxkIG9ubHkgdGFrZXMgYSBzaW5nbGUgbmFtZWQgYXJndW1lbnQ6ICd0bydgKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDEgJiYgcGFpcnNbMF0udmFsdWUudHlwZSAhPT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlYCk7XG4gIH0gZWxzZSBpZiAocGFpcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHBhaXJzWzBdLnZhbHVlIGFzIEFTVC5TdHJpbmdMaXRlcmFsKS52YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFBhcnRpYWwoeyBwYXJhbXMsIGhhc2gsIGVzY2FwZWQsIGxvYyB9OiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIC8qIDogZXhwciAqLyB7XG4gIGlmIChwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGFydGlhbCBmb3VuZCB3aXRoIG5vIGFyZ3VtZW50cy4gWW91IG11c3Qgc3BlY2lmeSBhIHRlbXBsYXRlIG5hbWUuIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9IGVsc2UgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBwYXJ0aWFsIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50cyAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgfSBlbHNlIGlmICghZXNjYXBlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihge3t7cGFydGlhbCAuLi59fX0gaXMgbm90IHN1cHBvcnRlZCwgcGxlYXNlIHVzZSB7e3BhcnRpYWwgLi4ufX0gaW5zdGVhZCAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZSh0eXBlOiBzdHJpbmcsIHsgcGFyYW1zLCBoYXNoLCBsb2MgfTogQVNULkNhbGwpOiBzdHJpbmcge1xuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMSkge1xuICAgIGxldCBwYXJhbSA9IHBhcmFtc1swXTtcbiAgICBpZiAocGFyYW0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICByZXR1cm4gcGFyYW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZSAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R5cGV9IG9ubHkgdGFrZXMgYSBzaW5nbGUgcG9zaXRpb25hbCBhcmd1bWVudCAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZERlYnVnZ2VyVXNhZ2UoeyBwYXJhbXMsIGhhc2ggfTogeyBwYXJhbXM6IEFTVC5FeHByZXNzaW9uW10sIGhhc2g6IEFTVC5IYXNoIH0pIHtcbiAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZWJ1Z2dlciBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzYCk7XG4gIH1cbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxBQUF3QyxxQkFBTSxBQUFvQixBQUFDO0FBQzFFLE9BQU8sQUFBZ0Msd0JBQU0sQUFBdUIsQUFBQztBQUNyRSxBQUFPLFNBQUUsQUFBSyxPQUFFLEFBQWdCLEFBQUUsd0JBQU0sQUFBZSxBQUFDO0FBRXhELEFBQU8sU0FBTyxBQUFTLEFBQUUsaUJBQU0sQUFBaUIsQUFBQztBQU1qRCx3QkFBd0IsQUFBVTtBQUNoQyxBQUFNLFdBQUMsQUFBSyxNQUFDLEFBQU8sWUFBSyxBQUFTLGFBQUksQ0FBQyxBQUFLLE1BQUMsQUFBTyxBQUFDLEFBQ3ZEO0FBQUMsQUFFRCxBQUFNLEFBQUMsQUFBTzs7O0FBaUJaLDhCQUFZLEFBQTBCOzs7QUFOOUIsYUFBVSxhQUFHLEFBQUMsQUFBQztBQUNmLGFBQVcsY0FBYSxBQUFFLEFBQUM7QUFDM0IsYUFBVyxjQUFHLElBQUksQUFBSyxBQUFlLEFBQUM7QUFDdkMsYUFBTyxVQUFVLEFBQUUsQUFBQztBQUNwQixhQUFXLGNBQUcsQUFBSyxBQUFDO0FBRzFCLEFBQUksYUFBQyxBQUFPLFVBQUcsQUFBTyxXQUFJLEFBQUUsQUFBQyxBQUMvQjtBQWxCQSxBQUFNLEFBa0JMOztxQkFsQk0sQUFBTywyQkFBeUIsQUFBMEIsU0FBRSxBQUFnQjtBQUNqRixZQUFJLEFBQWUsa0JBQUcsSUFBSSxBQUFlLEFBQUUsQUFBQztBQUM1QyxBQUFlLHdCQUFDLEFBQUssTUFBQyxBQUFHLEFBQUMsQUFBQztBQUUzQixZQUFJLEFBQVEsV0FBRyxJQUFJLEFBQWdCLGlCQUFDLEFBQU8sQUFBQyxBQUFDO0FBQzdDLFlBQUksQUFBTyxVQUFHLEFBQVEsU0FBQyxBQUFPLFFBQUMsQUFBZSxnQkFBQyxBQUFPLEFBQUMsQUFBQztBQUN4RCxBQUFNLGVBQUMsQUFBa0IsbUJB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QUFDLEFBQ3JFO0FBQUMsQUFDSDtBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVmlzaXRvciwgeyBTeW1ib2xUYWJsZSwgQWN0aW9uIH0gZnJvbSBcIi4vdGVtcGxhdGUtdmlzaXRvclwiO1xuaW1wb3J0IEphdmFTY3JpcHRDb21waWxlciwgeyBUZW1wbGF0ZSB9IGZyb20gXCIuL2phdmFzY3JpcHQtY29tcGlsZXJcIjtcbmltcG9ydCB7IFN0YWNrLCBnZXRBdHRyTmFtZXNwYWNlIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gXCJAZ2xpbW1lci93aXJlLWZvcm1hdFwiO1xuaW1wb3J0IHsgQVNULCBpc0xpdGVyYWwgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgbWV0YTogVDtcbn1cblxuZnVuY3Rpb24gaXNUcnVzdGVkVmFsdWUodmFsdWU6IGFueSkge1xuICByZXR1cm4gdmFsdWUuZXNjYXBlZCAhPT0gdW5kZWZpbmVkICYmICF2YWx1ZS5lc2NhcGVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZUNvbXBpbGVyPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgc3RhdGljIGNvbXBpbGU8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4sIGFzdDogQVNULlByb2dyYW0pOiBUZW1wbGF0ZTxUPiB7XG4gICAgbGV0IHRlbXBsYXRlVmlzaXRvciA9IG5ldyBUZW1wbGF0ZVZpc2l0b3IoKTtcbiAgICB0ZW1wbGF0ZVZpc2l0b3IudmlzaXQoYXN0KTtcblxuICAgIGxldCBjb21waWxlciA9IG5ldyBUZW1wbGF0ZUNvbXBpbGVyKG9wdGlvbnMpO1xuICAgIGxldCBvcGNvZGVzID0gY29tcGlsZXIucHJvY2Vzcyh0ZW1wbGF0ZVZpc2l0b3IuYWN0aW9ucyk7XG4gICAgcmV0dXJuIEphdmFTY3JpcHRDb21waWxlci5wcm9jZXNzPFQ+KG9wY29kZXMsIGFzdFsnc3ltYm9scyddLCBvcHRpb25zLm1ldGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcHRpb25zOiBDb21waWxlT3B0aW9uczxUPjtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkID0gMDtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkczogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBzeW1ib2xTdGFjayA9IG5ldyBTdGFjazxTeW1ib2xUYWJsZT4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGluY2x1ZGVNZXRhID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB9XG5cbiAgZ2V0IHN5bWJvbHMoKTogU3ltYm9sVGFibGUge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFN0YWNrLmN1cnJlbnQ7XG4gIH1cblxuICBwcm9jZXNzKGFjdGlvbnM6IEFjdGlvbltdKTogQWN0aW9uW10ge1xuICAgIGFjdGlvbnMuZm9yRWFjaCgoW25hbWUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbbmFtZV0pIHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkICR7bmFtZX0gb24gVGVtcGxhdGVDb21waWxlcmApOyB9XG4gICAgICAodGhpc1tuYW1lXSBhcyBhbnkpKC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm9wY29kZXM7XG4gIH1cblxuICBzdGFydFByb2dyYW0ocHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydFByb2dyYW0nLCBwcm9ncmFtLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kUHJvZ3JhbScsIG51bGwpO1xuICB9XG5cbiAgc3RhcnRCbG9jayhwcm9ncmFtOiBbQVNULlByb2dyYW1dKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKHByb2dyYW1bMF1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy50ZW1wbGF0ZUlkKys7XG4gICAgdGhpcy5vcGNvZGUoJ3N0YXJ0QmxvY2snLCBwcm9ncmFtLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZEJsb2NrKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy50ZW1wbGF0ZUlkcy5wdXNoKHRoaXMudGVtcGxhdGVJZCAtIDEpO1xuICAgIHRoaXMub3Bjb2RlKCdlbmRCbG9jaycsIG51bGwpO1xuICB9XG5cbiAgdGV4dChbYWN0aW9uXTogW0FTVC5UZXh0Tm9kZV0pIHtcbiAgICB0aGlzLm9wY29kZSgndGV4dCcsIGFjdGlvbiwgYWN0aW9uLmNoYXJzKTtcbiAgfVxuXG4gIGNvbW1lbnQoW2FjdGlvbl06IFtBU1QuQ29tbWVudFN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm9wY29kZSgnY29tbWVudCcsIGFjdGlvbiwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KFthY3Rpb25dOiBbQVNULkVsZW1lbnROb2RlXSkge1xuXG4gICAgdGhpcy5vcGNvZGUoJ29wZW5FbGVtZW50JywgYWN0aW9uLCBhY3Rpb24pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlKFthY3Rpb24uYXR0cmlidXRlc1tpXV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLm1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tb2RpZmllcihbYWN0aW9uLm1vZGlmaWVyc1tpXV0pO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgnZmx1c2hFbGVtZW50JywgbnVsbCk7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKGFjdGlvblsnc3ltYm9scyddKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMub3Bjb2RlKCdjbG9zZUVsZW1lbnQnLCBudWxsLCBhY3Rpb24pO1xuICB9XG5cbiAgYXR0cmlidXRlKFthY3Rpb25dOiBbQVNULkF0dHJOb2RlXSkge1xuICAgIGxldCB7IG5hbWUsIHZhbHVlIH0gPSBhY3Rpb247XG5cbiAgICBsZXQgbmFtZXNwYWNlID0gZ2V0QXR0ck5hbWVzcGFjZShuYW1lKTtcblxuICAgIGxldCBpc1N0YXRpYyA9IHRoaXMucHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAvLyBBcmd1bWVudHNcbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaXNUcnVzdGluZyA9IGlzVHJ1c3RlZFZhbHVlKHZhbHVlKTtcblxuICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdzdGF0aWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChpc1RydXN0aW5nKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCd0cnVzdGluZ0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXR0cicsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW9kaWZpZXIoW2FjdGlvbl06IFtBU1QuRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50XSkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChhY3Rpb24ucGF0aCwgYWN0aW9uLmxvYywgJ21vZGlmaWVyJyk7XG5cbiAgICBsZXQgeyBwYXRoOiB7IHBhcnRzIH0gfSA9IGFjdGlvbjtcblxuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIHRoaXMub3Bjb2RlKCdtb2RpZmllcicsIGFjdGlvbiwgcGFydHNbMF0pO1xuICB9XG5cbiAgbXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgbGV0IHsgcGF0aCB9ID0gYWN0aW9uO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnLCBhY3Rpb24sICFhY3Rpb24uZXNjYXBlZCk7XG4gICAgfSBlbHNlIGlmIChpc1lpZWxkKHBhdGgpKSB7XG4gICAgICBsZXQgdG8gPSBhc3NlcnRWYWxpZFlpZWxkKGFjdGlvbik7XG4gICAgICB0aGlzLnlpZWxkKHRvLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNQYXJ0aWFsKHBhdGgpKSB7XG4gICAgICBsZXQgcGFyYW1zID0gYXNzZXJ0VmFsaWRQYXJ0aWFsKGFjdGlvbik7XG4gICAgICB0aGlzLnBhcnRpYWwocGFyYW1zLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNEZWJ1Z2dlcihwYXRoKSkge1xuICAgICAgYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKGFjdGlvbik7XG4gICAgICB0aGlzLmRlYnVnZ2VyKCdkZWJ1Z2dlcicsIGFjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrKFthY3Rpb24vKiwgaW5kZXgsIGNvdW50Ki9dOiBbQVNULkJsb2NrU3RhdGVtZW50XSkge1xuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIGxldCB0ZW1wbGF0ZUlkID0gdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICBsZXQgaW52ZXJzZUlkID0gYWN0aW9uLmludmVyc2UgPT09IG51bGwgPyBudWxsIDogdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnYmxvY2snLCBhY3Rpb24sIGFjdGlvbi5wYXRoLnBhcnRzWzBdLCB0ZW1wbGF0ZUlkLCBpbnZlcnNlSWQpO1xuICB9XG5cbiAgLy8vIEludGVybmFsIGFjdGlvbnMsIG5vdCBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgcHJvY2Vzc2VkIGFjdGlvbnNcblxuICBhcmcoW3BhdGhdOiBbQVNULlBhdGhFeHByZXNzaW9uXSkge1xuICAgIGxldCB7IHBhcnRzOiBbaGVhZCwgLi4ucmVzdF0gfSA9IHBhdGg7XG4gICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9scy5hbGxvY2F0ZU5hbWVkKGhlYWQpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBwYXRoLCBzeW1ib2wsIHJlc3QpO1xuICB9XG5cbiAgbXVzdGFjaGVFeHByZXNzaW9uKGV4cHI6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG5cbiAgICBpZiAoaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIGV4cHIsIHBhdGgudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaXNCdWlsdEluSGVscGVyKHBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwciBhcyBBU1QuQ2FsbCk7XG4gICAgfSBlbHNlIGlmIChpc0FyZyhwYXRoKSkge1xuICAgICAgdGhpcy5hcmcoW3BhdGhdKTtcbiAgICB9IGVsc2UgaWYgKGlzSGVscGVySW52b2NhdGlvbihleHByKSkge1xuICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2hlbHBlcicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSBpZiAocGF0aC50aGlzKSB7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc0xvY2FsKHBhdGgsIHRoaXMuc3ltYm9scykpIHtcbiAgICAgIGxldCBbaGVhZCwgLi4ucGFydHNdID0gcGF0aC5wYXJ0cztcbiAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCB0aGlzLnN5bWJvbHMuZ2V0KGhlYWQpLCBwYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc1NpbXBsZVBhdGgocGF0aCkpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCd1bmtub3duJywgZXhwciwgcGF0aC5wYXJ0c1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdtYXliZUxvY2FsJywgZXhwciwgcGF0aC5wYXJ0cyk7XG4gICAgfVxuICB9XG5cbiAgLy8vIEludGVybmFsIFN5bnRheFxuXG4gIHlpZWxkKHRvOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgIHRoaXMub3Bjb2RlKCd5aWVsZCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sodG8pKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKF9uYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5vcGNvZGUoJ2RlYnVnZ2VyJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKSk7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2snLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIGhhc0Jsb2NrUGFyYW1zKG5hbWU6IHN0cmluZywgYWN0aW9uOiBBU1QuQ2FsbCkge1xuICAgIHRoaXMub3Bjb2RlKCdoYXNCbG9ja1BhcmFtcycsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sobmFtZSkpO1xuICB9XG5cbiAgcGFydGlhbChfcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgncGFydGlhbCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgYnVpbHRJbkhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG4gICAgaWYgKGlzSGFzQmxvY2socGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrKG5hbWUsIGV4cHIpO1xuICAgIH0gZWxzZSBpZiAoaXNIYXNCbG9ja1BhcmFtcyhwYXRoKSkge1xuICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgIHRoaXMuaGFzQmxvY2tQYXJhbXMobmFtZSwgZXhwcik7XG4gICAgfVxuICB9XG5cbiAgLy8vIEV4cHJlc3Npb25zLCBpbnZva2VkIHJlY3Vyc2l2ZWx5IGZyb20gcHJlcGFyZVBhcmFtcyBhbmQgcHJlcGFyZUhhc2hcblxuICBTdWJFeHByZXNzaW9uKGV4cHI6IEFTVC5TdWJFeHByZXNzaW9uKSB7XG4gICAgaWYgKGlzQnVpbHRJbkhlbHBlcihleHByLnBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBleHByLnBhdGgucGFydHNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIFBhdGhFeHByZXNzaW9uKGV4cHI6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICAgIGlmIChleHByLmRhdGEpIHtcbiAgICAgIHRoaXMuYXJnKFtleHByXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB7IHN5bWJvbHMgfSA9IHRoaXM7XG4gICAgICBsZXQgW2hlYWRdID0gZXhwci5wYXJ0cztcblxuICAgICAgaWYgKGV4cHIudGhpcykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgZXhwci5wYXJ0cyk7XG4gICAgICB9IGVsc2UgIGlmIChzeW1ib2xzLmhhcyhoZWFkKSkge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgc3ltYm9scy5nZXQoaGVhZCksIGV4cHIucGFydHMuc2xpY2UoMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFN0cmluZ0xpdGVyYWwoYWN0aW9uOiBBU1QuU3RyaW5nTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIEJvb2xlYW5MaXRlcmFsKGFjdGlvbjogQVNULkJvb2xlYW5MaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVtYmVyTGl0ZXJhbChhY3Rpb246IEFTVC5OdW1iZXJMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVsbExpdGVyYWwoYWN0aW9uOiBBU1QuTnVsbExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBVbmRlZmluZWRMaXRlcmFsKGFjdGlvbjogQVNULlVuZGVmaW5lZExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgb3Bjb2RlKG5hbWU6IGFueSwgYWN0aW9uOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbGV0IG9wY29kZSA9IFtuYW1lLCAuLi5hcmdzXTtcbiAgICBpZiAodGhpcy5pbmNsdWRlTWV0YSAmJiBhY3Rpb24pIHtcbiAgICAgIG9wY29kZS5wdXNoKHRoaXMubWV0YShhY3Rpb24pKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMucHVzaChvcGNvZGUpO1xuICB9XG5cbiAgcHJlcGFyZUhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChleHByLnBhdGgsIGV4cHIubG9jLCAnaGVscGVyJyk7XG5cbiAgICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IGV4cHI7XG5cbiAgICB0aGlzLnByZXBhcmVIYXNoKGhhc2gpO1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgcHJlcGFyZVBhcmFtcyhwYXJhbXM6IEFTVC5FeHByZXNzaW9uW10pIHtcbiAgICBpZiAoIXBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhcmFtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcmFtID0gcGFyYW1zW2ldO1xuXG4gICAgICAodGhpc1twYXJhbS50eXBlXSBhcyBhbnkpKHBhcmFtKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZUFycmF5JywgbnVsbCwgcGFyYW1zLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlSGFzaChoYXNoOiBBU1QuSGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgICBpZiAoIXBhaXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuXG4gICAgICAodGhpc1t2YWx1ZS50eXBlXSBhcyBhbnkpKHZhbHVlKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwga2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZU9iamVjdCcsIG51bGwsIHBhaXJzLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWU6IEFTVC5BdHRyTm9kZVsndmFsdWUnXSkge1xuICAgIC8vIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBpZiB0aGUgdmFsdWUgaXMgc3RhdGljXG5cbiAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1RleHROb2RlJzpcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCB2YWx1ZSwgdmFsdWUuY2hhcnMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5wcmVwYXJlQ29uY2F0UGFydHModmFsdWUucGFydHMpO1xuICAgICAgICB0aGlzLm9wY29kZSgnY29uY2F0JywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZUNvbmNhdFBhcnRzKHBhcnRzOiBBU1QuQ29uY2F0U3RhdGVtZW50WydwYXJ0cyddKSB7XG4gICAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3BhcnRdKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgcGFydC5jaGFycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcnRzLmxlbmd0aCk7XG4gIH1cblxuICBhdHRyaWJ1dGVNdXN0YWNoZShbYWN0aW9uXTogW0FTVC5NdXN0YWNoZVN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICB9XG5cbiAgbWV0YShub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICBsZXQgbG9jID0gbm9kZS5sb2M7XG4gICAgaWYgKCFsb2MpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICBsZXQgeyBzb3VyY2UsIHN0YXJ0LCBlbmQgfSA9IGxvYztcbiAgICByZXR1cm4gWyAnbG9jJywgW3NvdXJjZSB8fCBudWxsLCBbc3RhcnQubGluZSwgc3RhcnQuY29sdW1uXSwgW2VuZC5saW5lLCBlbmQuY29sdW1uXV0gXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hlbHBlckludm9jYXRpb24obXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IG11c3RhY2hlIGlzIEFTVC5NdXN0YWNoZVN0YXRlbWVudCAmIHsgcGF0aDogQVNULlBhdGhFeHByZXNzaW9uIH0ge1xuICByZXR1cm4gKG11c3RhY2hlLnBhcmFtcyAmJiBtdXN0YWNoZS5wYXJhbXMubGVuZ3RoID4gMCkgfHxcbiAgICAobXVzdGFjaGUuaGFzaCAmJiBtdXN0YWNoZS5oYXNoLnBhaXJzLmxlbmd0aCA+IDApO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZVBhdGgoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbCh7IHBhcnRzIH06IEFTVC5QYXRoRXhwcmVzc2lvbiwgc3ltYm9sczogU3ltYm9sVGFibGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN5bWJvbHMgJiYgLyogcGFydHMubGVuZ3RoICYmICovIHN5bWJvbHMuaGFzKHBhcnRzWzBdKTtcbn1cblxuZnVuY3Rpb24gaXNZaWVsZChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICd5aWVsZCc7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdwYXJ0aWFsJztcbn1cblxuZnVuY3Rpb24gaXNEZWJ1Z2dlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdkZWJ1Z2dlcic7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2socGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrJztcbn1cblxuZnVuY3Rpb24gaXNIYXNCbG9ja1BhcmFtcyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2stcGFyYW1zJztcbn1cblxuZnVuY3Rpb24gaXNCdWlsdEluSGVscGVyKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gaXNIYXNCbG9jayhwYXRoKSB8fCBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBpc0FyZyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcGF0aFsnZGF0YSddO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc1NpbXBsZVBhdGgocGF0aDogQVNULlBhdGhFeHByZXNzaW9uLCBsb2M6IEFTVC5Tb3VyY2VMb2NhdGlvbiwgY29udGV4dDogc3RyaW5nKSB7XG4gIGlmICghaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBcXGAke3BhdGgub3JpZ2luYWx9XFxgIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgJHtjb250ZXh0fSBvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9LmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkWWllbGQoeyBoYXNoIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IHN0cmluZyB7XG4gIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgaWYgKChwYWlycy5sZW5ndGggPT09IDEgJiYgcGFpcnNbMF0ua2V5ICE9PSAndG8nKSB8fCBwYWlycy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB5aWVsZCBvbmx5IHRha2VzIGEgc2luZ2xlIG5hbWVkIGFyZ3VtZW50OiAndG8nYCk7XG4gIH0gZWxzZSBpZiAocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLnZhbHVlLnR5cGUgIT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZWApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChwYWlyc1swXS52YWx1ZSBhcyBBU1QuU3RyaW5nTGl0ZXJhbCkudmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQYXJ0aWFsKHsgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBsb2MgfTogQVNULk11c3RhY2hlU3RhdGVtZW50KSAvKiA6IGV4cHIgKi8ge1xuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcnRpYWwgZm91bmQgd2l0aCBubyBhcmd1bWVudHMuIFlvdSBtdXN0IHNwZWNpZnkgYSB0ZW1wbGF0ZSBuYW1lLiAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgfSBlbHNlIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgcGFydGlhbCBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHMgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoIWVzY2FwZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHt7e3BhcnRpYWwgLi4ufX19IGlzIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSB1c2Uge3twYXJ0aWFsIC4uLn19IGluc3RlYWQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UodHlwZTogc3RyaW5nLCB7IHBhcmFtcywgaGFzaCwgbG9jIH06IEFTVC5DYWxsKTogc3RyaW5nIHtcbiAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R5cGV9IGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEpIHtcbiAgICBsZXQgcGFyYW0gPSBwYXJhbXNbMF07XG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgcmV0dXJuIHBhcmFtLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWUgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKHsgcGFyYW1zLCBoYXNoIH06IHsgcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBoYXNoOiBBU1QuSGFzaCB9KSB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZWJ1Z2dlciBkb2VzIG5vdCB0YWtlIGFueSBwb3NpdGlvbmFsIGFyZ3VtZW50c2ApO1xuICB9XG59XG4iXX0= |
@@ -11,3 +11,3 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | ||
import { dict, unreachable, expect } from '@glimmer/util'; | ||
import { dict } from '@glimmer/util'; | ||
export var SymbolTable = function () { | ||
@@ -52,5 +52,3 @@ function SymbolTable() { | ||
ProgramSymbolTable.prototype.get = function get(_name) { | ||
throw unreachable(); | ||
}; | ||
ProgramSymbolTable.prototype.get = function get(_name) {}; | ||
@@ -358,3 +356,3 @@ ProgramSymbolTable.prototype.getLocalsMap = function getLocalsMap() { | ||
get: function () { | ||
return expect(this.getCurrentFrame(), "Expected a current frame"); | ||
return this.getCurrentFrame(); | ||
} | ||
@@ -385,2 +383,2 @@ }]); | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUVBLEFBQU8sU0FBZ0IsQUFBSSxNQUFFLEFBQVcsYUFBRSxBQUFNLEFBQUUsY0FBTSxBQUFlLEFBQUM7QUFFeEUsQUFBTSxXQUNKLEFBQU07Ozs7O2dCQUFDLEFBQUc7QUFDUixBQUFNLGVBQUMsSUFBSSxBQUFrQixBQUFFLEFBQUMsQUFDbEM7QUFBQzs7MEJBWUQsQUFBSyx1QkFBQyxBQUFnQjs7O0FBQ3BCLFlBQUksQUFBTyxpQkFBVSxBQUFHO0FBQUMsQUFBSSxtQkFBSSxBQUFJLE1BQUMsQUFBUSxTQUFDLEFBQUksQUFBQyxBQUFDLEFBQUM7U0FBeEMsQUFBTTtBQUNwQixBQUFNLGVBQUMsSUFBSSxBQUFnQixpQkFBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQU8sQUFBQyxBQUFDLEFBQ3JEO0FBQUMsQUFDRjs7OztBQUVELEFBQU0sV0FBMEI7OztBQUFoQzs7Ozs7QUFDUyxlQUFPLFVBQWEsQUFBRSxBQUFDO0FBRXRCLGVBQUksT0FBRyxBQUFDLEFBQUM7QUFDVCxlQUFLLFFBQUcsQUFBSSxBQUFVLEFBQUM7QUFDdkIsZUFBTSxTQUFHLEFBQUksQUFBVSxBQUFDLEFBMENsQzs7QUFBQzs7aUNBeENDLEFBQUcsbUJBQUMsQUFBYTtBQUNmLEFBQU0sZUFBQyxBQUFLLEFBQUMsQUFDZjtBQUFDOztpQ0FFRCxBQUFHLG1CQUFDLEFBQWE7QUFDZixjQUFNLEFBQVcsQUFBRSxBQUFDLEFBQ3RCO0FBQUM7O2lDQUVELEFBQVk7QUFDVixBQUFNLGVBQUMsQUFBRSxBQUFDLEFBQ1o7QUFBQzs7aUNBRUQsQUFBVztBQUNULEFBQU0sZUFBQyxBQUFFLEFBQUMsQUFDWjtBQUFDOztpQ0FFRCxBQUFhLHVDQUFDLEFBQVk7QUFDeEIsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQUss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QUFLLEFBQUMsQUFDZjtBQUFDLEFBQ0g7QUFBQztBQUVELEFBQU0sV0FBQyxDQUFDLEFBQUMsQUFBQyxBQUNaO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQ29yZSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IERpY3QsIE9wdGlvbiwgZGljdCwgdW5yZWFjaGFibGUsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3ltYm9sVGFibGUge1xuICBzdGF0aWMgdG9wKCk6IFByb2dyYW1TeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9ncmFtU3ltYm9sVGFibGUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj47XG4gIGFic3RyYWN0IGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm87XG5cbiAgYWJzdHJhY3QgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgY2hpbGQobG9jYWxzOiBzdHJpbmdbXSk6IEJsb2NrU3ltYm9sVGFibGUge1xuICAgIGxldCBzeW1ib2xzID0gbG9jYWxzLm1hcChuYW1lID0+IHRoaXMuYWxsb2NhdGUobmFtZSkpO1xuICAgIHJldHVybiBuZXcgQmxvY2tTeW1ib2xUYWJsZSh0aGlzLCBsb2NhbHMsIHN5bWJvbHMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc2l6ZSA9IDE7XG4gIHByaXZhdGUgbmFtZWQgPSBkaWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBkaWN0PG51bWJlcj4oKTtcblxuICBoYXMoX25hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldChfbmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IHVucmVhY2hhYmxlKCk7XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXTtcblxuICAgIGlmICghbmFtZWQpIHtcbiAgICAgIG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYEAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWVkO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdO1xuXG4gICAgaWYgKCFibG9jaykge1xuICAgICAgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYCYke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0aGlzLnN5bWJvbHMucHVzaChpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gdGhpcy5zaXplKys7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsb2NrU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTeW1ib2xUYWJsZSwgcHVibGljIHN5bWJvbHM6IHN0cmluZ1tdLCBwdWJsaWMgc2xvdHM6IG51bWJlcltdKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpICE9PSAtMSkgfHwgdGhpcy5wYXJlbnQuaGFzKG5hbWUpO1xuICB9XG5cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IHNsb3QgPSB0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKTtcbiAgICByZXR1cm4gc2xvdCA9PT0gLTEgPyB0aGlzLnBhcmVudC5nZXQobmFtZSkgOiB0aGlzLnNsb3RzW3Nsb3RdO1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgbGV0IGRpY3QgPSB0aGlzLnBhcmVudC5nZXRMb2NhbHNNYXAoKTtcbiAgICB0aGlzLnN5bWJvbHMuZm9yRWFjaChzeW1ib2wgPT4gZGljdFtzeW1ib2xdID0gdGhpcy5nZXQoc3ltYm9sKSk7XG4gICAgcmV0dXJuIGRpY3Q7XG4gIH1cblxuICBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvIHtcbiAgICBsZXQgbG9jYWxzID0gdGhpcy5nZXRMb2NhbHNNYXAoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobG9jYWxzKS5tYXAoc3ltYm9sID0+IGxvY2Fsc1tzeW1ib2xdKTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVOYW1lZChuYW1lKTtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVCbG9jayhuYW1lKTtcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlKGlkZW50aWZpZXIpO1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgaW4gYW4gQVNUIGFuZCBvdXRwdXRzIGEgbGlzdCBvZiBhY3Rpb25zIHRvIGJlIGNvbnN1bWVkXG4gKiBieSBhIGNvbXBpbGVyLiBGb3IgZXhhbXBsZSwgdGhlIHRlbXBsYXRlXG4gKlxuICogICAgIGZvb3t7YmFyfX08ZGl2PmJhejwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDNdXSxcbiAqICAgICAgWydtdXN0YWNoZScsIFttdXN0YWNoZU5vZGUsIDEsIDNdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgMywgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDNdLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGlzIHZpc2l0b3Igd2Fsa3MgdGhlIEFTVCBkZXB0aCBmaXJzdCBhbmQgYmFja3dhcmRzLiBBc1xuICogYSByZXN1bHQgdGhlIGJvdHRvbS1tb3N0IGNoaWxkIHRlbXBsYXRlIHdpbGwgYXBwZWFyIGF0IHRoZVxuICogdG9wIG9mIHRoZSBhY3Rpb25zIGxpc3Qgd2hlcmVhcyB0aGUgcm9vdCB0ZW1wbGF0ZSB3aWxsIGFwcGVhclxuICogYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdC4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAgIDxkaXY+e3sjaWZ9fWZvb3t7ZWxzZX19YmFyPGI+PC9iPnt7L2lmfX08L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAyLCAwXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDIsIDBdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDJdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDJdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMSwgMV1dLFxuICogICAgICBbJ2Jsb2NrJywgW2Jsb2NrTm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBpcyBtYWludGFpbmVkIGJ5IGEgc3RhY2sgb2YgZnJhbWVzLlxuICogV2hlbmV2ZXIgYSBub2RlIHdpdGggY2hpbGRyZW4gaXMgZW50ZXJlZCAoZWl0aGVyIGEgUHJvZ3JhbU5vZGVcbiAqIG9yIGFuIEVsZW1lbnROb2RlKSBhIGZyYW1lIGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFjay4gVGhlIGZyYW1lXG4gKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBvZiB0aGF0XG4gKiBub2RlLiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgIC0gaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hpbGQgbm9kZSBiZWluZyB2aXNpdGVkXG4gKiAgIC0gdGhlIG51bWJlciBvZiBtdXN0YWNoZXMgY29udGFpbmVkIHdpdGhpbiBpdHMgY2hpbGQgbm9kZXNcbiAqICAgLSB0aGUgbGlzdCBvZiBhY3Rpb25zIGdlbmVyYXRlZCBieSBpdHMgY2hpbGQgbm9kZXNcbiAqL1xuXG5jbGFzcyBGcmFtZSB7XG4gIHB1YmxpYyBwYXJlbnROb2RlOiBPcHRpb248T2JqZWN0PiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZHJlbjogT3B0aW9uPEFTVC5Ob2RlW10+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkSW5kZXg6IE9wdGlvbjxudW1iZXI+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkQ291bnQ6IE9wdGlvbjxudW1iZXI+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkVGVtcGxhdGVDb3VudCA9IDA7XG4gIHB1YmxpYyBtdXN0YWNoZUNvdW50ID0gMDtcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIHB1YmxpYyBibGFua0NoaWxkVGV4dE5vZGVzOiBPcHRpb248bnVtYmVyW10+ID0gbnVsbDtcbiAgcHVibGljIHN5bWJvbHM6IE9wdGlvbjxTeW1ib2xUYWJsZT4gPSBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEFjdGlvbiB7XG4gIGV4cG9ydCB0eXBlIFN0YXJ0UHJvZ3JhbSA9IFsnc3RhcnRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIEVuZFByb2dyYW0gPSBbJ2VuZFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBTdGFydEJsb2NrID0gWydzdGFydEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIEVuZEJsb2NrID0gWydlbmRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIEJsb2NrID0gWydibG9jaycsIFtBU1QuQmxvY2tTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE11c3RhY2hlID0gWydtdXN0YWNoZScsIFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgfCBBU1QuUGFydGlhbFN0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgT3BlbkVsZW1lbnQgPSBbJ29wZW5FbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgQ2xvc2VFbGVtZW50ID0gWydjbG9zZUVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBUZXh0ID0gWyd0ZXh0JywgW0FTVC5UZXh0Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQ29tbWVudCA9IFsnY29tbWVudCcsIFtBU1QuQ29tbWVudFN0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcblxuICBleHBvcnQgdHlwZSBBY3Rpb24gPVxuICAgICAgU3RhcnRQcm9ncmFtXG4gICAgfCBFbmRQcm9ncmFtXG4gICAgfCBTdGFydEJsb2NrXG4gICAgfCBFbmRCbG9ja1xuICAgIHwgQmxvY2tcbiAgICB8IE11c3RhY2hlXG4gICAgfCBPcGVuRWxlbWVudFxuICAgIHwgQ2xvc2VFbGVtZW50XG4gICAgfCBUZXh0XG4gICAgfCBDb21tZW50XG4gICAgO1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb24gPSBBY3Rpb24uQWN0aW9uO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZVZpc2l0b3Ige1xuICBwcml2YXRlIGZyYW1lU3RhY2s6IEZyYW1lW10gPSBbXTtcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIHByaXZhdGUgcHJvZ3JhbURlcHRoID0gLTE7XG5cbiAgdmlzaXQobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgdGhpc1tub2RlLnR5cGVdKG5vZGUpO1xuICB9XG5cbiAgLy8gVHJhdmVyc2FsIG1ldGhvZHNcblxuICBQcm9ncmFtKHByb2dyYW06IEFTVC5Qcm9ncmFtKSB7XG4gICAgdGhpcy5wcm9ncmFtRGVwdGgrKztcblxuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gICAgbGV0IHByb2dyYW1GcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBpZiAoIXBhcmVudEZyYW1lKSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBTeW1ib2xUYWJsZS50b3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG4gICAgfVxuXG4gICAgbGV0IHN0YXJ0VHlwZSwgZW5kVHlwZTtcblxuICAgIGlmICh0aGlzLnByb2dyYW1EZXB0aCA9PT0gMCkge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0UHJvZ3JhbSc7XG4gICAgICBlbmRUeXBlID0gJ2VuZFByb2dyYW0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRCbG9jayc7XG4gICAgICBlbmRUeXBlID0gJ2VuZEJsb2NrJztcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUucGFyZW50Tm9kZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkcmVuID0gcHJvZ3JhbS5ib2R5O1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZENvdW50ID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aDtcbiAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW2VuZFR5cGUsIFtwcm9ncmFtLCB0aGlzLnByb2dyYW1EZXB0aF1dIGFzIEFjdGlvbik7XG4gICAgcHJvZ3JhbUZyYW1lLnN5bWJvbHMgPSBwcm9ncmFtWydzeW1ib2xzJ107XG5cbiAgICBmb3IgKGxldCBpID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBwcm9ncmFtRnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KHByb2dyYW0uYm9keVtpXSk7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbc3RhcnRUeXBlLCBbXG4gICAgICBwcm9ncmFtLCBwcm9ncmFtRnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50LFxuICAgICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXG4gICAgXV0gYXMgQWN0aW9uKTtcbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICB0aGlzLnByb2dyYW1EZXB0aC0tO1xuXG4gICAgLy8gUHVzaCB0aGUgY29tcGxldGVkIHRlbXBsYXRlIGludG8gdGhlIGdsb2JhbCBhY3Rpb25zIGxpc3RcbiAgICBpZiAocGFyZW50RnJhbWUpIHsgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50Kys7IH1cbiAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5wcm9ncmFtRnJhbWUuYWN0aW9ucy5yZXZlcnNlKCkpO1xuICB9XG5cbiAgRWxlbWVudE5vZGUoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgbGV0IGVsZW1lbnRGcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBlbGVtZW50RnJhbWUucGFyZW50Tm9kZSA9IGVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRDb3VudCA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ICs9IGVsZW1lbnQubW9kaWZpZXJzLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIGVsZW1lbnRGcmFtZS5zeW1ib2xzID0gZWxlbWVudFsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQoZWxlbWVudC5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYWN0aW9uQXJnczogW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkSW5kZXghLFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRDb3VudCFcbiAgICBdO1xuXG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChbJ2Nsb3NlRWxlbWVudCcsIGFjdGlvbkFyZ3NdKTtcblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5hdHRyaWJ1dGVzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZWxlbWVudEZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmNoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgb3BlbiA9IFsnb3BlbkVsZW1lbnQnLCBbLi4uYWN0aW9uQXJncywgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQsIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKV1dIGFzIEFjdGlvbi5PcGVuRWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKG9wZW4pO1xuXG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBlbGVtZW50J3MgZnJhbWUgc3RhdGUgdG8gdGhlIHBhcmVudCBmcmFtZVxuICAgIGlmIChlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCA+IDApIHsgcGFyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrOyB9XG4gICAgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50ICs9IGVsZW1lbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQ7XG4gICAgcGFyZW50RnJhbWUuYWN0aW9ucy5wdXNoKC4uLmVsZW1lbnRGcmFtZS5hY3Rpb25zKTtcbiAgfVxuXG4gIEF0dHJOb2RlKGF0dHI6IEFTVC5BdHRyTm9kZSkge1xuICAgIGlmIChhdHRyLnZhbHVlLnR5cGUgIT09ICdUZXh0Tm9kZScpIHtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICB9XG4gIH07XG5cbiAgVGV4dE5vZGUodGV4dDogQVNULlRleHROb2RlKSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgaWYgKHRleHQuY2hhcnMgPT09ICcnKSB7XG4gICAgICBmcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzIS5wdXNoKGRvbUluZGV4T2YoZnJhbWUuY2hpbGRyZW4hLCB0ZXh0KSk7XG4gICAgfVxuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ3RleHQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQmxvY2tTdGF0ZW1lbnQobm9kZTogQVNULkJsb2NrU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG5cbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnYmxvY2snLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG5cbiAgICBpZiAobm9kZS5pbnZlcnNlKSB7IHRoaXMudmlzaXQobm9kZS5pbnZlcnNlKTsgfVxuICAgIGlmIChub2RlLnByb2dyYW0pIHsgdGhpcy52aXNpdChub2RlLnByb2dyYW0pOyB9XG4gIH07XG5cbiAgUGFydGlhbFN0YXRlbWVudChub2RlOiBBU1QuUGFydGlhbFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBDb21tZW50U3RhdGVtZW50KHRleHQ6IEFTVC5Db21tZW50U3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnY29tbWVudCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQoKSB7XG4gICAgLy8gSW50ZW50aW9uYWwgZW1wdHk6IEhhbmRsZWJhcnMgY29tbWVudHMgc2hvdWxkIG5vdCBhZmZlY3Qgb3V0cHV0LlxuICB9O1xuXG4gIE11c3RhY2hlU3RhdGVtZW50KG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbXVzdGFjaGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIC8vIEZyYW1lIGhlbHBlcnNcblxuICBwcml2YXRlIGdldCBjdXJyZW50RnJhbWUoKTogRnJhbWUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5nZXRDdXJyZW50RnJhbWUoKSwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgZnJhbWVcIik7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGcmFtZSgpOiBPcHRpb248RnJhbWU+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEZyYW1lKCkge1xuICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBwcml2YXRlIHBvcEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzOiBBU1QuTm9kZVtdLCBkb21Ob2RlOiBBU1QuVGV4dE5vZGUgfCBBU1QuRWxlbWVudE5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUVBLEFBQU8sU0FBZ0IsQUFBSSxBQUFFLFlBQU0sQUFBZSxBQUFDO0FBRW5ELEFBQU0sV0FDSixBQUFNOzs7OztnQkFBQyxBQUFHO0FBQ1IsQUFBTSxlQUFDLElBQUksQUFBa0IsQUFBRSxBQUFDLEFBQ2xDO0FBQUM7OzBCQVlELEFBQUssdUJBQUMsQUFBZ0I7OztBQUNwQixZQUFJLEFBQU8saUJBQVUsQUFBRztBQUFDLEFBQUksbUJBQUksQUFBSSxNQUFDLEFBQVEsU0FBQyxBQUFJLEFBQUMsQUFBQyxBQUFDO1NBQXhDLEFBQU07QUFDcEIsQUFBTSxlQUFDLElBQUksQUFBZ0IsaUJBQUMsQUFBSSxNQUFFLEFBQU0sUUFBRSxBQUFPLEFBQUMsQUFBQyxBQUNyRDtBQUFDLEFBQ0Y7Ozs7QUFFRCxBQUFNLFdBQTBCOzs7QUFBaEM7Ozs7O0FBQ1MsZUFBTyxVQUFhLEFBQUUsQUFBQztBQUV0QixlQUFJLE9BQUcsQUFBQyxBQUFDO0FBQ1QsZUFBSyxRQUFHLEFBQUksQUFBVSxBQUFDO0FBQ3ZCLGVBQU0sU0FBRyxBQUFJLEFBQVUsQUFBQyxBQXlDbEM7O0FBQUM7O2lDQXZDQyxBQUFHLG1CQUFDLEFBQWE7QUFDZixBQUFNLGVBQUMsQUFBSyxBQUFDLEFBQ2Y7QUFBQzs7aUNBRUQsQUFBRyxtQkFBQyxBQUFhLE9BQ2pCLENBQUM7O2lDQUVELEFBQVk7QUFDVixBQUFNLGVBQUMsQUFBRSxBQUFDLEFBQ1o7QUFBQzs7aUNBRUQsQUFBVztBQUNULEFBQU0sZUFBQyxBQUFFLEFBQUMsQUFDWjtBQUFDOztpQ0FFRCxBQUFhLHVDQUFDLEFBQVk7QUFDeEIsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFJLEFBQUMsQUFBQztBQUU3QixBQUFFLEFBQUMsWUFBQyxDQUFD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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQ29yZSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IERpY3QsIE9wdGlvbiwgZGljdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3ltYm9sVGFibGUge1xuICBzdGF0aWMgdG9wKCk6IFByb2dyYW1TeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9ncmFtU3ltYm9sVGFibGUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj47XG4gIGFic3RyYWN0IGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm87XG5cbiAgYWJzdHJhY3QgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgY2hpbGQobG9jYWxzOiBzdHJpbmdbXSk6IEJsb2NrU3ltYm9sVGFibGUge1xuICAgIGxldCBzeW1ib2xzID0gbG9jYWxzLm1hcChuYW1lID0+IHRoaXMuYWxsb2NhdGUobmFtZSkpO1xuICAgIHJldHVybiBuZXcgQmxvY2tTeW1ib2xUYWJsZSh0aGlzLCBsb2NhbHMsIHN5bWJvbHMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc2l6ZSA9IDE7XG4gIHByaXZhdGUgbmFtZWQgPSBkaWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBkaWN0PG51bWJlcj4oKTtcblxuICBoYXMoX25hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldChfbmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV07XG5cbiAgICBpZiAoIW5hbWVkKSB7XG4gICAgICBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGBAJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBuYW1lZDtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXTtcblxuICAgIGlmICghYmxvY2spIHtcbiAgICAgIGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGAmJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBibG9jaztcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdGhpcy5zeW1ib2xzLnB1c2goaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSsrO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbG9ja1N5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU3ltYm9sVGFibGUsIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSwgcHVibGljIHNsb3RzOiBudW1iZXJbXSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHx8IHRoaXMucGFyZW50LmhhcyhuYW1lKTtcbiAgfVxuXG4gIGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBzbG90ID0gdGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSk7XG4gICAgcmV0dXJuIHNsb3QgPT09IC0xID8gdGhpcy5wYXJlbnQuZ2V0KG5hbWUpIDogdGhpcy5zbG90c1tzbG90XTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIGxldCBkaWN0ID0gdGhpcy5wYXJlbnQuZ2V0TG9jYWxzTWFwKCk7XG4gICAgdGhpcy5zeW1ib2xzLmZvckVhY2goc3ltYm9sID0+IGRpY3Rbc3ltYm9sXSA9IHRoaXMuZ2V0KHN5bWJvbCkpO1xuICAgIHJldHVybiBkaWN0O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgbGV0IGxvY2FscyA9IHRoaXMuZ2V0TG9jYWxzTWFwKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxvY2FscykubWFwKHN5bWJvbCA9PiBsb2NhbHNbc3ltYm9sXSk7XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlTmFtZWQobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlQmxvY2sobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZShpZGVudGlmaWVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGluIGFuIEFTVCBhbmQgb3V0cHV0cyBhIGxpc3Qgb2YgYWN0aW9ucyB0byBiZSBjb25zdW1lZFxuICogYnkgYSBjb21waWxlci4gRm9yIGV4YW1wbGUsIHRoZSB0ZW1wbGF0ZVxuICpcbiAqICAgICBmb297e2Jhcn19PGRpdj5iYXo8L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAzXV0sXG4gKiAgICAgIFsnbXVzdGFjaGUnLCBbbXVzdGFjaGVOb2RlLCAxLCAzXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDMsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhpcyB2aXNpdG9yIHdhbGtzIHRoZSBBU1QgZGVwdGggZmlyc3QgYW5kIGJhY2t3YXJkcy4gQXNcbiAqIGEgcmVzdWx0IHRoZSBib3R0b20tbW9zdCBjaGlsZCB0ZW1wbGF0ZSB3aWxsIGFwcGVhciBhdCB0aGVcbiAqIHRvcCBvZiB0aGUgYWN0aW9ucyBsaXN0IHdoZXJlYXMgdGhlIHJvb3QgdGVtcGxhdGUgd2lsbCBhcHBlYXJcbiAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QuIEZvciBleGFtcGxlLFxuICpcbiAqICAgICA8ZGl2Pnt7I2lmfX1mb297e2Vsc2V9fWJhcjxiPjwvYj57ey9pZn19PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMiwgMF1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyLCAwXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAyXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDEsIDFdXSxcbiAqICAgICAgWydibG9jaycsIFtibG9ja05vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgaXMgbWFpbnRhaW5lZCBieSBhIHN0YWNrIG9mIGZyYW1lcy5cbiAqIFdoZW5ldmVyIGEgbm9kZSB3aXRoIGNoaWxkcmVuIGlzIGVudGVyZWQgKGVpdGhlciBhIFByb2dyYW1Ob2RlXG4gKiBvciBhbiBFbGVtZW50Tm9kZSkgYSBmcmFtZSBpcyBwdXNoZWQgb250byB0aGUgc3RhY2suIFRoZSBmcmFtZVxuICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgb2YgdGhhdFxuICogbm9kZS4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAtIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoaWxkIG5vZGUgYmVpbmcgdmlzaXRlZFxuICogICAtIHRoZSBudW1iZXIgb2YgbXVzdGFjaGVzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGNoaWxkIG5vZGVzXG4gKiAgIC0gdGhlIGxpc3Qgb2YgYWN0aW9ucyBnZW5lcmF0ZWQgYnkgaXRzIGNoaWxkIG5vZGVzXG4gKi9cblxuY2xhc3MgRnJhbWUge1xuICBwdWJsaWMgcGFyZW50Tm9kZTogT3B0aW9uPE9iamVjdD4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRyZW46IE9wdGlvbjxBU1QuTm9kZVtdPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZEluZGV4OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZENvdW50OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZFRlbXBsYXRlQ291bnQgPSAwO1xuICBwdWJsaWMgbXVzdGFjaGVDb3VudCA9IDA7XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgYmxhbmtDaGlsZFRleHROb2RlczogT3B0aW9uPG51bWJlcltdPiA9IG51bGw7XG4gIHB1YmxpYyBzeW1ib2xzOiBPcHRpb248U3ltYm9sVGFibGU+ID0gbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb24ge1xuICBleHBvcnQgdHlwZSBTdGFydFByb2dyYW0gPSBbJ3N0YXJ0UHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRQcm9ncmFtID0gWydlbmRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgU3RhcnRCbG9jayA9IFsnc3RhcnRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRCbG9jayA9IFsnZW5kQmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBCbG9jayA9IFsnYmxvY2snLCBbQVNULkJsb2NrU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBNdXN0YWNoZSA9IFsnbXVzdGFjaGUnLCBbQVNULk11c3RhY2hlU3RhdGVtZW50IHwgQVNULlBhcnRpYWxTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE9wZW5FbGVtZW50ID0gWydvcGVuRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIENsb3NlRWxlbWVudCA9IFsnY2xvc2VFbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgVGV4dCA9IFsndGV4dCcsIFtBU1QuVGV4dE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIENvbW1lbnQgPSBbJ2NvbW1lbnQnLCBbQVNULkNvbW1lbnRTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uID1cbiAgICAgIFN0YXJ0UHJvZ3JhbVxuICAgIHwgRW5kUHJvZ3JhbVxuICAgIHwgU3RhcnRCbG9ja1xuICAgIHwgRW5kQmxvY2tcbiAgICB8IEJsb2NrXG4gICAgfCBNdXN0YWNoZVxuICAgIHwgT3BlbkVsZW1lbnRcbiAgICB8IENsb3NlRWxlbWVudFxuICAgIHwgVGV4dFxuICAgIHwgQ29tbWVudFxuICAgIDtcbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uID0gQWN0aW9uLkFjdGlvbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVWaXNpdG9yIHtcbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBGcmFtZVtdID0gW107XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIHByb2dyYW1EZXB0aCA9IC0xO1xuXG4gIHZpc2l0KG5vZGU6IEFTVC5CYXNlTm9kZSkge1xuICAgIHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgfVxuXG4gIC8vIFRyYXZlcnNhbCBtZXRob2RzXG5cbiAgUHJvZ3JhbShwcm9ncmFtOiBBU1QuUHJvZ3JhbSkge1xuICAgIHRoaXMucHJvZ3JhbURlcHRoKys7XG5cbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmdldEN1cnJlbnRGcmFtZSgpO1xuICAgIGxldCBwcm9ncmFtRnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgaWYgKCFwYXJlbnRGcmFtZSkge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gU3ltYm9sVGFibGUudG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKHByb2dyYW0uYmxvY2tQYXJhbXMpO1xuICAgIH1cblxuICAgIGxldCBzdGFydFR5cGUsIGVuZFR5cGU7XG5cbiAgICBpZiAodGhpcy5wcm9ncmFtRGVwdGggPT09IDApIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydFByb2dyYW0nO1xuICAgICAgZW5kVHlwZSA9ICdlbmRQcm9ncmFtJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0QmxvY2snO1xuICAgICAgZW5kVHlwZSA9ICdlbmRCbG9jayc7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLnBhcmVudE5vZGUgPSBwcm9ncmFtO1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZHJlbiA9IHByb2dyYW0uYm9keTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRDb3VudCA9IHByb2dyYW0uYm9keS5sZW5ndGg7XG4gICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtlbmRUeXBlLCBbcHJvZ3JhbSwgdGhpcy5wcm9ncmFtRGVwdGhdXSBhcyBBY3Rpb24pO1xuICAgIHByb2dyYW1GcmFtZS5zeW1ib2xzID0gcHJvZ3JhbVsnc3ltYm9scyddO1xuXG4gICAgZm9yIChsZXQgaSA9IHByb2dyYW0uYm9keS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgcHJvZ3JhbUZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChwcm9ncmFtLmJvZHlbaV0pO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW3N0YXJ0VHlwZSwgW1xuICAgICAgcHJvZ3JhbSwgcHJvZ3JhbUZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCxcbiAgICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKVxuICAgIF1dIGFzIEFjdGlvbik7XG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgdGhpcy5wcm9ncmFtRGVwdGgtLTtcblxuICAgIC8vIFB1c2ggdGhlIGNvbXBsZXRlZCB0ZW1wbGF0ZSBpbnRvIHRoZSBnbG9iYWwgYWN0aW9ucyBsaXN0XG4gICAgaWYgKHBhcmVudEZyYW1lKSB7IHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCsrOyB9XG4gICAgdGhpcy5hY3Rpb25zLnB1c2goLi4ucHJvZ3JhbUZyYW1lLmFjdGlvbnMucmV2ZXJzZSgpKTtcbiAgfVxuXG4gIEVsZW1lbnROb2RlKGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGxldCBlbGVtZW50RnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgZWxlbWVudEZyYW1lLnBhcmVudE5vZGUgPSBlbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkQ291bnQgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCArPSBlbGVtZW50Lm1vZGlmaWVycy5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBlbGVtZW50RnJhbWUuc3ltYm9scyA9IGVsZW1lbnRbJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKGVsZW1lbnQuYmxvY2tQYXJhbXMpO1xuXG4gICAgbGV0IGFjdGlvbkFyZ3M6IFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZEluZGV4ISxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkQ291bnQhXG4gICAgXTtcblxuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2goWydjbG9zZUVsZW1lbnQnLCBhY3Rpb25BcmdzXSk7XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuYXR0cmlidXRlc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGVsZW1lbnRGcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5jaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgbGV0IG9wZW4gPSBbJ29wZW5FbGVtZW50JywgWy4uLmFjdGlvbkFyZ3MsIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50LCBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKCldXSBhcyBBY3Rpb24uT3BlbkVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChvcGVuKTtcblxuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSB0aGUgZWxlbWVudCdzIGZyYW1lIHN0YXRlIHRvIHRoZSBwYXJlbnQgZnJhbWVcbiAgICBpZiAoZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgPiAwKSB7IHBhcmVudEZyYW1lLm11c3RhY2hlQ291bnQrKzsgfVxuICAgIHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCArPSBlbGVtZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50O1xuICAgIHBhcmVudEZyYW1lLmFjdGlvbnMucHVzaCguLi5lbGVtZW50RnJhbWUuYWN0aW9ucyk7XG4gIH1cblxuICBBdHRyTm9kZShhdHRyOiBBU1QuQXR0ck5vZGUpIHtcbiAgICBpZiAoYXR0ci52YWx1ZS50eXBlICE9PSAnVGV4dE5vZGUnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgfVxuICB9O1xuXG4gIFRleHROb2RlKHRleHQ6IEFTVC5UZXh0Tm9kZSkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGlmICh0ZXh0LmNoYXJzID09PSAnJykge1xuICAgICAgZnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyEucHVzaChkb21JbmRleE9mKGZyYW1lLmNoaWxkcmVuISwgdGV4dCkpO1xuICAgIH1cbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWyd0ZXh0JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIEJsb2NrU3RhdGVtZW50KG5vZGU6IEFTVC5CbG9ja1N0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2Jsb2NrJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuXG4gICAgaWYgKG5vZGUuaW52ZXJzZSkgeyB0aGlzLnZpc2l0KG5vZGUuaW52ZXJzZSk7IH1cbiAgICBpZiAobm9kZS5wcm9ncmFtKSB7IHRoaXMudmlzaXQobm9kZS5wcm9ncmFtKTsgfVxuICB9O1xuXG4gIFBhcnRpYWxTdGF0ZW1lbnQobm9kZTogQVNULlBhcnRpYWxTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQ29tbWVudFN0YXRlbWVudCh0ZXh0OiBBU1QuQ29tbWVudFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2NvbW1lbnQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgTXVzdGFjaGVDb21tZW50U3RhdGVtZW50KCkge1xuICAgIC8vIEludGVudGlvbmFsIGVtcHR5OiBIYW5kbGViYXJzIGNvbW1lbnRzIHNob3VsZCBub3QgYWZmZWN0IG91dHB1dC5cbiAgfTtcblxuICBNdXN0YWNoZVN0YXRlbWVudChtdXN0YWNoZTogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW211c3RhY2hlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICAvLyBGcmFtZSBoZWxwZXJzXG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudEZyYW1lKCk6IEZyYW1lIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZyYW1lKCk6IE9wdGlvbjxGcmFtZT4ge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2tbdGhpcy5mcmFtZVN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoRnJhbWUoKSB7XG4gICAgbGV0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5mcmFtZVN0YWNrLnB1c2goZnJhbWUpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wRnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBgZG9tTm9kZWAgaW4gdGhlIGBub2Rlc2AgYXJyYXksIHNraXBwaW5nXG4vLyBvdmVyIGFueSBub2RlcyB3aGljaCBkbyBub3QgcmVwcmVzZW50IERPTSBub2Rlcy5cbmZ1bmN0aW9uIGRvbUluZGV4T2Yobm9kZXM6IEFTVC5Ob2RlW10sIGRvbU5vZGU6IEFTVC5UZXh0Tm9kZSB8IEFTVC5FbGVtZW50Tm9kZSkge1xuICBsZXQgaW5kZXggPSAtMTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcblxuICAgIGlmIChub2RlLnR5cGUgIT09ICdUZXh0Tm9kZScgJiYgbm9kZS50eXBlICE9PSAnRWxlbWVudE5vZGUnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gZG9tTm9kZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cbiJdfQ== |
{ | ||
"name": "@glimmer/compiler", | ||
"version": "0.23.0-alpha.10", | ||
"version": "0.23.0-alpha.11", | ||
"repository": "https://github.com/tildeio/glimmer/tree/master/packages/@glimmer/compiler", | ||
"dependencies": { | ||
"@glimmer/syntax": "^0.23.0-alpha.10", | ||
"@glimmer/util": "^0.23.0-alpha.10", | ||
"@glimmer/wire-format": "^0.23.0-alpha.10", | ||
"@glimmer/interfaces": "^0.23.0-alpha.10", | ||
"@glimmer/syntax": "^0.23.0-alpha.11", | ||
"@glimmer/util": "^0.23.0-alpha.11", | ||
"@glimmer/wire-format": "^0.23.0-alpha.11", | ||
"@glimmer/interfaces": "^0.23.0-alpha.11", | ||
"simple-html-tokenizer": "^0.3.0" | ||
@@ -11,0 +11,0 @@ }, |
651947
5977