Socket
Socket
Sign inDemoInstall

@glimmer/compiler

Package Overview
Dependencies
Maintainers
10
Versions
289
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@glimmer/compiler - npm Package Compare versions

Comparing version 0.23.0-alpha.11 to 0.23.0-alpha.14

LICENSE

16

dist/amd/es5/glimmer-compiler.js

@@ -52,3 +52,5 @@ 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) {};
ProgramSymbolTable.prototype.get = function get(_name) {
throw _glimmer_util.unreachable();
};

@@ -337,2 +339,5 @@ ProgramSymbolTable.prototype.getLocalsMap = function getLocalsMap() {

// Frame helpers
TemplateVisitor.prototype.getCurrentFrame = function getCurrentFrame() {

@@ -354,4 +359,2 @@ return this.frameStack[this.frameStack.length - 1];

key: 'currentFrame',
// Frame helpers
get: function () {

@@ -623,2 +626,4 @@ return this.getCurrentFrame();

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]]);

@@ -746,2 +751,3 @@ };

var component = this.blocks.pop();
_glimmer_util.assert(component instanceof ComponentBlock, "Compiler bug: endComponent() should end a component");
return component.toJSON();

@@ -759,2 +765,3 @@ };

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);

@@ -783,2 +790,3 @@ 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();

@@ -1121,2 +1129,3 @@ };

var param = params[i];
_glimmer_util.assert(this[param.type], "Unimplemented " + param.type + " on TemplateCompiler");
this[param.type](param);

@@ -1138,2 +1147,3 @@ }

_glimmer_util.assert(this[value.type], "Unimplemented " + value.type + " on TemplateCompiler");
this[value.type](value);

@@ -1140,0 +1150,0 @@ this.opcode('literal', null, key);

2

dist/commonjs/es2017/index.js

@@ -26,2 +26,2 @@ "use strict";

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztxQkFDRSxBQUFVLEFBQ1gsQUFBTSxBQUFnQixBQUFDLEFBRXhCLEFBQTBCLEFBQzFCLEFBQU87Ozs7Ozs7OztvREFBRSxBQUFPLEFBQUksQUFBZSxBQUFFLEFBQU0sQUFBd0IsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIHByZWNvbXBpbGUsIFByZWNvbXBpbGVPcHRpb25zXG59IGZyb20gXCIuL2xpYi9jb21waWxlclwiO1xuXG4vLyBleHBvcnRlZCBvbmx5IGZvciB0ZXN0c1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZW1wbGF0ZVZpc2l0b3IgfSBmcm9tICcuL2xpYi90ZW1wbGF0ZS12aXNpdG9yJztcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbInByZWNvbXBpbGUiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztxQkFBU0EsVTs7Ozs7Ozs7O29EQUVBQyxPIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcHJlY29tcGlsZSB9IGZyb20gXCIuL2xpYi9jb21waWxlclwiO1xuLy8gZXhwb3J0ZWQgb25seSBmb3IgdGVzdHNcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVtcGxhdGVWaXNpdG9yIH0gZnJvbSAnLi9saWIvdGVtcGxhdGUtdmlzaXRvcic7Il19

@@ -57,2 +57,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsQUFBTyxBQUFFLEFBQVUsQUFBRSxBQUFNLEFBQWlCLEFBQUM7O0FBQzdDLEFBQU8sQUFBb0MsQUFBTSxBQUFxQixBQUFDOzs7Ozs7QUFjdkUsTUFBTSxBQUFTLGFBQXdCO0FBQ3JDLFFBQUksQUFBa0IsQUFBQztBQUN2QixBQUFNLFdBQUM7QUFDTCxBQUFFLEFBQUMsWUFBQyxDQUFDLEFBQUksQUFBQyxNQUFDLEFBQUM7QUFDVixBQUFFLEFBQUMsZ0JBQUMsT0FBTyxBQUFPLFlBQUssQUFBVSxBQUFDLFlBQUMsQUFBQztBQUNsQyxvQkFBSSxBQUFDO0FBQ0gsQUFBdUM7QUFDdkMsMEJBQU0sQUFBTSxTQUFHLEFBQU8sUUFBQyxBQUFRLEFBQUMsQUFBQztBQUNqQyxBQUFzQztBQUN0QyxBQUFJLDJCQUFHLEFBQUc7QUFDUiw0QkFBSSxBQUFJLE9BQUcsQUFBTSxPQUFDLEFBQVUsV0FBQyxBQUFNLEFBQUMsQUFBQztBQUNyQyxBQUFJLDZCQUFDLEFBQU0sT0FBQyxBQUFHLEtBQUUsQUFBTSxBQUFDLEFBQUM7QUFDekIsQUFBcUM7QUFDckMsQUFBTSwrQkFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQVEsQUFBQyxVQUFDLEFBQVMsVUFBQyxBQUFDLEdBQUMsQUFBQyxBQUFDLEFBQUMsQUFDOUM7QUFBQyxBQUFDO0FBQ0YsQUFBSSx5QkFBQyxBQUFNLEFBQUMsQUFBQyxBQUNmO0FBQUMsa0JBQUMsQUFBSyxBQUFDLE9BQUMsQUFBQyxBQUFDLEdBQUMsQUFBQztBQUNYLEFBQUksMkJBQUcsTUFBTSxBQUFJLEFBQUMsQUFDcEI7QUFBQyxBQUNIO0FBQUMsQUFDSDtBQUFDO0FBQ0QsQUFBTSxlQUFDLEFBQUksQUFBQyxBQUNkO0FBQUMsQUFBQyxBQUNKO0FBQUMsQUFBQyxBQUFFLEFBQUMsQUFpQkwsQUFBTSxDQXhDZ0M7b0JBd0NYLEFBQWMsUUFBRSxBQUF5QztBQUNsRixRQUFJLEFBQUksT0FBRyxBQUFPO0FBQ2hCLEFBQUUsWUFBRSxBQUFTLEFBQUU7QUFDZixBQUFJLGNBQUUsQUFBRSxBQUNpQyxBQUFDO0FBSHRCO0FBSXRCLFFBQUksQUFBRyxNQUFHLEFBQVUsd0JBQUMsQUFBTSxRQUFFLEFBQUksQUFBQyxBQUFDO0FBQ25DLFFBQUksRUFBRSxBQUFLLE9BQUUsQUFBSSxBQUFFLFNBQUcsQUFBZ0IsMkJBQUMsQUFBTyxRQUFDLEFBQUksTUFBRSxBQUFHLEFBQUMsQUFBQztBQUMxRCxRQUFJLEFBQUksT0FBRyxBQUFJLEtBQUMsQUFBRSxNQUFJLEFBQVMsQUFBRSxBQUFDO0FBQ2xDLFFBQUksQUFBUyxZQUFHLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBSyxNQUFDLEFBQU0sQUFBRSxBQUFDLEFBQUM7QUFDL0MsUUFBSSxBQUFrQjtBQUNwQixBQUFFLFlBQUUsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBSSxBQUFDLFFBQUcsQUFBUyxBQUFDO0FBQzFDLEFBQUssZUFBRSxBQUFTO0FBQ2hCLEFBQUksQUFDTCxBQUFDO0FBSnNFO0FBTXhFLEFBQXFCO0FBQ3JCLEFBQU0sV0FBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQWtCLEFBQUMsQUFBQyxBQUM1QztBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJlcHJvY2VzcyB9IGZyb20gXCJAZ2xpbW1lci9zeW50YXhcIjtcbmltcG9ydCBUZW1wbGF0ZUNvbXBpbGVyLCB7IENvbXBpbGVPcHRpb25zIH0gZnJvbSBcIi4vdGVtcGxhdGUtY29tcGlsZXJcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZWRUZW1wbGF0ZVdpdGhMYXp5QmxvY2ssIFRlbXBsYXRlSmF2YXNjcmlwdCwgVGVtcGxhdGVNZXRhIH0gZnJvbSBcIkBnbGltbWVyL3dpcmUtZm9ybWF0XCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlSWRGbiB7XG4gIChzcmM6IHN0cmluZyk6IE9wdGlvbjxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByZWNvbXBpbGVPcHRpb25zPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IGV4dGVuZHMgQ29tcGlsZU9wdGlvbnM8VD4ge1xuICBpZD86IFRlbXBsYXRlSWRGbjtcbn1cblxuZGVjbGFyZSBmdW5jdGlvbiByZXF1aXJlKGlkOiBzdHJpbmcpOiBhbnk7XG5cbmNvbnN0IGRlZmF1bHRJZDogKCkgPT4gVGVtcGxhdGVJZEZuID0gKCgpID0+IHtcbiAgbGV0IGlkRm46IFRlbXBsYXRlSWRGbjtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoIWlkRm4pIHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLXJlcXVpcmUtaW1wb3J0cyAqL1xuICAgICAgICAgIGNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuICAgICAgICAgIC8qIHRzbGludDplbmFibGU6bm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICAgICAgaWRGbiA9IHNyYyA9PiB7XG4gICAgICAgICAgICBsZXQgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJyk7XG4gICAgICAgICAgICBoYXNoLnVwZGF0ZShzcmMsICd1dGY4Jyk7XG4gICAgICAgICAgICAvLyB0cmltIHRvIDYgYnl0ZXMgb2YgZGF0YSAoMl40OCAtIDEpXG4gICAgICAgICAgICByZXR1cm4gaGFzaC5kaWdlc3QoJ2Jhc2U2NCcpLnN1YnN0cmluZygwLDgpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgaWRGbihcInRlc3RcIik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZEZuID0gKCkgPT4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWRGbjtcbiAgfTtcbn0pKCk7XG5cbi8qXG4gKiBDb21waWxlIGEgc3RyaW5nIGludG8gYSB0ZW1wbGF0ZSBqYXZhc2NyaXB0IHN0cmluZy5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlOlxuICogICAgIGltcG9ydCB7IHByZWNvbXBpbGUgfSBmcm9tICdAZ2xpbW1lci9jb21waWxlcic7XG4gKiAgICAgaW1wb3J0IHsgdGVtcGxhdGVGYWN0b3J5IH0gZnJvbSAnZ2xpbWVyLXJ1bnRpbWUnO1xuICogICAgIGxldCB0ZW1wbGF0ZUpzID0gcHJlY29tcGlsZShcIkhvd2R5IHt7bmFtZX19XCIpO1xuICogICAgIGxldCBmYWN0b3J5ID0gdGVtcGxhdGVGYWN0b3J5KG5ldyBGdW5jdGlvbihcInJldHVybiBcIiArIHRlbXBsYXRlSnMpKCkpO1xuICogICAgIGxldCB0ZW1wbGF0ZSA9IGZhY3RvcnkuY3JlYXRlKGVudik7XG4gKlxuICogQG1ldGhvZCBwcmVjb21waWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIGEgR2xpbW1lciB0ZW1wbGF0ZSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ30gYSB0ZW1wbGF0ZSBqYXZhc2NyaXB0IHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlY29tcGlsZTxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPihzdHJpbmc6IHN0cmluZywgb3B0aW9ucz86IFByZWNvbXBpbGVPcHRpb25zPFQ+KTogVGVtcGxhdGVKYXZhc2NyaXB0O1xuZXhwb3J0IGZ1bmN0aW9uIHByZWNvbXBpbGUoc3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBQcmVjb21waWxlT3B0aW9uczxUZW1wbGF0ZU1ldGE+KTogVGVtcGxhdGVKYXZhc2NyaXB0IHtcbiAgbGV0IG9wdHMgPSBvcHRpb25zIHx8IHtcbiAgICBpZDogZGVmYXVsdElkKCksXG4gICAgbWV0YToge31cbiAgfSBhcyBhbnkgYXMgUHJlY29tcGlsZU9wdGlvbnM8VGVtcGxhdGVNZXRhPjtcbiAgbGV0IGFzdCA9IHByZXByb2Nlc3Moc3RyaW5nLCBvcHRzKTtcbiAgbGV0IHsgYmxvY2ssIG1ldGEgfSA9IFRlbXBsYXRlQ29tcGlsZXIuY29tcGlsZShvcHRzLCBhc3QpO1xuICBsZXQgaWRGbiA9IG9wdHMuaWQgfHwgZGVmYXVsdElkKCk7XG4gIGxldCBibG9ja0pTT04gPSBKU09OLnN0cmluZ2lmeShibG9jay50b0pTT04oKSk7XG4gIGxldCB0ZW1wbGF0ZUpTT05PYmplY3Q6IFNlcmlhbGl6ZWRUZW1wbGF0ZVdpdGhMYXp5QmxvY2s8VGVtcGxhdGVNZXRhPiA9IHtcbiAgICBpZDogaWRGbihKU09OLnN0cmluZ2lmeShtZXRhKSArIGJsb2NrSlNPTiksXG4gICAgYmxvY2s6IGJsb2NrSlNPTixcbiAgICBtZXRhXG4gIH07XG5cbiAgLy8gSlNPTiBpcyBqYXZhc2NyaXB0XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZUpTT05PYmplY3QpO1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21waWxlci5qcyJdLCJuYW1lcyI6WyJwcmVjb21waWxlIiwiZGVmYXVsdElkIiwiaWRGbiIsInJlcXVpcmUiLCJjcnlwdG8iLCJzcmMiLCJoYXNoIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsImRpZ2VzdCIsInN1YnN0cmluZyIsImUiLCJzdHJpbmciLCJvcHRpb25zIiwib3B0cyIsImlkIiwibWV0YSIsImFzdCIsImJsb2NrIiwiY29tcGlsZSIsImJsb2NrSlNPTiIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0b0pTT04iLCJ0ZW1wbGF0ZUpTT05PYmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7O1FBMEJnQkEsVSxHQUFBQSxVOztBQTFCaEI7O0FBQ0E7Ozs7OztBQUNBLE1BQU1DLFlBQVksQ0FBQyxNQUFNO0FBQ3JCLFFBQUlDLElBQUo7QUFDQSxXQUFPLE1BQU07QUFDVCxZQUFJLENBQUNBLElBQUwsRUFBVztBQUNQLGdCQUFJLE9BQU9DLE9BQVAsS0FBbUIsVUFBdkIsRUFBbUM7QUFDL0Isb0JBQUk7QUFDQTtBQUNBLDBCQUFNQyxTQUFTRCxRQUFRLFFBQVIsQ0FBZjtBQUNBO0FBQ0FELDJCQUFPRyxPQUFPO0FBQ1YsNEJBQUlDLE9BQU9GLE9BQU9HLFVBQVAsQ0FBa0IsTUFBbEIsQ0FBWDtBQUNBRCw2QkFBS0UsTUFBTCxDQUFZSCxHQUFaLEVBQWlCLE1BQWpCO0FBQ0E7QUFDQSwrQkFBT0MsS0FBS0csTUFBTCxDQUFZLFFBQVosRUFBc0JDLFNBQXRCLENBQWdDLENBQWhDLEVBQW1DLENBQW5DLENBQVA7QUFDSCxxQkFMRDtBQU1BUix5QkFBSyxNQUFMO0FBQ0gsaUJBWEQsQ0FXRSxPQUFPUyxDQUFQLEVBQVU7QUFDUlQsMkJBQU8sTUFBTSxJQUFiO0FBQ0g7QUFDSjtBQUNKO0FBQ0QsZUFBT0EsSUFBUDtBQUNILEtBcEJEO0FBcUJILENBdkJpQixHQUFsQjtBQXdCTyxTQUFTRixVQUFULENBQW9CWSxNQUFwQixFQUE0QkMsT0FBNUIsRUFBcUM7QUFDeEMsUUFBSUMsT0FBT0QsV0FBVztBQUNsQkUsWUFBSWQsV0FEYztBQUVsQmUsY0FBTTtBQUZZLEtBQXRCO0FBSUEsUUFBSUMsTUFBTSx3QkFBV0wsTUFBWCxFQUFtQkUsSUFBbkIsQ0FBVjtBQUNBLFFBQUksRUFBRUksS0FBRixFQUFTRixJQUFULEtBQWtCLDJCQUFpQkcsT0FBakIsQ0FBeUJMLElBQXpCLEVBQStCRyxHQUEvQixDQUF0QjtBQUNBLFFBQUlmLE9BQU9ZLEtBQUtDLEVBQUwsSUFBV2QsV0FBdEI7QUFDQSxRQUFJbUIsWUFBWUMsS0FBS0MsU0FBTCxDQUFlSixNQUFNSyxNQUFOLEVBQWYsQ0FBaEI7QUFDQSxRQUFJQyxxQkFBcUI7QUFDckJULFlBQUliLEtBQUttQixLQUFLQyxTQUFMLENBQWVOLElBQWYsSUFBdUJJLFNBQTVCLENBRGlCO0FBRXJCRixlQUFPRSxTQUZjO0FBR3JCSjtBQUhxQixLQUF6QjtBQUtBO0FBQ0EsV0FBT0ssS0FBS0MsU0FBTCxDQUFlRSxrQkFBZixDQUFQO0FBQ0giLCJmaWxlIjoibGliL2NvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJlcHJvY2VzcyB9IGZyb20gXCJAZ2xpbW1lci9zeW50YXhcIjtcbmltcG9ydCBUZW1wbGF0ZUNvbXBpbGVyIGZyb20gXCIuL3RlbXBsYXRlLWNvbXBpbGVyXCI7XG5jb25zdCBkZWZhdWx0SWQgPSAoKCkgPT4ge1xuICAgIGxldCBpZEZuO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICghaWRGbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLyogdHNsaW50OmRpc2FibGU6bm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuICAgICAgICAgICAgICAgICAgICAvKiB0c2xpbnQ6ZW5hYmxlOm5vLXJlcXVpcmUtaW1wb3J0cyAqL1xuICAgICAgICAgICAgICAgICAgICBpZEZuID0gc3JjID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gudXBkYXRlKHNyYywgJ3V0ZjgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyaW0gdG8gNiBieXRlcyBvZiBkYXRhICgyXjQ4IC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNoLmRpZ2VzdCgnYmFzZTY0Jykuc3Vic3RyaW5nKDAsIDgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZEZuKFwidGVzdFwiKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkRm4gPSAoKSA9PiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWRGbjtcbiAgICB9O1xufSkoKTtcbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlKHN0cmluZywgb3B0aW9ucykge1xuICAgIGxldCBvcHRzID0gb3B0aW9ucyB8fCB7XG4gICAgICAgIGlkOiBkZWZhdWx0SWQoKSxcbiAgICAgICAgbWV0YToge31cbiAgICB9O1xuICAgIGxldCBhc3QgPSBwcmVwcm9jZXNzKHN0cmluZywgb3B0cyk7XG4gICAgbGV0IHsgYmxvY2ssIG1ldGEgfSA9IFRlbXBsYXRlQ29tcGlsZXIuY29tcGlsZShvcHRzLCBhc3QpO1xuICAgIGxldCBpZEZuID0gb3B0cy5pZCB8fCBkZWZhdWx0SWQoKTtcbiAgICBsZXQgYmxvY2tKU09OID0gSlNPTi5zdHJpbmdpZnkoYmxvY2sudG9KU09OKCkpO1xuICAgIGxldCB0ZW1wbGF0ZUpTT05PYmplY3QgPSB7XG4gICAgICAgIGlkOiBpZEZuKEpTT04uc3RyaW5naWZ5KG1ldGEpICsgYmxvY2tKU09OKSxcbiAgICAgICAgYmxvY2s6IGJsb2NrSlNPTixcbiAgICAgICAgbWV0YVxuICAgIH07XG4gICAgLy8gSlNPTiBpcyBqYXZhc2NyaXB0XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlSlNPTk9iamVjdCk7XG59Il19

@@ -141,3 +141,3 @@ "use strict";

get currentBlock() {
return this.blocks.current;
return (0, _util.expect)(this.blocks.current, 'Expected a block on the stack');
}

@@ -186,2 +186,4 @@ 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]]);

@@ -282,2 +284,3 @@ }

let component = this.blocks.pop();
(0, _util.assert)(component instanceof ComponentBlock, "Compiler bug: endComponent() should end a component");
return component.toJSON();

@@ -293,2 +296,3 @@ }

prepareObject(size) {
(0, _util.assert)(this.values.length >= size, `Expected ${size} values on the stack, found ${this.values.length}`);
let keys = new Array(size);

@@ -313,2 +317,3 @@ let values = new Array(size);

popValue() {
(0, _util.assert)(this.values.length, "No expression found on stack");
return this.values.pop();

@@ -318,2 +323,2 @@ }

exports.default = JavaScriptCompiler;
//# 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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLmpzIl0sIm5hbWVzIjpbIkJsb2NrIiwiY29uc3RydWN0b3IiLCJzdGF0ZW1lbnRzIiwicHVzaCIsInN0YXRlbWVudCIsIklubGluZUJsb2NrIiwidGFibGUiLCJ0b0pTT04iLCJwYXJhbWV0ZXJzIiwic2xvdHMiLCJUZW1wbGF0ZUJsb2NrIiwic3ltYm9sVGFibGUiLCJ0eXBlIiwieWllbGRzIiwibmFtZWQiLCJwcmVsdWRlIiwiaGVhZCIsImJsb2NrcyIsImhhc0V2YWwiLCJzYXdFbGVtZW50IiwiaW5QYXJhbXMiLCJpc09wZW5FbGVtZW50IiwiaXNGbHVzaEVsZW1lbnQiLCJpc0luRWxlbWVudEhlYWQiLCJFcnJvciIsInN5bWJvbHMiLCJDb21wb25lbnRCbG9jayIsImF0dHJpYnV0ZXMiLCJhcmd1bWVudHMiLCJwb3NpdGlvbmFscyIsImlzQXJndW1lbnQiLCJpc0F0dHJpYnV0ZSIsImlzTW9kaWZpZXIiLCJhcmdzIiwia2V5cyIsIm1hcCIsImFyZyIsInZhbHVlcyIsIlRlbXBsYXRlIiwibWV0YSIsImJsb2NrIiwiSmF2YVNjcmlwdENvbXBpbGVyIiwib3Bjb2RlcyIsInRlbXBsYXRlIiwicHJvY2VzcyIsImNvbXBpbGVyIiwiY3VycmVudEJsb2NrIiwiY3VycmVudCIsImZvckVhY2giLCJvcGNvZGUiLCJzdGFydEJsb2NrIiwicHJvZ3JhbSIsImVuZEJsb2NrIiwicG9wIiwic3RhcnRQcm9ncmFtIiwiZW5kUHJvZ3JhbSIsInRleHQiLCJjb250ZW50IiwiVGV4dCIsImFwcGVuZCIsInRydXN0ZWQiLCJBcHBlbmQiLCJwb3BWYWx1ZSIsImNvbW1lbnQiLCJ2YWx1ZSIsIkNvbW1lbnQiLCJtb2RpZmllciIsIm5hbWUiLCJwYXJhbXMiLCJoYXNoIiwiTW9kaWZpZXIiLCJpbnZlcnNlIiwib3BlbkVsZW1lbnQiLCJlbGVtZW50IiwidGFnIiwiaW5kZXhPZiIsInN0YXJ0Q29tcG9uZW50IiwiYmxvY2tQYXJhbXMiLCJsZW5ndGgiLCJPcGVuRWxlbWVudCIsImZsdXNoRWxlbWVudCIsIkZsdXNoRWxlbWVudCIsImNsb3NlRWxlbWVudCIsImF0dHJzIiwiZW5kQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiQ2xvc2VFbGVtZW50Iiwic3RhdGljQXR0ciIsIm5hbWVzcGFjZSIsIlN0YXRpY0F0dHIiLCJkeW5hbWljQXR0ciIsIkR5bmFtaWNBdHRyIiwidHJ1c3RpbmdBdHRyIiwiVHJ1c3RpbmdBdHRyIiwic3RhdGljQXJnIiwiU3RhdGljQXJnIiwiZHluYW1pY0FyZyIsIkR5bmFtaWNBcmciLCJ5aWVsZCIsInRvIiwiWWllbGQiLCJkZWJ1Z2dlciIsImV2YWxJbmZvIiwiRGVidWdnZXIiLCJoYXNCbG9jayIsInB1c2hWYWx1ZSIsIkhhc0Jsb2NrIiwiaGFzQmxvY2tQYXJhbXMiLCJIYXNCbG9ja1BhcmFtcyIsInBhcnRpYWwiLCJQYXJ0aWFsIiwibGl0ZXJhbCIsInVuZGVmaW5lZCIsIlVuZGVmaW5lZCIsInVua25vd24iLCJVbmtub3duIiwiZ2V0IiwicGF0aCIsIkdldCIsIm1heWJlTG9jYWwiLCJNYXliZUxvY2FsIiwiY29uY2F0IiwiQ29uY2F0IiwiaGVscGVyIiwiSGVscGVyIiwiY29tcG9uZW50IiwicHJlcGFyZUFycmF5Iiwic2l6ZSIsImkiLCJwcmVwYXJlT2JqZWN0IiwiQXJyYXkiLCJ2YWwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDTyxNQUFNQSxLQUFOLENBQVk7QUFDZkMsa0JBQWM7QUFDVixhQUFLQyxVQUFMLEdBQWtCLEVBQWxCO0FBQ0g7QUFDREMsU0FBS0MsU0FBTCxFQUFnQjtBQUNaLGFBQUtGLFVBQUwsQ0FBZ0JDLElBQWhCLENBQXFCQyxTQUFyQjtBQUNIO0FBTmM7UUFBTkosSyxHQUFBQSxLO0FBUU4sTUFBTUssV0FBTixTQUEwQkwsS0FBMUIsQ0FBZ0M7QUFDbkNDLGdCQUFZSyxLQUFaLEVBQW1CO0FBQ2Y7QUFDQSxhQUFLQSxLQUFMLEdBQWFBLEtBQWI7QUFDSDtBQUNE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aEIsMEJBQU8sS0FBSzFGLE1BQUwsQ0FBWXlDLE1BQVosSUFBc0JpRCxJQUE3QixFQUFvQyxZQUFXQSxJQUFLLCtCQUE4QixLQUFLMUYsTUFBTCxDQUFZeUMsTUFBTyxFQUFyRztBQUNBLFlBQUk1QyxPQUFPLElBQUlnRyxLQUFKLENBQVVILElBQVYsQ0FBWDtBQUNBLFlBQUkxRixTQUFTLElBQUk2RixLQUFKLENBQVVILElBQVYsQ0FBYjtBQUNBLGFBQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJRCxJQUFwQixFQUEwQkMsR0FBMUIsRUFBK0I7QUFDM0I5RixpQkFBSzhGLENBQUwsSUFBVSxLQUFLbEUsUUFBTCxFQUFWO0FBQ0F6QixtQkFBTzJGLENBQVAsSUFBWSxLQUFLbEUsUUFBTCxFQUFaO0FBQ0g7QUFDRCxhQUFLMkMsU0FBTCxDQUFlLENBQUN2RSxJQUFELEVBQU9HLE1BQVAsQ0FBZjtBQUNIO0FBQ0Q7QUFDQWxDLFNBQUs4QixJQUFMLEVBQVc7QUFDUCxlQUFPQSxLQUFLQSxLQUFLNkMsTUFBTCxHQUFjLENBQW5CLE1BQTBCLElBQWpDLEVBQXVDO0FBQ25DN0MsaUJBQUtvQixHQUFMO0FBQ0g7QUFDRCxhQUFLUCxZQUFMLENBQWtCM0MsSUFBbEIsQ0FBdUI4QixJQUF2QjtBQUNIO0FBQ0R3RSxjQUFVMEIsR0FBVixFQUFlO0FBQ1gsYUFBSzlGLE1BQUwsQ0FBWWxDLElBQVosQ0FBaUJnSSxHQUFqQjtBQUNIO0FBQ0RyRSxlQUFXO0FBQ1AsMEJBQU8sS0FBS3pCLE1BQUwsQ0FBWXlDLE1BQW5CLEVBQTJCLDhCQUEzQjtBQUNBLGVBQU8sS0FBS3pDLE1BQUwsQ0FBWWdCLEdBQVosRUFBUDtBQUNIO0FBMUxtQztrQkFBbkJaLGtCIiwiZmlsZSI6ImxpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFN0YWNrLCBEaWN0U2V0LCBleHBlY3QgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgU3RhdGVtZW50cywgT3BzIH0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuZXhwb3J0IGNsYXNzIEJsb2NrIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzID0gW107XG4gICAgfVxuICAgIHB1c2goc3RhdGVtZW50KSB7XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICAgIGNvbnN0cnVjdG9yKHRhYmxlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICAgIGNvbnN0cnVjdG9yKHN5bWJvbFRhYmxlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3ltYm9sVGFibGUgPSBzeW1ib2xUYWJsZTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJ0ZW1wbGF0ZVwiO1xuICAgICAgICB0aGlzLnlpZWxkcyA9IG5ldyBEaWN0U2V0KCk7XG4gICAgICAgIHRoaXMubmFtZWQgPSBuZXcgRGljdFNldCgpO1xuICAgICAgICB0aGlzLnByZWx1ZGUgPSBbXTtcbiAgICAgICAgdGhpcy5oZWFkID0gW107XG4gICAgICAgIHRoaXMuYmxvY2tzID0gW107XG4gICAgICAgIHRoaXMuaGFzRXZhbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhd0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pblBhcmFtcyA9IGZhbHNlO1xuICAgIH1cbiAgICBwdXNoKHN0YXRlbWVudCkge1xuICAgICAgICBpZiAoIXRoaXMuc2F3RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKFN0YXRlbWVudHMuaXNPcGVuRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXdFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmluUGFyYW1zID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJlbHVkZS5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgICAgICAgaWYgKFN0YXRlbWVudHMuaXNGbHVzaEVsZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWQucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChTdGF0ZW1lbnRzLmlzSW5FbGVtZW50SGVhZChzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzeW1ib2xzOiB0aGlzLnN5bWJvbFRhYmxlLnN5bWJvbHMsXG4gICAgICAgICAgICBwcmVsdWRlOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLnByZWx1ZGUgOiBudWxsLFxuICAgICAgICAgICAgaGVhZDogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5oZWFkIDogbnVsbCxcbiAgICAgICAgICAgIHN0YXRlbWVudHM6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMuc3RhdGVtZW50cyA6IHRoaXMucHJlbHVkZSxcbiAgICAgICAgICAgIGhhc0V2YWw6IHRoaXMuaGFzRXZhbFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgICBjb25zdHJ1Y3Rvcih0YWJsZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRhYmxlID0gdGFibGU7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICB0aGlzLmFyZ3VtZW50cyA9IFtdO1xuICAgICAgICB0aGlzLmluUGFyYW1zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbmFscyA9IFtdO1xuICAgIH1cbiAgICBwdXNoKHN0YXRlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgICAgICAgaWYgKFN0YXRlbWVudHMuaXNGbHVzaEVsZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0FyZ3VtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFyZ3VtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNBdHRyaWJ1dGUoc3RhdGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNNb2RpZmllcihzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBFbGVtZW50IG1vZGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IG9ubHkgcGFyYW1ldGVycyBhbGxvd2VkIGJlZm9yZSBmbHVzaC1lbGVtZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgbGV0IGFyZ3MgPSB0aGlzLmFyZ3VtZW50cztcbiAgICAgICAgbGV0IGtleXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzFdKTtcbiAgICAgICAgbGV0IHZhbHVlcyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMl0pO1xuICAgICAgICByZXR1cm4gW3RoaXMuYXR0cmlidXRlcywgW2tleXMsIHZhbHVlc10sIHtcbiAgICAgICAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICAgICAgfV07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlIHtcbiAgICBjb25zdHJ1Y3RvcihzeW1ib2xzLCBtZXRhKSB7XG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XG4gICAgICAgIHRoaXMuYmxvY2sgPSBuZXcgVGVtcGxhdGVCbG9jayhzeW1ib2xzKTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmxvY2s6IHRoaXMuYmxvY2sudG9KU09OKCksXG4gICAgICAgICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0Q29tcGlsZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wY29kZXMsIHN5bWJvbHMsIG1ldGEpIHtcbiAgICAgICAgdGhpcy5ibG9ja3MgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5vcGNvZGVzID0gb3Bjb2RlcztcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShzeW1ib2xzLCBtZXRhKTtcbiAgICB9XG4gICAgc3RhdGljIHByb2Nlc3Mob3Bjb2Rlcywgc3ltYm9scywgbWV0YSkge1xuICAgICAgICBsZXQgY29tcGlsZXIgPSBuZXcgSmF2YVNjcmlwdENvbXBpbGVyKG9wY29kZXMsIHN5bWJvbHMsIG1ldGEpO1xuICAgICAgICByZXR1cm4gY29tcGlsZXIucHJvY2VzcygpO1xuICAgIH1cbiAgICBnZXQgY3VycmVudEJsb2NrKCkge1xuICAgICAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tzLmN1cnJlbnQsICdFeHBlY3RlZCBhIGJsb2NrIG9uIHRoZSBzdGFjaycpO1xuICAgIH1cbiAgICBwcm9jZXNzKCkge1xuICAgICAgICB0aGlzLm9wY29kZXMuZm9yRWFjaCgoW29wY29kZSwgLi4uYXJnc10pID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpc1tvcGNvZGVdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmltcGxlbWVudGVkICR7b3Bjb2RlfSBvbiBKYXZhU2NyaXB0Q29tcGlsZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXNbb3Bjb2RlXSguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlO1xuICAgIH1cbiAgICAvLy8gTmVzdGluZ1xuICAgIHN0YXJ0QmxvY2soW3Byb2dyYW1dKSB7XG4gICAgICAgIGxldCBibG9jayA9IG5ldyBJbmxpbmVCbG9jayhwcm9ncmFtWydzeW1ib2xzJ10pO1xuICAgICAgICB0aGlzLmJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICB9XG4gICAgZW5kQmxvY2soKSB7XG4gICAgICAgIGxldCB7IHRlbXBsYXRlLCBibG9ja3MgfSA9IHRoaXM7XG4gICAgICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKTtcbiAgICAgICAgdGVtcGxhdGUuYmxvY2suYmxvY2tzLnB1c2goYmxvY2sudG9KU09OKCkpO1xuICAgIH1cbiAgICBzdGFydFByb2dyYW0oKSB7XG4gICAgICAgIHRoaXMuYmxvY2tzLnB1c2godGhpcy50ZW1wbGF0ZS5ibG9jayk7XG4gICAgfVxuICAgIGVuZFByb2dyYW0oKSB7fVxuICAgIC8vLyBTdGF0ZW1lbnRzXG4gICAgdGV4dChjb250ZW50KSB7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLlRleHQsIGNvbnRlbnRdKTtcbiAgICB9XG4gICAgYXBwZW5kKHRydXN0ZWQpIHtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuQXBwZW5kLCB0aGlzLnBvcFZhbHVlKCksIHRydXN0ZWRdKTtcbiAgICB9XG4gICAgY29tbWVudCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICAgIH1cbiAgICBtb2RpZmllcihuYW1lKSB7XG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2goW09wcy5Nb2RpZmllciwgbmFtZSwgcGFyYW1zLCBoYXNoXSk7XG4gICAgfVxuICAgIGJsb2NrKG5hbWUsIHRlbXBsYXRlLCBpbnZlcnNlKSB7XG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG4gICAgICAgIGFzc2VydCh0eXBlb2YgdGVtcGxhdGUgIT09ICdudW1iZXInIHx8IGJsb2Nrc1t0ZW1wbGF0ZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuICAgICAgICBhc3NlcnQodHlwZW9mIGludmVyc2UgIT09ICdudW1iZXInIHx8IGJsb2Nrc1tpbnZlcnNlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLkJsb2NrLCBuYW1lLCBwYXJhbXMsIGhhc2gsIGJsb2Nrc1t0ZW1wbGF0ZV0sIGJsb2Nrc1tpbnZlcnNlXV0pO1xuICAgIH1cbiAgICBvcGVuRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcbiAgICAgICAgaWYgKHRhZy5pbmRleE9mKCctJykgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q29tcG9uZW50KGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYmxvY2tQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiA8JHtlbGVtZW50LnRhZ30+IGlzIG5vdCBhIGNvbXBvbmVudCBhbmQgZG9lc24ndCBzdXBwb3J0IGJsb2NrIHBhcmFtZXRlcnNgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHVzaChbT3BzLk9wZW5FbGVtZW50LCB0YWddKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmbHVzaEVsZW1lbnQoKSB7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLkZsdXNoRWxlbWVudF0pO1xuICAgIH1cbiAgICBjbG9zZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG4gICAgICAgIGlmICh0YWcuaW5kZXhPZignLScpICE9PSAtMSkge1xuICAgICAgICAgICAgbGV0IFthdHRycywgYXJncywgYmxvY2tdID0gdGhpcy5lbmRDb21wb25lbnQoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaChbT3BzLkNvbXBvbmVudCwgdGFnLCBhdHRycywgYXJncywgYmxvY2tdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHVzaChbT3BzLkNsb3NlRWxlbWVudF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpY0F0dHIobmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICAgIH1cbiAgICBkeW5hbWljQXR0cihuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICAgIH1cbiAgICB0cnVzdGluZ0F0dHIobmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuVHJ1c3RpbmdBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gICAgfVxuICAgIHN0YXRpY0FyZyhuYW1lKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICAgIH1cbiAgICBkeW5hbWljQXJnKG5hbWUpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICAgIH1cbiAgICB5aWVsZCh0bykge1xuICAgICAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2goW09wcy5ZaWVsZCwgdG8sIHBhcmFtc10pO1xuICAgIH1cbiAgICBkZWJ1Z2dlcihldmFsSW5mbykge1xuICAgICAgICB0aGlzLnB1c2goW09wcy5EZWJ1Z2dlciwgZXZhbEluZm9dKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgICB9XG4gICAgaGFzQmxvY2sobmFtZSkge1xuICAgICAgICB0aGlzLnB1c2hWYWx1ZShbT3BzLkhhc0Jsb2NrLCBuYW1lXSk7XG4gICAgfVxuICAgIGhhc0Jsb2NrUGFyYW1zKG5hbWUpIHtcbiAgICAgICAgdGhpcy5wdXNoVmFsdWUoW09wcy5IYXNCbG9ja1BhcmFtcywgbmFtZV0pO1xuICAgIH1cbiAgICBwYXJ0aWFsKGV2YWxJbmZvKSB7XG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLlBhcnRpYWwsIHBhcmFtc1swXSwgZXZhbEluZm9dKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8vIEV4cHJlc3Npb25zXG4gICAgbGl0ZXJhbCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5wdXNoVmFsdWUoW09wcy5VbmRlZmluZWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHVzaFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1bmtub3duKG5hbWUpIHtcbiAgICAgICAgdGhpcy5wdXNoVmFsdWUoW09wcy5Vbmtub3duLCBuYW1lXSk7XG4gICAgfVxuICAgIGdldChoZWFkLCBwYXRoKSB7XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKFtPcHMuR2V0LCBoZWFkLCBwYXRoXSk7XG4gICAgfVxuICAgIG1heWJlTG9jYWwocGF0aCkge1xuICAgICAgICB0aGlzLnB1c2hWYWx1ZShbT3BzLk1heWJlTG9jYWwsIHBhdGhdKTtcbiAgICB9XG4gICAgY29uY2F0KCkge1xuICAgICAgICB0aGlzLnB1c2hWYWx1ZShbT3BzLkNvbmNhdCwgdGhpcy5wb3BWYWx1ZSgpXSk7XG4gICAgfVxuICAgIGhlbHBlcihuYW1lKSB7XG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2hWYWx1ZShbT3BzLkhlbHBlciwgbmFtZSwgcGFyYW1zLCBoYXNoXSk7XG4gICAgfVxuICAgIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcbiAgICBzdGFydENvbXBvbmVudChlbGVtZW50KSB7XG4gICAgICAgIGxldCBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50QmxvY2soZWxlbWVudFsnc3ltYm9scyddKTtcbiAgICAgICAgdGhpcy5ibG9ja3MucHVzaChjb21wb25lbnQpO1xuICAgIH1cbiAgICBlbmRDb21wb25lbnQoKSB7XG4gICAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmJsb2Nrcy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0KGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEJsb2NrLCBcIkNvbXBpbGVyIGJ1ZzogZW5kQ29tcG9uZW50KCkgc2hvdWxkIGVuZCBhIGNvbXBvbmVudFwiKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC50b0pTT04oKTtcbiAgICB9XG4gICAgcHJlcGFyZUFycmF5KHNpemUpIHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2godGhpcy5wb3BWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1c2hWYWx1ZSh2YWx1ZXMpO1xuICAgIH1cbiAgICBwcmVwYXJlT2JqZWN0KHNpemUpIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMudmFsdWVzLmxlbmd0aCA+PSBzaXplLCBgRXhwZWN0ZWQgJHtzaXplfSB2YWx1ZXMgb24gdGhlIHN0YWNrLCBmb3VuZCAke3RoaXMudmFsdWVzLmxlbmd0aH1gKTtcbiAgICAgICAgbGV0IGtleXMgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBrZXlzW2ldID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICAgICAgdmFsdWVzW2ldID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKFtrZXlzLCB2YWx1ZXNdKTtcbiAgICB9XG4gICAgLy8vIFV0aWxpdGllc1xuICAgIHB1c2goYXJncykge1xuICAgICAgICB3aGlsZSAoYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSBudWxsKSB7XG4gICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudEJsb2NrLnB1c2goYXJncyk7XG4gICAgfVxuICAgIHB1c2hWYWx1ZSh2YWwpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMucHVzaCh2YWwpO1xuICAgIH1cbiAgICBwb3BWYWx1ZSgpIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMudmFsdWVzLmxlbmd0aCwgXCJObyBleHByZXNzaW9uIGZvdW5kIG9uIHN0YWNrXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMucG9wKCk7XG4gICAgfVxufSJdfQ==

@@ -41,3 +41,3 @@ "use strict";

get symbols() {
return this.symbolStack.current;
return (0, _util.expect)(this.symbolStack.current, 'Expected a symbol table on the stack');
}

@@ -265,2 +265,3 @@ process(actions) {

let param = params[i];
(0, _util.assert)(this[param.type], `Unimplemented ${param.type} on TemplateCompiler`);
this[param.type](param);

@@ -278,2 +279,3 @@ }

let { key, value } = pairs[i];
(0, _util.assert)(this[value.type], `Unimplemented ${value.type} on TemplateCompiler`);
this[value.type](value);

@@ -407,2 +409,2 @@ this.opcode('literal', null, key);

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxBQUFPLEFBQXdDLEFBQU0sQUFBb0IsQUFBQzs7OztBQUMxRSxBQUFPLEFBQWdDLEFBQU0sQUFBdUIsQUFBQzs7OztBQUNyRSxBQUFPLEFBQUUsQUFBSyxBQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBRXhELEFBQU8sQUFBTyxBQUFTLEFBQUUsQUFBTSxBQUFpQixBQUFDOzs7O0FBTWpELHdCQUF3QixBQUFVO0FBQ2hDLEFBQU0sV0FBQyxBQUFLLE1BQUMsQUFBTyxZQUFLLEFBQVMsYUFBSSxDQUFDLEFBQUssTUFBQyxBQUFPLEFBQUMsQUFDdkQ7QUFBQyxBQUVELEFBQU0sQUFBQyxBQUFPOztBQWlCWixnQkFBWSxBQUEwQjtBQU45QixhQUFVLGFBQUcsQUFBQyxBQUFDO0FBQ2YsYUFBVyxjQUFhLEFBQUUsQUFBQztBQUMzQixhQUFXLGNBQUcsQUFBSSxBQUFLLEFBQWUsQUFBQztBQUN2QyxhQUFPLFVBQVUsQUFBRSxBQUFDO0FBQ3BCLGFBQVcsY0FBRyxBQUFLLEFBQUM7QUFHMUIsQUFBSSxhQUFDLEFBQU8sVUFBRyxBQUFPLFdBQUksQUFBRSxBQUFDLEFBQy9CO0FBQUM7QUFsQkQsQUFBTSxXQUFDLEFBQU8sUUFBeUIsQUFBMEIsU0FBRSxBQUFnQjtBQUNqRixZQUFJLEFBQWUsa0JBQUcsQUFBSSxBQUFlLEFBQUUsQUFBQztBQUM1QyxBQUFlLHdCQUFDLEFBQUssTUFBQyxBQUFHLEFBQUMsQUFBQztBQUUzQixZQUFJLEFBQVEsV0FBRyxJQUFJLEFBQWdCLGlCQUFDLEFBQU8sQUFBQyxBQUFDO0FBQzdDLFlBQUksQUFBTyxVQUFHLEFBQVEsU0FBQyxBQUFPLFFBQUMsQUFBZSxnQkFBQyxBQUFPLEFBQUMsQUFBQztBQUN4RCxBQUFNLGVBQUMsQUFBa0IsNkJB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QyxBQUFNLFdBQUssQUFBQyxBQUFDLEdBQUMsQUFBQztBQUMvQixZQUFJLEFBQUssUUFBRyxBQUFNLE9BQUMsQUFBQyxBQUFDLEFBQUM7QUFDdEIsQUFBRSxBQUFDLFlBQUMsQUFBSyxNQUFDLEFBQUksU0FBSyxBQUFlLEFBQUMsaUJBQUMsQUFBQztBQUNuQyxBQUFNLG1CQUFDLEFBQUssTUFBQyxBQUFLLEFBQUMsQUFDckI7QUFBQyxBQUFDLEFBQUksZUFBQyxBQUFDO0FBQ04sa0JBQU0sSUFBSSxBQUFLLEFBQUMsd0RBQWtELEFBQUcsSUFBQyxBQUFLLE1BQUMsQUFBSSxJQUFHLEFBQUMsQUFBQyxBQUN2RjtBQUFDLEFBQ0g7QUFBQyxBQUFDLEFBQUksS0FQQyxBQUFFLEFBQUMsTUFPSCxBQUFDO0FBQ04sY0FBTSxJQUFJLEFBQUssQUFBQyxTQUFHLEFBQUkseURBQXFELEFBQUcsSUFBQyxBQUFLLE1BQUMsQUFBSSxJQUFHLEFBQUMsQUFBQyxBQUNqRztBQUFDLEFBQ0g7QUFBQztBQUVELGtDQUFrQyxFQUFFLEFBQU0sUUFBRSxBQUFJLEFBQWdEO0FBQzlGLEFBQUUsQUFBQyxRQUFDLEFBQUksUUFBSSxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQU0sU0FBRyxBQUFDLEFBQUMsR0FBQyxBQUFDO0FBQ2xDLGNBQU0sSUFBSSxBQUFLLEFBQUMsTUFBNEMsQUFBQyxBQUFDLEFBQ2hFO0FBQUM7QUFFRCxBQUFFLEFBQUMsUUFBQyxBQUFNLE9BQUMsQUFBTSxXQUFLLEFBQUMsQUFBQyxHQUFDLEFBQUM7QUFDeEIsQUFBTSxlQUFDLEFBQVMsQUFBQyxBQUNuQjtBQUFDLEFBQUMsQUFBSSxXQUFDLEFBQUM7QUFDTixjQUFNLElBQUksQUFBSyxBQUFDLE1BQWlELEFBQUMsQUFBQyxBQUNyRTtBQUFDLEFBQ0g7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZW1wbGF0ZVZpc2l0b3IsIHsgU3ltYm9sVGFibGUsIEFjdGlvbiB9IGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIsIHsgVGVtcGxhdGUgfSBmcm9tIFwiLi9qYXZhc2NyaXB0LWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBTdGFjaywgZ2V0QXR0ck5hbWVzcGFjZSB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1ldGEgfSBmcm9tIFwiQGdsaW1tZXIvd2lyZS1mb3JtYXRcIjtcbmltcG9ydCB7IEFTVCwgaXNMaXRlcmFsIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcblxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlT3B0aW9uczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIG1ldGE6IFQ7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1c3RlZFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlLmVzY2FwZWQgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUuZXNjYXBlZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBjb21waWxlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+LCBhc3Q6IEFTVC5Qcm9ncmFtKTogVGVtcGxhdGU8VD4ge1xuICAgIGxldCB0ZW1wbGF0ZVZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKCk7XG4gICAgdGVtcGxhdGVWaXNpdG9yLnZpc2l0KGFzdCk7XG5cbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgVGVtcGxhdGVDb21waWxlcihvcHRpb25zKTtcbiAgICBsZXQgb3Bjb2RlcyA9IGNvbXBpbGVyLnByb2Nlc3ModGVtcGxhdGVWaXNpdG9yLmFjdGlvbnMpO1xuICAgIHJldHVybiBKYXZhU2NyaXB0Q29tcGlsZXIucHJvY2VzczxUPihvcGNvZGVzLCBhc3RbJ3N5bWJvbHMnXSwgb3B0aW9ucy5tZXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgb3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD47XG4gIHByaXZhdGUgdGVtcGxhdGVJZCA9IDA7XG4gIHByaXZhdGUgdGVtcGxhdGVJZHM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgc3ltYm9sU3RhY2sgPSBuZXcgU3RhY2s8U3ltYm9sVGFibGU+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBpbmNsdWRlTWV0YSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIGdldCBzeW1ib2xzKCk6IFN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xTdGFjay5jdXJyZW50O1xuICB9XG5cbiAgcHJvY2VzcyhhY3Rpb25zOiBBY3Rpb25bXSk6IEFjdGlvbltdIHtcbiAgICBhY3Rpb25zLmZvckVhY2goKFtuYW1lLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW25hbWVdKSB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCAke25hbWV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTsgfVxuICAgICAgKHRoaXNbbmFtZV0gYXMgYW55KSguLi5hcmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5vcGNvZGVzO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKHByb2dyYW06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICB0aGlzLm9wY29kZSgnc3RhcnRQcm9ncmFtJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2VuZFByb2dyYW0nLCBudWxsKTtcbiAgfVxuXG4gIHN0YXJ0QmxvY2socHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMudGVtcGxhdGVJZCsrO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMudGVtcGxhdGVJZHMucHVzaCh0aGlzLnRlbXBsYXRlSWQgLSAxKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kQmxvY2snLCBudWxsKTtcbiAgfVxuXG4gIHRleHQoW2FjdGlvbl06IFtBU1QuVGV4dE5vZGVdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3RleHQnLCBhY3Rpb24sIGFjdGlvbi5jaGFycyk7XG4gIH1cblxuICBjb21tZW50KFthY3Rpb25dOiBbQVNULkNvbW1lbnRTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2NvbW1lbnQnLCBhY3Rpb24sIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcblxuICAgIHRoaXMub3Bjb2RlKCdvcGVuRWxlbWVudCcsIGFjdGlvbiwgYWN0aW9uKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZShbYWN0aW9uLmF0dHJpYnV0ZXNbaV1dKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5tb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubW9kaWZpZXIoW2FjdGlvbi5tb2RpZmllcnNbaV1dKTtcbiAgICB9XG4gICAgdGhpcy5vcGNvZGUoJ2ZsdXNoRWxlbWVudCcsIG51bGwpO1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChhY3Rpb25bJ3N5bWJvbHMnXSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoW2FjdGlvbl06IFtBU1QuRWxlbWVudE5vZGVdKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnY2xvc2VFbGVtZW50JywgbnVsbCwgYWN0aW9uKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZShbYWN0aW9uXTogW0FTVC5BdHRyTm9kZV0pIHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gYWN0aW9uO1xuXG4gICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG5cbiAgICBsZXQgaXNTdGF0aWMgPSB0aGlzLnByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgLy8gQXJndW1lbnRzXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlzVHJ1c3RpbmcgPSBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVzdGluZykge1xuICAgICAgICB0aGlzLm9wY29kZSgndHJ1c3RpbmdBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vZGlmaWVyKFthY3Rpb25dOiBbQVNULkVsZW1lbnRNb2RpZmllclN0YXRlbWVudF0pIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoYWN0aW9uLnBhdGgsIGFjdGlvbi5sb2MsICdtb2RpZmllcicpO1xuXG4gICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG5cbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICB0aGlzLm9wY29kZSgnbW9kaWZpZXInLCBhY3Rpb24sIHBhcnRzWzBdKTtcbiAgfVxuXG4gIG11c3RhY2hlKFthY3Rpb25dOiBbQVNULk11c3RhY2hlU3RhdGVtZW50XSkge1xuICAgIGxldCB7IHBhdGggfSA9IGFjdGlvbjtcblxuICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNZaWVsZChwYXRoKSkge1xuICAgICAgbGV0IHRvID0gYXNzZXJ0VmFsaWRZaWVsZChhY3Rpb24pO1xuICAgICAgdGhpcy55aWVsZCh0bywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVidWdnZXIocGF0aCkpIHtcbiAgICAgIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShhY3Rpb24pO1xuICAgICAgdGhpcy5kZWJ1Z2dlcignZGVidWdnZXInLCBhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICB9XG4gIH1cblxuICBibG9jayhbYWN0aW9uLyosIGluZGV4LCBjb3VudCovXTogW0FTVC5CbG9ja1N0YXRlbWVudF0pIHtcbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICBsZXQgdGVtcGxhdGVJZCA9IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0c1swXSwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG5cbiAgYXJnKFtwYXRoXTogW0FTVC5QYXRoRXhwcmVzc2lvbl0pIHtcbiAgICBsZXQgeyBwYXJ0czogW2hlYWQsIC4uLnJlc3RdIH0gPSBwYXRoO1xuICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChoZWFkKTtcbiAgICB0aGlzLm9wY29kZSgnZ2V0JywgcGF0aCwgc3ltYm9sLCByZXN0KTtcbiAgfVxuXG4gIG11c3RhY2hlRXhwcmVzc2lvbihleHByOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBleHByLCBwYXRoLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzQnVpbHRJbkhlbHBlcihwYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIgYXMgQVNULkNhbGwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgfSBlbHNlIGlmIChpc0hlbHBlckludm9jYXRpb24oZXhwcikpIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICB9IGVsc2UgaWYgKHBhdGgudGhpcykge1xuICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgdGhpcy5zeW1ib2xzLmdldChoZWFkKSwgcGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgndW5rbm93bicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbWF5YmVMb2NhbCcsIGV4cHIsIHBhdGgucGFydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBTeW50YXhcblxuICB5aWVsZCh0bzogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgneWllbGQnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKHRvKSk7XG4gIH1cblxuICBkZWJ1Z2dlcihfbmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMub3Bjb2RlKCdkZWJ1Z2dlcicsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2hhc0Jsb2NrJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhuYW1lKSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2tQYXJhbXMnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIHBhcnRpYWwoX3BhcmFtczogQVNULkV4cHJlc3Npb25bXSwgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoJ3BhcnRpYWwnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5nZXRFdmFsSW5mbygpKTtcbiAgfVxuXG4gIGJ1aWx0SW5IZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgIGlmIChpc0hhc0Jsb2NrKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9jayhuYW1lLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzSGFzQmxvY2tQYXJhbXMocGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrUGFyYW1zKG5hbWUsIGV4cHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9ucywgaW52b2tlZCByZWN1cnNpdmVseSBmcm9tIHByZXBhcmVQYXJhbXMgYW5kIHByZXBhcmVIYXNoXG5cbiAgU3ViRXhwcmVzc2lvbihleHByOiBBU1QuU3ViRXhwcmVzc2lvbikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwci5wYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgZXhwci5wYXRoLnBhcnRzWzBdKTtcbiAgICB9XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbihleHByOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwci5kYXRhKSB7XG4gICAgICB0aGlzLmFyZyhbZXhwcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBzeW1ib2xzIH0gPSB0aGlzO1xuICAgICAgbGV0IFtoZWFkXSA9IGV4cHIucGFydHM7XG5cbiAgICAgIGlmIChleHByLnRoaXMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfSBlbHNlICBpZiAoc3ltYm9scy5oYXMoaGVhZCkpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIHN5bWJvbHMuZ2V0KGhlYWQpLCBleHByLnBhcnRzLnNsaWNlKDEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBleHByLnBhcnRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBTdHJpbmdMaXRlcmFsKGFjdGlvbjogQVNULlN0cmluZ0xpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBCb29sZWFuTGl0ZXJhbChhY3Rpb246IEFTVC5Cb29sZWFuTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bWJlckxpdGVyYWwoYWN0aW9uOiBBU1QuTnVtYmVyTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bGxMaXRlcmFsKGFjdGlvbjogQVNULk51bGxMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgVW5kZWZpbmVkTGl0ZXJhbChhY3Rpb246IEFTVC5VbmRlZmluZWRMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIG9wY29kZShuYW1lOiBhbnksIGFjdGlvbjogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGxldCBvcGNvZGUgPSBbbmFtZSwgLi4uYXJnc107XG4gICAgaWYgKHRoaXMuaW5jbHVkZU1ldGEgJiYgYWN0aW9uKSB7XG4gICAgICBvcGNvZGUucHVzaCh0aGlzLm1ldGEoYWN0aW9uKSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgfVxuXG4gIHByZXBhcmVIZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoZXhwci5wYXRoLCBleHByLmxvYywgJ2hlbHBlcicpO1xuXG4gICAgbGV0IHsgcGFyYW1zLCBoYXNoIH0gPSBleHByO1xuXG4gICAgdGhpcy5wcmVwYXJlSGFzaChoYXNoKTtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIHByZXBhcmVQYXJhbXMocGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdKSB7XG4gICAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBwYXJhbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBwYXJhbSA9IHBhcmFtc1tpXTtcblxuICAgICAgKHRoaXNbcGFyYW0udHlwZV0gYXMgYW55KShwYXJhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcmFtcy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUhhc2goaGFzaDogQVNULkhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gICAgaWYgKCFwYWlycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhaXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgeyBrZXksIHZhbHVlIH0gPSBwYWlyc1tpXTtcblxuICAgICAgKHRoaXNbdmFsdWUudHlwZV0gYXMgYW55KSh2YWx1ZSk7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGtleSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVPYmplY3QnLCBudWxsLCBwYWlycy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlOiBBU1QuQXR0ck5vZGVbJ3ZhbHVlJ10pIHtcbiAgICAvLyByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgaWYgdGhlIHZhbHVlIGlzIHN0YXRpY1xuXG4gICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgdmFsdWUsIHZhbHVlLmNoYXJzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdNdXN0YWNoZVN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3ZhbHVlXSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMucHJlcGFyZUNvbmNhdFBhcnRzKHZhbHVlLnBhcnRzKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2NvbmNhdCcsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVDb25jYXRQYXJ0cyhwYXJ0czogQVNULkNvbmNhdFN0YXRlbWVudFsncGFydHMnXSkge1xuICAgIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgaWYgKHBhcnQudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFtwYXJ0XSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIHBhcnQuY2hhcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJ0cy5sZW5ndGgpO1xuICB9XG5cbiAgYXR0cmlidXRlTXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgfVxuXG4gIG1ldGEobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgbGV0IGxvYyA9IG5vZGUubG9jO1xuICAgIGlmICghbG9jKSB7IHJldHVybiBbXTsgfVxuXG4gICAgbGV0IHsgc291cmNlLCBzdGFydCwgZW5kIH0gPSBsb2M7XG4gICAgcmV0dXJuIFsgJ2xvYycsIFtzb3VyY2UgfHwgbnVsbCwgW3N0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbl0sIFtlbmQubGluZSwgZW5kLmNvbHVtbl1dIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWxwZXJJbnZvY2F0aW9uKG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBtdXN0YWNoZSBpcyBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgJiB7IHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiB9IHtcbiAgcmV0dXJuIChtdXN0YWNoZS5wYXJhbXMgJiYgbXVzdGFjaGUucGFyYW1zLmxlbmd0aCA+IDApIHx8XG4gICAgKG11c3RhY2hlLmhhc2ggJiYgbXVzdGFjaGUuaGFzaC5wYWlycy5sZW5ndGggPiAwKTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVQYXRoKHsgcGFydHMgfTogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDE7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWwoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24sIHN5bWJvbHM6IFN5bWJvbFRhYmxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzeW1ib2xzICYmIC8qIHBhcnRzLmxlbmd0aCAmJiAqLyBzeW1ib2xzLmhhcyhwYXJ0c1swXSk7XG59XG5cbmZ1bmN0aW9uIGlzWWllbGQocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAneWllbGQnO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRpYWwocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAncGFydGlhbCc7XG59XG5cbmZ1bmN0aW9uIGlzRGVidWdnZXIocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnZGVidWdnZXInO1xufVxuXG5mdW5jdGlvbiBpc0hhc0Jsb2NrKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jayc7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2tQYXJhbXMocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrLXBhcmFtcyc7XG59XG5cbmZ1bmN0aW9uIGlzQnVpbHRJbkhlbHBlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIGlzSGFzQmxvY2socGF0aCkgfHwgaXNIYXNCbG9ja1BhcmFtcyhwYXRoKTtcbn1cblxuZnVuY3Rpb24gaXNBcmcocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXBhdGhbJ2RhdGEnXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNTaW1wbGVQYXRoKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiwgbG9jOiBBU1QuU291cmNlTG9jYXRpb24sIGNvbnRleHQ6IHN0cmluZykge1xuICBpZiAoIWlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgXFxgJHtwYXRoLm9yaWdpbmFsfVxcYCBpcyBub3QgYSB2YWxpZCBuYW1lIGZvciBhICR7Y29udGV4dH0gb24gbGluZSAke2xvYy5zdGFydC5saW5lfS5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFlpZWxkKHsgaGFzaCB9OiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBzdHJpbmcge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gIGlmICgocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLmtleSAhPT0gJ3RvJykgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeWllbGQgb25seSB0YWtlcyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudDogJ3RvJ2ApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWVgKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAocGFpcnNbMF0udmFsdWUgYXMgQVNULlN0cmluZ0xpdGVyYWwpLnZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbCh7IHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgbG9jIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkgLyogOiBleHByICovIHtcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXJ0aWFsIGZvdW5kIHdpdGggbm8gYXJndW1lbnRzLiBZb3UgbXVzdCBzcGVjaWZ5IGEgdGVtcGxhdGUgbmFtZS4gKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcnRpYWwgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9IGVsc2UgaWYgKCFlc2NhcGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB7e3twYXJ0aWFsIC4uLn19fSBpcyBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIHt7cGFydGlhbCAuLi59fSBpbnN0ZWFkIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKHR5cGU6IHN0cmluZywgeyBwYXJhbXMsIGhhc2gsIGxvYyB9OiBBU1QuQ2FsbCk6IHN0cmluZyB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfSBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IHBhcmFtID0gcGFyYW1zWzBdO1xuICAgIGlmIChwYXJhbS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgIHJldHVybiBwYXJhbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gb25seSB0YWtlcyBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZSh7IHBhcmFtcywgaGFzaCB9OiB7IHBhcmFtczogQVNULkV4cHJlc3Npb25bXSwgaGFzaDogQVNULkhhc2ggfSkge1xuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHNgKTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wbGF0ZS1jb21waWxlci5qcyJdLCJuYW1lcyI6WyJpc1RydXN0ZWRWYWx1ZSIsInZhbHVlIiwiZXNjYXBlZCIsInVuZGVmaW5lZCIsIlRlbXBsYXRlQ29tcGlsZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJ0ZW1wbGF0ZUlkIiwidGVtcGxhdGVJZHMiLCJzeW1ib2xTdGFjayIsIm9wY29kZXMiLCJpbmNsdWRlTWV0YSIsImNvbXBpbGUiLCJhc3QiLCJ0ZW1wbGF0ZVZpc2l0b3IiLCJ2aXNpdCIsImNvbXBpbGVyIiwicHJvY2VzcyIsImFjdGlvbnMiLCJtZXRhIiwic3ltYm9scyIsImN1cnJlbnQiLCJmb3JFYWNoIiwibmFtZSIsImFyZ3MiLCJFcnJvciIsInN0YXJ0UHJvZ3JhbSIsInByb2dyYW0iLCJwdXNoIiwib3Bjb2RlIiwiZW5kUHJvZ3JhbSIsInBvcCIsInN0YXJ0QmxvY2siLCJlbmRCbG9jayIsInRleHQiLCJhY3Rpb24iLCJjaGFycyIsImNvbW1lbnQiLCJvcGVuRWxlbWVudCIsImkiLCJhdHRyaWJ1dGVzIiwibGVuZ3RoIiwiYXR0cmlidXRlIiwibW9kaWZpZXJzIiwibW9kaWZpZXIiLCJjbG9zZUVsZW1lbnQiLCJuYW1lc3BhY2UiLCJpc1N0YXRpYyIsInByZXBhcmVBdHRyaWJ1dGVWYWx1ZSIsImNoYXJBdCIsInR5cGUiLCJpc1RydXN0aW5nIiwiYXNzZXJ0SXNTaW1wbGVQYXRoIiwicGF0aCIsImxvYyIsInBhcnRzIiwicHJlcGFyZUhlbHBlciIsIm11c3RhY2hlIiwibXVzdGFjaGVFeHByZXNzaW9uIiwiaXNZaWVsZCIsInRvIiwiYXNzZXJ0VmFsaWRZaWVsZCIsInlpZWxkIiwiaXNQYXJ0aWFsIiwicGFyYW1zIiwiYXNzZXJ0VmFsaWRQYXJ0aWFsIiwicGFydGlhbCIsImlzRGVidWdnZXIiLCJhc3NlcnRWYWxpZERlYnVnZ2VyVXNhZ2UiLCJkZWJ1Z2dlciIsImJsb2NrIiwiaW52ZXJzZUlkIiwiaW52ZXJzZSIsImFyZyIsImhlYWQiLCJyZXN0Iiwic3ltYm9sIiwiYWxsb2NhdGVOYW1lZCIsImV4cHIiLCJpc0J1aWx0SW5IZWxwZXIiLCJidWlsdEluSGVscGVyIiwiaXNBcmciLCJpc0hlbHBlckludm9jYXRpb24iLCJ0aGlzIiwiaXNMb2NhbCIsImdldCIsImlzU2ltcGxlUGF0aCIsInByZXBhcmVQYXJhbXMiLCJhbGxvY2F0ZUJsb2NrIiwiX25hbWUiLCJnZXRFdmFsSW5mbyIsImhhc0Jsb2NrIiwiaGFzQmxvY2tQYXJhbXMiLCJfcGFyYW1zIiwiaXNIYXNCbG9jayIsImFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZSIsIm9yaWdpbmFsIiwiaXNIYXNCbG9ja1BhcmFtcyIsIlN1YkV4cHJlc3Npb24iLCJQYXRoRXhwcmVzc2lvbiIsImRhdGEiLCJoYXMiLCJzbGljZSIsIlN0cmluZ0xpdGVyYWwiLCJCb29sZWFuTGl0ZXJhbCIsIk51bWJlckxpdGVyYWwiLCJOdWxsTGl0ZXJhbCIsIlVuZGVmaW5lZExpdGVyYWwiLCJoYXNoIiwicHJlcGFyZUhhc2giLCJwYXJhbSIsInBhaXJzIiwia2V5IiwiYXR0cmlidXRlTXVzdGFjaGUiLCJwcmVwYXJlQ29uY2F0UGFydHMiLCJwYXJ0Iiwibm9kZSIsInNvdXJjZSIsInN0YXJ0IiwiZW5kIiwibGluZSIsImNvbHVtbiIsImNvbnRleHQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7QUFFQTs7OztBQUNBLFNBQVNBLGNBQVQsQ0FBd0JDLEtBQXhCLEVBQStCO0FBQzNCLFdBQU9BLE1BQU1DLE9BQU4sS0FBa0JDLFNBQWxCLElBQStCLENBQUNGLE1BQU1DLE9BQTdDO0FBQ0g7QUFDYyxNQUFNRSxnQkFBTixDQUF1QjtBQUNsQ0MsZ0JBQVlDLE9BQVosRUFBcUI7QUFDakIsYUFBS0MsVUFBTCxHQUFrQixDQUFsQjtBQUNBLGFBQUtDLFdBQUwsR0FBbUIsRUFBbkI7QUFDQSxhQUFLQyxXQUFMLEdBQW1CLGlCQUFuQjtBQUNBLGFBQUtDLE9BQUwsR0FBZSxF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QUFDSCxLQUZELE1BRU87QUFDSCxjQUFNLElBQUloQixLQUFKLENBQVcsaURBQVgsQ0FBTjtBQUNIO0FBQ0oiLCJmaWxlIjoibGliL3RlbXBsYXRlLWNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVmlzaXRvciBmcm9tIFwiLi90ZW1wbGF0ZS12aXNpdG9yXCI7XG5pbXBvcnQgSmF2YVNjcmlwdENvbXBpbGVyIGZyb20gXCIuL2phdmFzY3JpcHQtY29tcGlsZXJcIjtcbmltcG9ydCB7IFN0YWNrLCBnZXRBdHRyTmFtZXNwYWNlIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IGFzc2VydCwgZXhwZWN0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IGlzTGl0ZXJhbCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5mdW5jdGlvbiBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5lc2NhcGVkICE9PSB1bmRlZmluZWQgJiYgIXZhbHVlLmVzY2FwZWQ7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZUNvbXBpbGVyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVJZCA9IDA7XG4gICAgICAgIHRoaXMudGVtcGxhdGVJZHMgPSBbXTtcbiAgICAgICAgdGhpcy5zeW1ib2xTdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgICB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICAgICAgdGhpcy5pbmNsdWRlTWV0YSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIH1cbiAgICBzdGF0aWMgY29tcGlsZShvcHRpb25zLCBhc3QpIHtcbiAgICAgICAgbGV0IHRlbXBsYXRlVmlzaXRvciA9IG5ldyBUZW1wbGF0ZVZpc2l0b3IoKTtcbiAgICAgICAgdGVtcGxhdGVWaXNpdG9yLnZpc2l0KGFzdCk7XG4gICAgICAgIGxldCBjb21waWxlciA9IG5ldyBUZW1wbGF0ZUNvbXBpbGVyKG9wdGlvbnMpO1xuICAgICAgICBsZXQgb3Bjb2RlcyA9IGNvbXBpbGVyLnByb2Nlc3ModGVtcGxhdGVWaXNpdG9yLmFjdGlvbnMpO1xuICAgICAgICByZXR1cm4gSmF2YVNjcmlwdENvbXBpbGVyLnByb2Nlc3Mob3Bjb2RlcywgYXN0WydzeW1ib2xzJ10sIG9wdGlvbnMubWV0YSk7XG4gICAgfVxuICAgIGdldCBzeW1ib2xzKCkge1xuICAgICAgICByZXR1cm4gZXhwZWN0KHRoaXMuc3ltYm9sU3RhY2suY3VycmVudCwgJ0V4cGVjdGVkIGEgc3ltYm9sIHRhYmxlIG9uIHRoZSBzdGFjaycpO1xuICAgIH1cbiAgICBwcm9jZXNzKGFjdGlvbnMpIHtcbiAgICAgICAgYWN0aW9ucy5mb3JFYWNoKChbbmFtZSwgLi4uYXJnc10pID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCAke25hbWV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXNbbmFtZV0oLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5vcGNvZGVzO1xuICAgIH1cbiAgICBzdGFydFByb2dyYW0ocHJvZ3JhbSkge1xuICAgICAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXJ0UHJvZ3JhbScsIHByb2dyYW0sIHByb2dyYW0pO1xuICAgIH1cbiAgICBlbmRQcm9ncmFtKCkge1xuICAgICAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgICAgICB0aGlzLm9wY29kZSgnZW5kUHJvZ3JhbScsIG51bGwpO1xuICAgIH1cbiAgICBzdGFydEJsb2NrKHByb2dyYW0pIHtcbiAgICAgICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKHByb2dyYW1bMF1bJ3N5bWJvbHMnXSk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVJZCsrO1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhcnRCbG9jaycsIHByb2dyYW0sIHByb2dyYW0pO1xuICAgIH1cbiAgICBlbmRCbG9jaygpIHtcbiAgICAgICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUlkcy5wdXNoKHRoaXMudGVtcGxhdGVJZCAtIDEpO1xuICAgICAgICB0aGlzLm9wY29kZSgnZW5kQmxvY2snLCBudWxsKTtcbiAgICB9XG4gICAgdGV4dChbYWN0aW9uXSkge1xuICAgICAgICB0aGlzLm9wY29kZSgndGV4dCcsIGFjdGlvbiwgYWN0aW9uLmNoYXJzKTtcbiAgICB9XG4gICAgY29tbWVudChbYWN0aW9uXSkge1xuICAgICAgICB0aGlzLm9wY29kZSgnY29tbWVudCcsIGFjdGlvbiwgYWN0aW9uLnZhbHVlKTtcbiAgICB9XG4gICAgb3BlbkVsZW1lbnQoW2FjdGlvbl0pIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ29wZW5FbGVtZW50JywgYWN0aW9uLCBhY3Rpb24pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZShbYWN0aW9uLmF0dHJpYnV0ZXNbaV1dKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5tb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMubW9kaWZpZXIoW2FjdGlvbi5tb2RpZmllcnNbaV1dKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wY29kZSgnZmx1c2hFbGVtZW50JywgbnVsbCk7XG4gICAgICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChhY3Rpb25bJ3N5bWJvbHMnXSk7XG4gICAgfVxuICAgIGNsb3NlRWxlbWVudChbYWN0aW9uXSkge1xuICAgICAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgICAgICB0aGlzLm9wY29kZSgnY2xvc2VFbGVtZW50JywgbnVsbCwgYWN0aW9uKTtcbiAgICB9XG4gICAgYXR0cmlidXRlKFthY3Rpb25dKSB7XG4gICAgICAgIGxldCB7IG5hbWUsIHZhbHVlIH0gPSBhY3Rpb247XG4gICAgICAgIGxldCBuYW1lc3BhY2UgPSBnZXRBdHRyTmFtZXNwYWNlKG5hbWUpO1xuICAgICAgICBsZXQgaXNTdGF0aWMgPSB0aGlzLnByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICAvLyBBcmd1bWVudHNcbiAgICAgICAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdzdGF0aWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGlzVHJ1c3RpbmcgPSBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNUcnVzdGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCd0cnVzdGluZ0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG1vZGlmaWVyKFthY3Rpb25dKSB7XG4gICAgICAgIGFzc2VydElzU2ltcGxlUGF0aChhY3Rpb24ucGF0aCwgYWN0aW9uLmxvYywgJ21vZGlmaWVyJyk7XG4gICAgICAgIGxldCB7IHBhdGg6IHsgcGFydHMgfSB9ID0gYWN0aW9uO1xuICAgICAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ21vZGlmaWVyJywgYWN0aW9uLCBwYXJ0c1swXSk7XG4gICAgfVxuICAgIG11c3RhY2hlKFthY3Rpb25dKSB7XG4gICAgICAgIGxldCB7IHBhdGggfSA9IGFjdGlvbjtcbiAgICAgICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgICAgICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnLCBhY3Rpb24sICFhY3Rpb24uZXNjYXBlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNZaWVsZChwYXRoKSkge1xuICAgICAgICAgICAgbGV0IHRvID0gYXNzZXJ0VmFsaWRZaWVsZChhY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy55aWVsZCh0bywgYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1BhcnRpYWwocGF0aCkpIHtcbiAgICAgICAgICAgIGxldCBwYXJhbXMgPSBhc3NlcnRWYWxpZFBhcnRpYWwoYWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMucGFydGlhbChwYXJhbXMsIGFjdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWJ1Z2dlcihwYXRoKSkge1xuICAgICAgICAgICAgYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKGFjdGlvbik7XG4gICAgICAgICAgICB0aGlzLmRlYnVnZ2VyKCdkZWJ1Z2dlcicsIGFjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBibG9jayhbYWN0aW9uIC8qLCBpbmRleCwgY291bnQqL10pIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGFjdGlvbik7XG4gICAgICAgIGxldCB0ZW1wbGF0ZUlkID0gdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICAgICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdibG9jaycsIGFjdGlvbiwgYWN0aW9uLnBhdGgucGFydHNbMF0sIHRlbXBsYXRlSWQsIGludmVyc2VJZCk7XG4gICAgfVxuICAgIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG4gICAgYXJnKFtwYXRoXSkge1xuICAgICAgICBsZXQgeyBwYXJ0czogW2hlYWQsIC4uLnJlc3RdIH0gPSBwYXRoO1xuICAgICAgICBsZXQgc3ltYm9sID0gdGhpcy5zeW1ib2xzLmFsbG9jYXRlTmFtZWQoaGVhZCk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBwYXRoLCBzeW1ib2wsIHJlc3QpO1xuICAgIH1cbiAgICBtdXN0YWNoZUV4cHJlc3Npb24oZXhwcikge1xuICAgICAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgICAgICBpZiAoaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIGV4cHIsIHBhdGgudmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQnVpbHRJbkhlbHBlcihwYXRoKSkge1xuICAgICAgICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJnKHBhdGgpKSB7XG4gICAgICAgICAgICB0aGlzLmFyZyhbcGF0aF0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzSGVscGVySW52b2NhdGlvbihleHByKSkge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2hlbHBlcicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhdGgudGhpcykge1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIHBhdGgucGFydHMpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTG9jYWwocGF0aCwgdGhpcy5zeW1ib2xzKSkge1xuICAgICAgICAgICAgbGV0IFtoZWFkLCAuLi5wYXJ0c10gPSBwYXRoLnBhcnRzO1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIHRoaXMuc3ltYm9scy5nZXQoaGVhZCksIHBhcnRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1NpbXBsZVBhdGgocGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMub3Bjb2RlKCd1bmtub3duJywgZXhwciwgcGF0aC5wYXJ0c1swXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnbWF5YmVMb2NhbCcsIGV4cHIsIHBhdGgucGFydHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vLyBJbnRlcm5hbCBTeW50YXhcbiAgICB5aWVsZCh0bywgYWN0aW9uKSB7XG4gICAgICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3lpZWxkJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayh0bykpO1xuICAgIH1cbiAgICBkZWJ1Z2dlcihfbmFtZSwgYWN0aW9uKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkZWJ1Z2dlcicsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICAgIH1cbiAgICBoYXNCbG9jayhuYW1lLCBhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2hhc0Jsb2NrJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhuYW1lKSk7XG4gICAgfVxuICAgIGhhc0Jsb2NrUGFyYW1zKG5hbWUsIGFjdGlvbikge1xuICAgICAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2tQYXJhbXMnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgICB9XG4gICAgcGFydGlhbChfcGFyYW1zLCBhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgICAgICB0aGlzLm9wY29kZSgncGFydGlhbCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICAgIH1cbiAgICBidWlsdEluSGVscGVyKGV4cHIpIHtcbiAgICAgICAgbGV0IHsgcGF0aCB9ID0gZXhwcjtcbiAgICAgICAgaWYgKGlzSGFzQmxvY2socGF0aCkpIHtcbiAgICAgICAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICAgICAgICB0aGlzLmhhc0Jsb2NrKG5hbWUsIGV4cHIpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzSGFzQmxvY2tQYXJhbXMocGF0aCkpIHtcbiAgICAgICAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICAgICAgICB0aGlzLmhhc0Jsb2NrUGFyYW1zKG5hbWUsIGV4cHIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vLyBFeHByZXNzaW9ucywgaW52b2tlZCByZWN1cnNpdmVseSBmcm9tIHByZXBhcmVQYXJhbXMgYW5kIHByZXBhcmVIYXNoXG4gICAgU3ViRXhwcmVzc2lvbihleHByKSB7XG4gICAgICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwci5wYXRoKSkge1xuICAgICAgICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2hlbHBlcicsIGV4cHIsIGV4cHIucGF0aC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUGF0aEV4cHJlc3Npb24oZXhwcikge1xuICAgICAgICBpZiAoZXhwci5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmFyZyhbZXhwcl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHsgc3ltYm9scyB9ID0gdGhpcztcbiAgICAgICAgICAgIGxldCBbaGVhZF0gPSBleHByLnBhcnRzO1xuICAgICAgICAgICAgaWYgKGV4cHIudGhpcykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBleHByLnBhcnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ltYm9scy5oYXMoaGVhZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgc3ltYm9scy5nZXQoaGVhZCksIGV4cHIucGFydHMuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgZXhwci5wYXJ0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgU3RyaW5nTGl0ZXJhbChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICAgIH1cbiAgICBCb29sZWFuTGl0ZXJhbChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICAgIH1cbiAgICBOdW1iZXJMaXRlcmFsKGFjdGlvbikge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gICAgfVxuICAgIE51bGxMaXRlcmFsKGFjdGlvbikge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gICAgfVxuICAgIFVuZGVmaW5lZExpdGVyYWwoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgICB9XG4gICAgLy8vIFV0aWxpdGllc1xuICAgIG9wY29kZShuYW1lLCBhY3Rpb24sIC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IG9wY29kZSA9IFtuYW1lLCAuLi5hcmdzXTtcbiAgICAgICAgaWYgKHRoaXMuaW5jbHVkZU1ldGEgJiYgYWN0aW9uKSB7XG4gICAgICAgICAgICBvcGNvZGUucHVzaCh0aGlzLm1ldGEoYWN0aW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgICB9XG4gICAgcHJlcGFyZUhlbHBlcihleHByKSB7XG4gICAgICAgIGFzc2VydElzU2ltcGxlUGF0aChleHByLnBhdGgsIGV4cHIubG9jLCAnaGVscGVyJyk7XG4gICAgICAgIGxldCB7IHBhcmFtcywgaGFzaCB9ID0gZXhwcjtcbiAgICAgICAgdGhpcy5wcmVwYXJlSGFzaChoYXNoKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlUGFyYW1zKHBhcmFtcyk7XG4gICAgfVxuICAgIHByZXBhcmVQYXJhbXMocGFyYW1zKSB7XG4gICAgICAgIGlmICghcGFyYW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gcGFyYW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgcGFyYW0gPSBwYXJhbXNbaV07XG4gICAgICAgICAgICBhc3NlcnQodGhpc1twYXJhbS50eXBlXSwgYFVuaW1wbGVtZW50ZWQgJHtwYXJhbS50eXBlfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7XG4gICAgICAgICAgICB0aGlzW3BhcmFtLnR5cGVdKHBhcmFtKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wY29kZSgncHJlcGFyZUFycmF5JywgbnVsbCwgcGFyYW1zLmxlbmd0aCk7XG4gICAgfVxuICAgIHByZXBhcmVIYXNoKGhhc2gpIHtcbiAgICAgICAgbGV0IHBhaXJzID0gaGFzaC5wYWlycztcbiAgICAgICAgaWYgKCFwYWlycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IHBhaXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgeyBrZXksIHZhbHVlIH0gPSBwYWlyc1tpXTtcbiAgICAgICAgICAgIGFzc2VydCh0aGlzW3ZhbHVlLnR5cGVdLCBgVW5pbXBsZW1lbnRlZCAke3ZhbHVlLnR5cGV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTtcbiAgICAgICAgICAgIHRoaXNbdmFsdWUudHlwZV0odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlT2JqZWN0JywgbnVsbCwgcGFpcnMubGVuZ3RoKTtcbiAgICB9XG4gICAgcHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIC8vIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBpZiB0aGUgdmFsdWUgaXMgc3RhdGljXG4gICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnVGV4dE5vZGUnOlxuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgdmFsdWUsIHZhbHVlLmNoYXJzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQ29uY2F0UGFydHModmFsdWUucGFydHMpO1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdjb25jYXQnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXBhcmVDb25jYXRQYXJ0cyhwYXJ0cykge1xuICAgICAgICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBwYXJ0ID0gcGFydHNbaV07XG4gICAgICAgICAgICBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbcGFydF0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIHBhcnQuY2hhcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJ0cy5sZW5ndGgpO1xuICAgIH1cbiAgICBhdHRyaWJ1dGVNdXN0YWNoZShbYWN0aW9uXSkge1xuICAgICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgIH1cbiAgICBtZXRhKG5vZGUpIHtcbiAgICAgICAgbGV0IGxvYyA9IG5vZGUubG9jO1xuICAgICAgICBpZiAoIWxvYykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGxldCB7IHNvdXJjZSwgc3RhcnQsIGVuZCB9ID0gbG9jO1xuICAgICAgICByZXR1cm4gWydsb2MnLCBbc291cmNlIHx8IG51bGwsIFtzdGFydC5saW5lLCBzdGFydC5jb2x1bW5dLCBbZW5kLmxpbmUsIGVuZC5jb2x1bW5dXV07XG4gICAgfVxufVxuZnVuY3Rpb24gaXNIZWxwZXJJbnZvY2F0aW9uKG11c3RhY2hlKSB7XG4gICAgcmV0dXJuIG11c3RhY2hlLnBhcmFtcyAmJiBtdXN0YWNoZS5wYXJhbXMubGVuZ3RoID4gMCB8fCBtdXN0YWNoZS5oYXNoICYmIG11c3RhY2hlLmhhc2gucGFpcnMubGVuZ3RoID4gMDtcbn1cbmZ1bmN0aW9uIGlzU2ltcGxlUGF0aCh7IHBhcnRzIH0pIHtcbiAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAxO1xufVxuZnVuY3Rpb24gaXNMb2NhbCh7IHBhcnRzIH0sIHN5bWJvbHMpIHtcbiAgICByZXR1cm4gc3ltYm9scyAmJiBzeW1ib2xzLmhhcyhwYXJ0c1swXSk7XG59XG5mdW5jdGlvbiBpc1lpZWxkKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ3lpZWxkJztcbn1cbmZ1bmN0aW9uIGlzUGFydGlhbChwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdwYXJ0aWFsJztcbn1cbmZ1bmN0aW9uIGlzRGVidWdnZXIocGF0aCkge1xuICAgIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnZGVidWdnZXInO1xufVxuZnVuY3Rpb24gaXNIYXNCbG9jayhwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2snO1xufVxuZnVuY3Rpb24gaXNIYXNCbG9ja1BhcmFtcyhwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2stcGFyYW1zJztcbn1cbmZ1bmN0aW9uIGlzQnVpbHRJbkhlbHBlcihwYXRoKSB7XG4gICAgcmV0dXJuIGlzSGFzQmxvY2socGF0aCkgfHwgaXNIYXNCbG9ja1BhcmFtcyhwYXRoKTtcbn1cbmZ1bmN0aW9uIGlzQXJnKHBhdGgpIHtcbiAgICByZXR1cm4gISFwYXRoWydkYXRhJ107XG59XG5mdW5jdGlvbiBhc3NlcnRJc1NpbXBsZVBhdGgocGF0aCwgbG9jLCBjb250ZXh0KSB7XG4gICAgaWYgKCFpc1NpbXBsZVBhdGgocGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcXGAke3BhdGgub3JpZ2luYWx9XFxgIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgJHtjb250ZXh0fSBvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9LmApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFZhbGlkWWllbGQoeyBoYXNoIH0pIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuICAgIGlmIChwYWlycy5sZW5ndGggPT09IDEgJiYgcGFpcnNbMF0ua2V5ICE9PSAndG8nIHx8IHBhaXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB5aWVsZCBvbmx5IHRha2VzIGEgc2luZ2xlIG5hbWVkIGFyZ3VtZW50OiAndG8nYCk7XG4gICAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDEgJiYgcGFpcnNbMF0udmFsdWUudHlwZSAhPT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZWApO1xuICAgIH0gZWxzZSBpZiAocGFpcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnZGVmYXVsdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhaXJzWzBdLnZhbHVlLnZhbHVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbCh7IHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgbG9jIH0pIHtcbiAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJ0aWFsIGZvdW5kIHdpdGggbm8gYXJndW1lbnRzLiBZb3UgbXVzdCBzcGVjaWZ5IGEgdGVtcGxhdGUgbmFtZS4gKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfSBlbHNlIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcnRpYWwgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgIH0gZWxzZSBpZiAoIWVzY2FwZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB7e3twYXJ0aWFsIC4uLn19fSBpcyBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIHt7cGFydGlhbCAuLi59fSBpbnN0ZWFkIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xufVxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKHR5cGUsIHsgcGFyYW1zLCBoYXNoLCBsb2MgfSkge1xuICAgIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnZGVmYXVsdCc7XG4gICAgfSBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGxldCBwYXJhbSA9IHBhcmFtc1swXTtcbiAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtLnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3R5cGV9IG9ubHkgdGFrZXMgYSBzaW5nbGUgcG9zaXRpb25hbCBhcmd1bWVudCAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhc3NlcnRWYWxpZERlYnVnZ2VyVXNhZ2UoeyBwYXJhbXMsIGhhc2ggfSkge1xuICAgIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHNgKTtcbiAgICB9XG59Il19

@@ -31,3 +31,5 @@ 'use strict';

}
get(_name) {}
get(_name) {
throw (0, _util.unreachable)();
}
getLocalsMap() {

@@ -278,3 +280,3 @@ return {};

get currentFrame() {
return this.getCurrentFrame();
return (0, _util.expect)(this.getCurrentFrame(), "Expected a current frame");
}

@@ -311,2 +313,2 @@ getCurrentFrame() {

}
//# 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=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wbGF0ZS12aXNpdG9yLmpzIl0sIm5hbWVzIjpbIlN5bWJvbFRhYmxlIiwidG9wIiwiUHJvZ3JhbVN5bWJvbFRhYmxlIiwiY2hpbGQiLCJsb2NhbHMiLCJzeW1ib2xzIiwibWFwIiwibmFtZSIsImFsbG9jYXRlIiwiQmxvY2tTeW1ib2xUYWJsZSIsImNvbnN0cnVjdG9yIiwiYXJndW1lbnRzIiwic2l6ZSIsIm5hbWVkIiwiYmxvY2tzIiwiaGFzIiwiX25hbWUiLCJnZXQiLCJnZXRMb2NhbHNNYXAiLCJnZXRFdmFsSW5mbyIsImFsbG9jYXRlTmFtZWQiLCJhbGxvY2F0ZUJsb2NrIiwiYmxvY2siLCJpZGVudGlmaWVyIiwicHVzaCIsInBhcmVudCIsInNsb3RzIiwiaW5kZXhPZiIsInNsb3QiLCJkaWN0IiwiZm9yRWFjaCIsInN5bWJvbCIsIk9iamVjdCIsImtleXMiLCJGcmFtZSIsInBhcmVudE5vZGUiLCJjaGlsZHJlbiIsImNoaWxkSW5kZXgiLCJjaGlsZENvdW50IiwiY2hpbGRUZW1wbGF0ZUNvdW50IiwibXVzdGFjaGVDb3VudCIsImFjdGlvbnMiLCJibGFua0NoaWxkVGV4dE5vZGVzIiwiVGVtcGxhdGVWaXNpdG9yIiwiZnJhbWVTdGFjayIsInByb2dyYW1EZXB0aCIsInZpc2l0Iiwibm9kZSIsInR5cGUiLCJQcm9ncmFtIiwicHJvZ3JhbSIsInBhcmVudEZyYW1lIiwiZ2V0Q3VycmVudEZyYW1lIiwicHJvZ3JhbUZyYW1lIiwicHVzaEZyYW1lIiwiYmxvY2tQYXJhbXMiLCJzdGFydFR5cGUiLCJlbmRUeXBlIiwiYm9keSIsImxlbmd0aCIsImkiLCJyZXZlcnNlIiwicG9wRnJhbWUiLCJFbGVtZW50Tm9kZSIsImVsZW1lbnQiLCJjdXJyZW50RnJhbWUiLCJlbGVtZW50RnJhbWUiLCJtb2RpZmllcnMiLCJhY3Rpb25BcmdzIiwiYXR0cmlidXRlcyIsIm9wZW4iLCJBdHRyTm9kZSIsImF0dHIiLCJ2YWx1ZSIsIlRleHROb2RlIiwidGV4dCIsImZyYW1lIiwiY2hhcnMiLCJkb21JbmRleE9mIiwiQmxvY2tTdGF0ZW1lbnQiLCJpbnZlcnNlIiwiUGFydGlhbFN0YXRlbWVudCIsIkNvbW1lbnRTdGF0ZW1lbnQiLCJNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQiLCJNdXN0YWNoZVN0YXRlbWVudCIsIm11c3RhY2hlIiwicG9wIiwibm9kZXMiLCJkb21Ob2RlIiwiaW5kZXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDTyxNQUFNQSxXQUFOLENBQWtCO0FBQ3JCLFdBQU9DLEdBQVAsR0FBYTtBQUNULGVBQU8sSUFBSUMsa0JBQUosRUFBUDtBQUNIO0FBQ0RDLFVBQU1DLE1BQU4sRUFBYztBQUNWLFlBQUlDLFVBQVVELE9BQU9FLEdBQVAsQ0FBV0MsUUFBUSxLQUFLQyxRQUFMLENBQWNELElBQWQsQ0FBbkIsQ0FBZDtBQUNBLGVBQU8sSUFBSUUsZ0JBQUosQ0FBcUIsSUFBckIsRUFBMkJMLE1BQTNCLEVBQW1DQyxPQUFuQyxDQUFQO0FBQ0g7QUFQb0I7UUFBWkwsVyxHQUFBQSxXO0FBU04sTUFBTUUsa0JBQU4sU0FBaUNGLFdBQWpDLENBQTZDO0FBQ2hEVSxrQkFBYztBQUNWLGNBQU0sR0FBR0MsU0FBVDtBQUNBLGFBQUtOLE9BQUwsR0FBZSxFQUFmO0FBQ0EsYUFBS08sSUFBTCxHQUFZLENBQVo7QUFDQSxhQUFLQyxLQUFMLEdBQWEsaUJBQWI7QUFDQSxhQUFLQyxNQUFMLEdBQWMsaUJBQWQ7QUFDSDtBQUNEQyxRQUFJQyxLQUFKLEVBQVc7QUFDUCxlQUFPLEtBQVA7QUFDSDtBQUNEQyxRQUFJRCxLQUFKLEVBQVc7QUFDUCxjQUFNLHdCQUFOO0FBQ0g7QUFDREUsbUJBQWU7QUFDWCxlQUFPLEVBQVA7QUFDSDtBQUNEQyxrQkFBYztBQUNWLGVBQU8sRUFBUDtBQUNIO0FBQ0RDLGtCQUFjYixJQUFkLEVBQW9CO0FBQ2hCLFlBQUlNLFFBQVEsS0FBS0EsS0FBTCxDQUFXTixJQUFYLENBQVo7QUFDQSxZQUFJLENBQUNNLEtBQUwsRUFBWTtBQUNS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QixNQUFNNUIsTUFBMUIsRUFBa0NDLEdBQWxDLEVBQXVDO0FBQ25DLFlBQUliLE9BQU93QyxNQUFNM0IsQ0FBTixDQUFYO0FBQ0EsWUFBSWIsS0FBS0MsSUFBTCxLQUFjLFVBQWQsSUFBNEJELEtBQUtDLElBQUwsS0FBYyxhQUE5QyxFQUE2RDtBQUN6RDtBQUNILFNBRkQsTUFFTztBQUNIeUM7QUFDSDtBQUNELFlBQUkxQyxTQUFTeUMsT0FBYixFQUFzQjtBQUNsQixtQkFBT0MsS0FBUDtBQUNIO0FBQ0o7QUFDRCxXQUFPLENBQUMsQ0FBUjtBQUNIIiwiZmlsZSI6ImxpYi90ZW1wbGF0ZS12aXNpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGljdCwgdW5yZWFjaGFibGUsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuZXhwb3J0IGNsYXNzIFN5bWJvbFRhYmxlIHtcbiAgICBzdGF0aWMgdG9wKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb2dyYW1TeW1ib2xUYWJsZSgpO1xuICAgIH1cbiAgICBjaGlsZChsb2NhbHMpIHtcbiAgICAgICAgbGV0IHN5bWJvbHMgPSBsb2NhbHMubWFwKG5hbWUgPT4gdGhpcy5hbGxvY2F0ZShuYW1lKSk7XG4gICAgICAgIHJldHVybiBuZXcgQmxvY2tTeW1ib2xUYWJsZSh0aGlzLCBsb2NhbHMsIHN5bWJvbHMpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQcm9ncmFtU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IFtdO1xuICAgICAgICB0aGlzLnNpemUgPSAxO1xuICAgICAgICB0aGlzLm5hbWVkID0gZGljdCgpO1xuICAgICAgICB0aGlzLmJsb2NrcyA9IGRpY3QoKTtcbiAgICB9XG4gICAgaGFzKF9uYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0KF9uYW1lKSB7XG4gICAgICAgIHRocm93IHVucmVhY2hhYmxlKCk7XG4gICAgfVxuICAgIGdldExvY2Fsc01hcCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBnZXRFdmFsSW5mbygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBhbGxvY2F0ZU5hbWVkKG5hbWUpIHtcbiAgICAgICAgbGV0IG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXTtcbiAgICAgICAgaWYgKCFuYW1lZCkge1xuICAgICAgICAgICAgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgQCR7bmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmFtZWQ7XG4gICAgfVxuICAgIGFsbG9jYXRlQmxvY2sobmFtZSkge1xuICAgICAgICBsZXQgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXTtcbiAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYCYke25hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJsb2NrO1xuICAgIH1cbiAgICBhbGxvY2F0ZShpZGVudGlmaWVyKSB7XG4gICAgICAgIHRoaXMuc3ltYm9scy5wdXNoKGlkZW50aWZpZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaXplKys7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEJsb2NrU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gICAgY29uc3RydWN0b3IocGFyZW50LCBzeW1ib2xzLCBzbG90cykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5zeW1ib2xzID0gc3ltYm9scztcbiAgICAgICAgdGhpcy5zbG90cyA9IHNsb3RzO1xuICAgIH1cbiAgICBoYXMobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSkgIT09IC0xIHx8IHRoaXMucGFyZW50LmhhcyhuYW1lKTtcbiAgICB9XG4gICAgZ2V0KG5hbWUpIHtcbiAgICAgICAgbGV0IHNsb3QgPSB0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgcmV0dXJuIHNsb3QgPT09IC0xID8gdGhpcy5wYXJlbnQuZ2V0KG5hbWUpIDogdGhpcy5zbG90c1tzbG90XTtcbiAgICB9XG4gICAgZ2V0TG9jYWxzTWFwKCkge1xuICAgICAgICBsZXQgZGljdCA9IHRoaXMucGFyZW50LmdldExvY2Fsc01hcCgpO1xuICAgICAgICB0aGlzLnN5bWJvbHMuZm9yRWFjaChzeW1ib2wgPT4gZGljdFtzeW1ib2xdID0gdGhpcy5nZXQoc3ltYm9sKSk7XG4gICAgICAgIHJldHVybiBkaWN0O1xuICAgIH1cbiAgICBnZXRFdmFsSW5mbygpIHtcbiAgICAgICAgbGV0IGxvY2FscyA9IHRoaXMuZ2V0TG9jYWxzTWFwKCk7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhsb2NhbHMpLm1hcChzeW1ib2wgPT4gbG9jYWxzW3N5bWJvbF0pO1xuICAgIH1cbiAgICBhbGxvY2F0ZU5hbWVkKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlTmFtZWQobmFtZSk7XG4gICAgfVxuICAgIGFsbG9jYXRlQmxvY2sobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVCbG9jayhuYW1lKTtcbiAgICB9XG4gICAgYWxsb2NhdGUoaWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGUoaWRlbnRpZmllcik7XG4gICAgfVxufVxuLyoqXG4gKiBUYWtlcyBpbiBhbiBBU1QgYW5kIG91dHB1dHMgYSBsaXN0IG9mIGFjdGlvbnMgdG8gYmUgY29uc3VtZWRcbiAqIGJ5IGEgY29tcGlsZXIuIEZvciBleGFtcGxlLCB0aGUgdGVtcGxhdGVcbiAqXG4gKiAgICAgZm9ve3tiYXJ9fTxkaXY+YmF6PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgM11dLFxuICogICAgICBbJ211c3RhY2hlJywgW211c3RhY2hlTm9kZSwgMSwgM11dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgM10sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoaXMgdmlzaXRvciB3YWxrcyB0aGUgQVNUIGRlcHRoIGZpcnN0IGFuZCBiYWNrd2FyZHMuIEFzXG4gKiBhIHJlc3VsdCB0aGUgYm90dG9tLW1vc3QgY2hpbGQgdGVtcGxhdGUgd2lsbCBhcHBlYXIgYXQgdGhlXG4gKiB0b3Agb2YgdGhlIGFjdGlvbnMgbGlzdCB3aGVyZWFzIHRoZSByb290IHRlbXBsYXRlIHdpbGwgYXBwZWFyXG4gKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgICAgPGRpdj57eyNpZn19Zm9ve3tlbHNlfX1iYXI8Yj48L2I+e3svaWZ9fTwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDIsIDBdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMiwgMF1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMl1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMl1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxLCAxXV0sXG4gKiAgICAgIFsnYmxvY2snLCBbYmxvY2tOb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIGlzIG1haW50YWluZWQgYnkgYSBzdGFjayBvZiBmcmFtZXMuXG4gKiBXaGVuZXZlciBhIG5vZGUgd2l0aCBjaGlsZHJlbiBpcyBlbnRlcmVkIChlaXRoZXIgYSBQcm9ncmFtTm9kZVxuICogb3IgYW4gRWxlbWVudE5vZGUpIGEgZnJhbWUgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIG9mIHRoYXRcbiAqIG5vZGUuIEZvciBleGFtcGxlLFxuICpcbiAqICAgLSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGlsZCBub2RlIGJlaW5nIHZpc2l0ZWRcbiAqICAgLSB0aGUgbnVtYmVyIG9mIG11c3RhY2hlcyBjb250YWluZWQgd2l0aGluIGl0cyBjaGlsZCBub2Rlc1xuICogICAtIHRoZSBsaXN0IG9mIGFjdGlvbnMgZ2VuZXJhdGVkIGJ5IGl0cyBjaGlsZCBub2Rlc1xuICovXG5jbGFzcyBGcmFtZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucGFyZW50Tm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICAgICAgICB0aGlzLmNoaWxkSW5kZXggPSBudWxsO1xuICAgICAgICB0aGlzLmNoaWxkQ291bnQgPSBudWxsO1xuICAgICAgICB0aGlzLmNoaWxkVGVtcGxhdGVDb3VudCA9IDA7XG4gICAgICAgIHRoaXMubXVzdGFjaGVDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBudWxsO1xuICAgICAgICB0aGlzLnN5bWJvbHMgPSBudWxsO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlVmlzaXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZnJhbWVTdGFjayA9IFtdO1xuICAgICAgICB0aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5wcm9ncmFtRGVwdGggPSAtMTtcbiAgICB9XG4gICAgdmlzaXQobm9kZSkge1xuICAgICAgICB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gICAgfVxuICAgIC8vIFRyYXZlcnNhbCBtZXRob2RzXG4gICAgUHJvZ3JhbShwcm9ncmFtKSB7XG4gICAgICAgIHRoaXMucHJvZ3JhbURlcHRoKys7XG4gICAgICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gICAgICAgIGxldCBwcm9ncmFtRnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuICAgICAgICBpZiAoIXBhcmVudEZyYW1lKSB7XG4gICAgICAgICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBTeW1ib2xUYWJsZS50b3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMuY2hpbGQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXJ0VHlwZSwgZW5kVHlwZTtcbiAgICAgICAgaWYgKHRoaXMucHJvZ3JhbURlcHRoID09PSAwKSB7XG4gICAgICAgICAgICBzdGFydFR5cGUgPSAnc3RhcnRQcm9ncmFtJztcbiAgICAgICAgICAgIGVuZFR5cGUgPSAnZW5kUHJvZ3JhbSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFydFR5cGUgPSAnc3RhcnRCbG9jayc7XG4gICAgICAgICAgICBlbmRUeXBlID0gJ2VuZEJsb2NrJztcbiAgICAgICAgfVxuICAgICAgICBwcm9ncmFtRnJhbWUucGFyZW50Tm9kZSA9IHByb2dyYW07XG4gICAgICAgIHByb2dyYW1GcmFtZS5jaGlsZHJlbiA9IHByb2dyYW0uYm9keTtcbiAgICAgICAgcHJvZ3JhbUZyYW1lLmNoaWxkQ291bnQgPSBwcm9ncmFtLmJvZHkubGVuZ3RoO1xuICAgICAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgICAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtlbmRUeXBlLCBbcHJvZ3JhbSwgdGhpcy5wcm9ncmFtRGVwdGhdXSk7XG4gICAgICAgIHByb2dyYW1GcmFtZS5zeW1ib2xzID0gcHJvZ3JhbVsnc3ltYm9scyddO1xuICAgICAgICBmb3IgKGxldCBpID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBwcm9ncmFtRnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0KHByb2dyYW0uYm9keVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbc3RhcnRUeXBlLCBbcHJvZ3JhbSwgcHJvZ3JhbUZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCwgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXV0pO1xuICAgICAgICB0aGlzLnBvcEZyYW1lKCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbURlcHRoLS07XG4gICAgICAgIC8vIFB1c2ggdGhlIGNvbXBsZXRlZCB0ZW1wbGF0ZSBpbnRvIHRoZSBnbG9iYWwgYWN0aW9ucyBsaXN0XG4gICAgICAgIGlmIChwYXJlbnRGcmFtZSkge1xuICAgICAgICAgICAgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2goLi4ucHJvZ3JhbUZyYW1lLmFjdGlvbnMucmV2ZXJzZSgpKTtcbiAgICB9XG4gICAgRWxlbWVudE5vZGUoZWxlbWVudCkge1xuICAgICAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICAgICAgbGV0IGVsZW1lbnRGcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG4gICAgICAgIGVsZW1lbnRGcmFtZS5wYXJlbnROb2RlID0gZWxlbWVudDtcbiAgICAgICAgZWxlbWVudEZyYW1lLmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgZWxlbWVudEZyYW1lLmNoaWxkQ291bnQgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgKz0gZWxlbWVudC5tb2RpZmllcnMubGVuZ3RoO1xuICAgICAgICBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgICAgICBlbGVtZW50RnJhbWUuc3ltYm9scyA9IGVsZW1lbnRbJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMuY2hpbGQoZWxlbWVudC5ibG9ja1BhcmFtcyk7XG4gICAgICAgIGxldCBhY3Rpb25BcmdzID0gW2VsZW1lbnQsIHBhcmVudEZyYW1lLmNoaWxkSW5kZXgsIHBhcmVudEZyYW1lLmNoaWxkQ291bnRdO1xuICAgICAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKFsnY2xvc2VFbGVtZW50JywgYWN0aW9uQXJnc10pO1xuICAgICAgICBmb3IgKGxldCBpID0gZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGVsZW1lbnRGcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgICAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5jaGlsZHJlbltpXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG9wZW4gPSBbJ29wZW5FbGVtZW50JywgWy4uLmFjdGlvbkFyZ3MsIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50LCBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKCldXTtcbiAgICAgICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChvcGVuKTtcbiAgICAgICAgdGhpcy5wb3BGcmFtZSgpO1xuICAgICAgICAvLyBQcm9wYWdhdGUgdGhlIGVsZW1lbnQncyBmcmFtZSBzdGF0ZSB0byB0aGUgcGFyZW50IGZyYW1lXG4gICAgICAgIGlmIChlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHBhcmVudEZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQgKz0gZWxlbWVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudDtcbiAgICAgICAgcGFyZW50RnJhbWUuYWN0aW9ucy5wdXNoKC4uLmVsZW1lbnRGcmFtZS5hY3Rpb25zKTtcbiAgICB9XG4gICAgQXR0ck5vZGUoYXR0cikge1xuICAgICAgICBpZiAoYXR0ci52YWx1ZS50eXBlICE9PSAnVGV4dE5vZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBUZXh0Tm9kZSh0ZXh0KSB7XG4gICAgICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgICAgICBpZiAodGV4dC5jaGFycyA9PT0gJycpIHtcbiAgICAgICAgICAgIGZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucHVzaChkb21JbmRleE9mKGZyYW1lLmNoaWxkcmVuLCB0ZXh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsndGV4dCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0pO1xuICAgIH1cblxuICAgIEJsb2NrU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICAgICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnYmxvY2snLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dKTtcbiAgICAgICAgaWYgKG5vZGUuaW52ZXJzZSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdChub2RlLmludmVyc2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnByb2dyYW0pIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXQobm9kZS5wcm9ncmFtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFBhcnRpYWxTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICAgICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgICAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0pO1xuICAgIH1cblxuICAgIENvbW1lbnRTdGF0ZW1lbnQodGV4dCkge1xuICAgICAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICAgICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnY29tbWVudCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0pO1xuICAgIH1cblxuICAgIE11c3RhY2hlQ29tbWVudFN0YXRlbWVudCgpIHtcbiAgICAgICAgLy8gSW50ZW50aW9uYWwgZW1wdHk6IEhhbmRsZWJhcnMgY29tbWVudHMgc2hvdWxkIG5vdCBhZmZlY3Qgb3V0cHV0LlxuICAgIH1cblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG11c3RhY2hlKSB7XG4gICAgICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgICAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW211c3RhY2hlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0pO1xuICAgIH1cblxuICAgIC8vIEZyYW1lIGhlbHBlcnNcbiAgICBnZXQgY3VycmVudEZyYW1lKCkge1xuICAgICAgICByZXR1cm4gZXhwZWN0KHRoaXMuZ2V0Q3VycmVudEZyYW1lKCksIFwiRXhwZWN0ZWQgYSBjdXJyZW50IGZyYW1lXCIpO1xuICAgIH1cbiAgICBnZXRDdXJyZW50RnJhbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2tbdGhpcy5mcmFtZVN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBwdXNoRnJhbWUoKSB7XG4gICAgICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgICAgICB0aGlzLmZyYW1lU3RhY2sucHVzaChmcmFtZSk7XG4gICAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gICAgcG9wRnJhbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gICAgfVxufVxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzLCBkb21Ob2RlKSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlID09PSBkb21Ob2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufSJdfQ==

@@ -18,2 +18,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7d0JBQStCLEFBQWEsVUFBRSxBQUFZO0FBQ3hELEFBQUcsQUFBQyxTQUFDLElBQUksQUFBQyxJQUFDLEFBQUMsR0FBRSxBQUFDLElBQUMsQUFBTyxRQUFDLEFBQU0sUUFBRSxBQUFDLElBQUMsQUFBQyxHQUFFLEFBQUMsQUFBRSxLQUFFLEFBQUM7QUFDekMsWUFBSSxBQUFNLFNBQUcsQUFBTyxRQUFDLEFBQUMsQUFBQyxHQUFDLEFBQUMsQUFBQyxBQUFDO0FBQzNCLFlBQUksQUFBTSxTQUFHLEFBQU8sUUFBQyxBQUFDLEFBQUMsR0FBQyxBQUFDLEFBQUMsQUFBQztBQUMzQixBQUFFLEFBQUMsWUFBQyxBQUFNLEFBQUMsUUFBQyxBQUFDO0FBQ1gsQUFBUSxxQkFBQyxBQUFNLEFBQUMsUUFBQyxBQUFLLE1BQUMsQUFBUSxVQUFFLEFBQU0sQUFBQyxBQUFDLEFBQzNDO0FBQUMsQUFBQyxBQUFJLGVBQUMsQUFBQztBQUNOLEFBQVEscUJBQUMsQUFBTSxBQUFDLFFBQUMsQUFBSSxLQUFDLEFBQVEsQUFBQyxBQUFDLEFBQ2xDO0FBQUMsQUFDSDtBQUFDLEFBQ0g7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzT3Bjb2Rlcyhjb21waWxlcjogYW55LCBvcGNvZGVzOiBhbnkpIHtcbiAgZm9yIChsZXQgaT0wLCBsPW9wY29kZXMubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgIGxldCBtZXRob2QgPSBvcGNvZGVzW2ldWzBdO1xuICAgIGxldCBwYXJhbXMgPSBvcGNvZGVzW2ldWzFdO1xuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIGNvbXBpbGVyW21ldGhvZF0uYXBwbHkoY29tcGlsZXIsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBpbGVyW21ldGhvZF0uY2FsbChjb21waWxlcik7XG4gICAgfVxuICB9XG59Il19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJwcm9jZXNzT3Bjb2RlcyIsImNvbXBpbGVyIiwib3Bjb2RlcyIsImkiLCJsIiwibGVuZ3RoIiwibWV0aG9kIiwicGFyYW1zIiwiYXBwbHkiLCJjYWxsIl0sIm1hcHBpbmdzIjoiOzs7OztRQUFnQkEsYyxHQUFBQSxjO0FBQVQsU0FBU0EsY0FBVCxDQUF3QkMsUUFBeEIsRUFBa0NDLE9BQWxDLEVBQTJDO0FBQzlDLFNBQUssSUFBSUMsSUFBSSxDQUFSLEVBQVdDLElBQUlGLFFBQVFHLE1BQTVCLEVBQW9DRixJQUFJQyxDQUF4QyxFQUEyQ0QsR0FBM0MsRUFBZ0Q7QUFDNUMsWUFBSUcsU0FBU0osUUFBUUMsQ0FBUixFQUFXLENBQVgsQ0FBYjtBQUNBLFlBQUlJLFNBQVNMLFFBQVFDLENBQVIsRUFBVyxDQUFYLENBQWI7QUFDQSxZQUFJSSxNQUFKLEVBQVk7QUFDUk4scUJBQVNLLE1BQVQsRUFBaUJFLEtBQWpCLENBQXVCUCxRQUF2QixFQUFpQ00sTUFBakM7QUFDSCxTQUZELE1BRU87QUFDSE4scUJBQVNLLE1BQVQsRUFBaUJHLElBQWpCLENBQXNCUixRQUF0QjtBQUNIO0FBQ0o7QUFDSiIsImZpbGUiOiJsaWIvdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcHJvY2Vzc09wY29kZXMoY29tcGlsZXIsIG9wY29kZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IG9wY29kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGxldCBtZXRob2QgPSBvcGNvZGVzW2ldWzBdO1xuICAgICAgICBsZXQgcGFyYW1zID0gb3Bjb2Rlc1tpXVsxXTtcbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgY29tcGlsZXJbbWV0aG9kXS5hcHBseShjb21waWxlciwgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBpbGVyW21ldGhvZF0uY2FsbChjb21waWxlcik7XG4gICAgICAgIH1cbiAgICB9XG59Il19

@@ -26,2 +26,2 @@ "use strict";

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztxQkFDRSxBQUFVLEFBQ1gsQUFBTSxBQUFnQixBQUFDLEFBRXhCLEFBQTBCLEFBQzFCLEFBQU87Ozs7Ozs7OztvREFBRSxBQUFPLEFBQUksQUFBZSxBQUFFLEFBQU0sQUFBd0IsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIHByZWNvbXBpbGUsIFByZWNvbXBpbGVPcHRpb25zXG59IGZyb20gXCIuL2xpYi9jb21waWxlclwiO1xuXG4vLyBleHBvcnRlZCBvbmx5IGZvciB0ZXN0c1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZW1wbGF0ZVZpc2l0b3IgfSBmcm9tICcuL2xpYi90ZW1wbGF0ZS12aXNpdG9yJztcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbInByZWNvbXBpbGUiLCJkZWZhdWx0IiwiVGVtcGxhdGVWaXNpdG9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztxQkFBUyxBQUFULEFBQTJCLEFBQTNCLEFBQ0EsQUFDQTs7Ozs7Ozs7O29EQUFTLEFBQVcsQUFBcEIsQUFBMkMsQUFBM0MiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBwcmVjb21waWxlIH0gZnJvbSBcIi4vbGliL2NvbXBpbGVyXCI7XG4vLyBleHBvcnRlZCBvbmx5IGZvciB0ZXN0c1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZW1wbGF0ZVZpc2l0b3IgfSBmcm9tICcuL2xpYi90ZW1wbGF0ZS12aXNpdG9yJzsiXX0=

@@ -63,2 +63,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsQUFBTyxBQUFFLEFBQVUsQUFBRSxBQUFNLEFBQWlCLEFBQUM7O0FBQzdDLEFBQU8sQUFBb0MsQUFBTSxBQUFxQixBQUFDOzs7Ozs7QUFjdkUsSUFBTSxBQUFTLHdCQUNiO1FBQUksQUFBa0IsQUFBQyxZQUN2QixBQUFNO1dBQUMsWUFDTCxBQUFFLEFBQUM7WUFBQyxDQUFDLEFBQUksQUFBQyxNQUFDLEFBQUMsQUFDVixBQUFFLEFBQUM7Z0JBQUMsT0FBTyxBQUFPLFlBQUssQUFBVSxBQUFDLFlBQUMsQUFBQyxBQUNsQztvQkFBSSxBQUFDLEFBQ0gsQUFBdUM7QUFDdkM7d0JBQU0sQUFBTSxTQUFHLEFBQU8sUUFBQyxBQUFRLEFBQUMsQUFBQyxBQUNqQyxBQUFzQztBQUN0QyxBQUFJOzJCQUFHLEFBQUcsZUFDUjs0QkFBSSxBQUFJLE9BQUcsQUFBTSxPQUFDLEFBQVUsV0FBQyxBQUFNLEFBQUMsQUFBQyxBQUNyQyxBQUFJOzZCQUFDLEFBQU0sT0FBQyxBQUFHLEtBQUUsQUFBTSxBQUFDLEFBQUMsQUFDekIsQUFBcUM7QUFDckMsQUFBTTsrQkFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQVEsQUFBQyxVQUFDLEFBQVMsVUFBQyxBQUFDLEdBQUMsQUFBQyxBQUFDLEFBQUMsQUFDOUMsQUFBQyxBQUFDO0FBQ0YsQUFBSTt5QkFBQyxBQUFNLEFBQUMsQUFBQyxBQUNmLEFBQUM7a0JBQUMsQUFBSyxBQUFDLE9BQUMsQUFBQyxBQUFDLEdBQUMsQUFBQyxBQUNYLEFBQUk7dUNBQUc7K0JBQU0sQUFBSSxBQUFDLEFBQ3BCO0FBQUMsQUFDSDtBQUFDLEFBQ0g7QUFBQztBQUNELEFBQU07ZUFBQyxBQUFJLEFBQUMsQUFDZCxBQUFDLEFBQUMsQUFDSjtBQUFDLEFBQUMsQUFBRSxBQUFDO0FBdkJpQyxBQXdDdEMsQUFBTSxDQXhDaUM7b0JBd0NaLEFBQWMsUUFBRSxBQUF5QyxTQUNsRjtRQUFJLEFBQUksT0FBRyxBQUFPO1lBQ1osQUFBUyxBQUFFLEFBQ2YsQUFBSTtjQUZnQixBQUVkLEFBQUUsQUFDaUMsQUFBQyxBQUM1QztBQUhFLEFBQUU7UUFHQSxBQUFHLE1BQUcsQUFBVSx3QkFBQyxBQUFNLFFBQUUsQUFBSSxBQUFDLEFBQUMsQUFDbkMsQUFBSTs7Z0NBQWtCLEFBQWdCLDJCQUFDLEFBQU8sUUFBQyxBQUFJLE1BQUUsQUFBRyxBQUFDLEFBQUM7UUFBcEQsQUFBSztRQUFFLEFBQUksQUFBRSw2QkFDbkI7O1FBQUksQUFBSSxPQUFHLEFBQUksS0FBQyxBQUFFLE1BQUksQUFBUyxBQUFFLEFBQUMsQUFDbEM7UUFBSSxBQUFTLFlBQUcsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFLLE1BQUMsQUFBTSxBQUFFLEFBQUMsQUFBQyxBQUMvQztRQUFJLEFBQWtCO1lBQ2hCLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUksQUFBQyxRQUFHLEFBQVMsQUFBQyxBQUMxQyxBQUFLO2VBQUUsQUFBUyxBQUNoQixBQUFJLEFBQ0wsQUFBQztjQUpzRSxBQU14RSxBQUFxQjtBQUxuQixBQUFFO0FBTUosQUFBTTtXQUFDLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBa0IsQUFBQyxBQUFDLEFBQzVDLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcmVwcm9jZXNzIH0gZnJvbSBcIkBnbGltbWVyL3N5bnRheFwiO1xuaW1wb3J0IFRlbXBsYXRlQ29tcGlsZXIsIHsgQ29tcGlsZU9wdGlvbnMgfSBmcm9tIFwiLi90ZW1wbGF0ZS1jb21waWxlclwiO1xuaW1wb3J0IHsgU2VyaWFsaXplZFRlbXBsYXRlV2l0aExhenlCbG9jaywgVGVtcGxhdGVKYXZhc2NyaXB0LCBUZW1wbGF0ZU1ldGEgfSBmcm9tIFwiQGdsaW1tZXIvd2lyZS1mb3JtYXRcIjtcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gXCJAZ2xpbW1lci9pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVJZEZuIHtcbiAgKHNyYzogc3RyaW5nKTogT3B0aW9uPHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlY29tcGlsZU9wdGlvbnM8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4gZXh0ZW5kcyBDb21waWxlT3B0aW9uczxUPiB7XG4gIGlkPzogVGVtcGxhdGVJZEZuO1xufVxuXG5kZWNsYXJlIGZ1bmN0aW9uIHJlcXVpcmUoaWQ6IHN0cmluZyk6IGFueTtcblxuY29uc3QgZGVmYXVsdElkOiAoKSA9PiBUZW1wbGF0ZUlkRm4gPSAoKCkgPT4ge1xuICBsZXQgaWRGbjogVGVtcGxhdGVJZEZuO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmICghaWRGbikge1xuICAgICAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLyogdHNsaW50OmRpc2FibGU6bm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICAgICAgY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgICAgICAgLyogdHNsaW50OmVuYWJsZTpuby1yZXF1aXJlLWltcG9ydHMgKi9cbiAgICAgICAgICBpZEZuID0gc3JjID0+IHtcbiAgICAgICAgICAgIGxldCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKTtcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKHNyYywgJ3V0ZjgnKTtcbiAgICAgICAgICAgIC8vIHRyaW0gdG8gNiBieXRlcyBvZiBkYXRhICgyXjQ4IC0gMSlcbiAgICAgICAgICAgIHJldHVybiBoYXNoLmRpZ2VzdCgnYmFzZTY0Jykuc3Vic3RyaW5nKDAsOCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZEZuKFwidGVzdFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlkRm4gPSAoKSA9PiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZEZuO1xuICB9O1xufSkoKTtcblxuLypcbiAqIENvbXBpbGUgYSBzdHJpbmcgaW50byBhIHRlbXBsYXRlIGphdmFzY3JpcHQgc3RyaW5nLlxuICpcbiAqIEV4YW1wbGUgdXNhZ2U6XG4gKiAgICAgaW1wb3J0IHsgcHJlY29tcGlsZSB9IGZyb20gJ0BnbGltbWVyL2NvbXBpbGVyJztcbiAqICAgICBpbXBvcnQgeyB0ZW1wbGF0ZUZhY3RvcnkgfSBmcm9tICdnbGltZXItcnVudGltZSc7XG4gKiAgICAgbGV0IHRlbXBsYXRlSnMgPSBwcmVjb21waWxlKFwiSG93ZHkge3tuYW1lfX1cIik7XG4gKiAgICAgbGV0IGZhY3RvcnkgPSB0ZW1wbGF0ZUZhY3RvcnkobmV3IEZ1bmN0aW9uKFwicmV0dXJuIFwiICsgdGVtcGxhdGVKcykoKSk7XG4gKiAgICAgbGV0IHRlbXBsYXRlID0gZmFjdG9yeS5jcmVhdGUoZW52KTtcbiAqXG4gKiBAbWV0aG9kIHByZWNvbXBpbGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgYSBHbGltbWVyIHRlbXBsYXRlIHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfSBhIHRlbXBsYXRlIGphdmFzY3JpcHQgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KHN0cmluZzogc3RyaW5nLCBvcHRpb25zPzogUHJlY29tcGlsZU9wdGlvbnM8VD4pOiBUZW1wbGF0ZUphdmFzY3JpcHQ7XG5leHBvcnQgZnVuY3Rpb24gcHJlY29tcGlsZShzdHJpbmc6IHN0cmluZywgb3B0aW9ucz86IFByZWNvbXBpbGVPcHRpb25zPFRlbXBsYXRlTWV0YT4pOiBUZW1wbGF0ZUphdmFzY3JpcHQge1xuICBsZXQgb3B0cyA9IG9wdGlvbnMgfHwge1xuICAgIGlkOiBkZWZhdWx0SWQoKSxcbiAgICBtZXRhOiB7fVxuICB9IGFzIGFueSBhcyBQcmVjb21waWxlT3B0aW9uczxUZW1wbGF0ZU1ldGE+O1xuICBsZXQgYXN0ID0gcHJlcHJvY2VzcyhzdHJpbmcsIG9wdHMpO1xuICBsZXQgeyBibG9jaywgbWV0YSB9ID0gVGVtcGxhdGVDb21waWxlci5jb21waWxlKG9wdHMsIGFzdCk7XG4gIGxldCBpZEZuID0gb3B0cy5pZCB8fCBkZWZhdWx0SWQoKTtcbiAgbGV0IGJsb2NrSlNPTiA9IEpTT04uc3RyaW5naWZ5KGJsb2NrLnRvSlNPTigpKTtcbiAgbGV0IHRlbXBsYXRlSlNPTk9iamVjdDogU2VyaWFsaXplZFRlbXBsYXRlV2l0aExhenlCbG9jazxUZW1wbGF0ZU1ldGE+ID0ge1xuICAgIGlkOiBpZEZuKEpTT04uc3RyaW5naWZ5KG1ldGEpICsgYmxvY2tKU09OKSxcbiAgICBibG9jazogYmxvY2tKU09OLFxuICAgIG1ldGFcbiAgfTtcblxuICAvLyBKU09OIGlzIGphdmFzY3JpcHRcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlSlNPTk9iamVjdCk7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21waWxlci5qcyJdLCJuYW1lcyI6WyJwcmVwcm9jZXNzIiwiVGVtcGxhdGVDb21waWxlciIsImRlZmF1bHRJZCIsImlkRm4iLCJyZXF1aXJlIiwiY3J5cHRvIiwiaGFzaCIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJzcmMiLCJkaWdlc3QiLCJzdWJzdHJpbmciLCJlIiwicHJlY29tcGlsZSIsInN0cmluZyIsIm9wdGlvbnMiLCJvcHRzIiwiaWQiLCJtZXRhIiwiYXN0IiwiY29tcGlsZSIsImJsb2NrIiwiYmxvY2tKU09OIiwiSlNPTiIsInN0cmluZ2lmeSIsInRvSlNPTiIsInRlbXBsYXRlSlNPTk9iamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7UUEwQk8sQUFBUzs7QUExQmhCLEFBQVMsQUFBa0I7O0FBQzNCLEFBQU8sQUFBc0I7Ozs7OztBQUM3QixJQUFNLHdCQUFtQixBQUNyQjtRQUFJLFlBQUosQUFDQTtXQUFPLFlBQU0sQUFDVDtZQUFJLENBQUosQUFBSyxNQUFNLEFBQ1A7Z0JBQUksT0FBQSxBQUFPLFlBQVgsQUFBdUIsWUFBWSxBQUMvQjtvQkFBSSxBQUNBO0FBQ0E7d0JBQU0sU0FBUyxRQUFmLEFBQWUsQUFBUSxBQUN2QjtBQUNBOzJCQUFPLGVBQU8sQUFDVjs0QkFBSSxPQUFPLE9BQUEsQUFBTyxXQUFsQixBQUFXLEFBQWtCLEFBQzdCOzZCQUFBLEFBQUssT0FBTCxBQUFZLEtBQVosQUFBaUIsQUFDakI7QUFDQTsrQkFBTyxLQUFBLEFBQUssT0FBTCxBQUFZLFVBQVosQUFBc0IsVUFBdEIsQUFBZ0MsR0FBdkMsQUFBTyxBQUFtQyxBQUM3QztBQUxELEFBTUE7eUJBQUEsQUFBSyxBQUNSO0FBWEQsa0JBV0UsT0FBQSxBQUFPLEdBQUcsQUFDUjsyQkFBTyxZQUFBOytCQUFBLEFBQU07QUFBYixBQUNIO0FBQ0o7QUFDSjtBQUNEO2VBQUEsQUFBTyxBQUNWO0FBcEJELEFBcUJIO0FBdkJELEFBQWtCLEFBd0JsQixDQXhCbUI7QUF3Qlosb0JBQUEsQUFBb0IsUUFBcEIsQUFBNEIsU0FBUyxBQUN4QztRQUFJLE9BQU87WUFBVyxBQUNkLEFBQ0o7Y0FGSixBQUFzQixBQUVaLEFBRVY7QUFKc0IsQUFDbEI7UUFHQSxNQUFNLHdCQUFBLEFBQVcsUUFMbUIsQUFLeEMsQUFBVSxBQUFtQjs7Z0NBQ1AsMkJBQUEsQUFBaUIsUUFBakIsQUFBeUIsTUFOUCxBQU1sQixBQUErQjtRQU5iLEFBTWxDLDhCQU5rQyxBQU1sQztRQU5rQyxBQU0zQiw2QkFOMkIsQUFNM0IsQUFDYjs7UUFBSSxPQUFPLEtBQUEsQUFBSyxNQUFoQixBQUFzQixBQUN0QjtRQUFJLFlBQVksS0FBQSxBQUFLLFVBQVUsTUFBL0IsQUFBZ0IsQUFBZSxBQUFNLEFBQ3JDO1FBQUk7WUFDSSxLQUFLLEtBQUEsQUFBSyxVQUFMLEFBQWUsUUFESCxBQUNqQixBQUE0QixBQUNoQztlQUZxQixBQUVkLEFBQ1A7Y0FISixBQUF5QixBQUt6QjtBQUx5QixBQUNyQjtBQUtKO1dBQU8sS0FBQSxBQUFLLFVBQVosQUFBTyxBQUFlLEFBQ3pCIiwiZmlsZSI6ImxpYi9jb21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByZXByb2Nlc3MgfSBmcm9tIFwiQGdsaW1tZXIvc3ludGF4XCI7XG5pbXBvcnQgVGVtcGxhdGVDb21waWxlciBmcm9tIFwiLi90ZW1wbGF0ZS1jb21waWxlclwiO1xuY29uc3QgZGVmYXVsdElkID0gKCgpID0+IHtcbiAgICBsZXQgaWRGbjtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoIWlkRm4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLXJlcXVpcmUtaW1wb3J0cyAqL1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbiAgICAgICAgICAgICAgICAgICAgLyogdHNsaW50OmVuYWJsZTpuby1yZXF1aXJlLWltcG9ydHMgKi9cbiAgICAgICAgICAgICAgICAgICAgaWRGbiA9IHNyYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZShzcmMsICd1dGY4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmltIHRvIDYgYnl0ZXMgb2YgZGF0YSAoMl40OCAtIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzaC5kaWdlc3QoJ2Jhc2U2NCcpLnN1YnN0cmluZygwLCA4KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWRGbihcInRlc3RcIik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZEZuID0gKCkgPT4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkRm47XG4gICAgfTtcbn0pKCk7XG5leHBvcnQgZnVuY3Rpb24gcHJlY29tcGlsZShzdHJpbmcsIG9wdGlvbnMpIHtcbiAgICBsZXQgb3B0cyA9IG9wdGlvbnMgfHwge1xuICAgICAgICBpZDogZGVmYXVsdElkKCksXG4gICAgICAgIG1ldGE6IHt9XG4gICAgfTtcbiAgICBsZXQgYXN0ID0gcHJlcHJvY2VzcyhzdHJpbmcsIG9wdHMpO1xuICAgIGxldCB7IGJsb2NrLCBtZXRhIH0gPSBUZW1wbGF0ZUNvbXBpbGVyLmNvbXBpbGUob3B0cywgYXN0KTtcbiAgICBsZXQgaWRGbiA9IG9wdHMuaWQgfHwgZGVmYXVsdElkKCk7XG4gICAgbGV0IGJsb2NrSlNPTiA9IEpTT04uc3RyaW5naWZ5KGJsb2NrLnRvSlNPTigpKTtcbiAgICBsZXQgdGVtcGxhdGVKU09OT2JqZWN0ID0ge1xuICAgICAgICBpZDogaWRGbihKU09OLnN0cmluZ2lmeShtZXRhKSArIGJsb2NrSlNPTiksXG4gICAgICAgIGJsb2NrOiBibG9ja0pTT04sXG4gICAgICAgIG1ldGFcbiAgICB9O1xuICAgIC8vIEpTT04gaXMgamF2YXNjcmlwdFxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZUpTT05PYmplY3QpO1xufSJdfQ==

@@ -281,2 +281,4 @@ "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]]);

@@ -404,2 +406,3 @@ };

var component = this.blocks.pop();
(0, _util.assert)(component instanceof ComponentBlock, "Compiler bug: endComponent() should end a component");
return component.toJSON();

@@ -417,2 +420,3 @@ };

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);

@@ -441,2 +445,3 @@ 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();

@@ -456,2 +461,2 @@ };

exports.default = JavaScriptCompiler;
//# 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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLmpzIl0sIm5hbWVzIjpbImFzc2VydCIsIlN0YWNrIiwiRGljdFNldCIsIlN0YXRlbWVudHMiLCJPcHMiLCJCbG9jayIsInN0YXRlbWVudHMiLCJwdXNoIiwic3RhdGVtZW50IiwiSW5saW5lQmxvY2siLCJ0YWJsZSIsInRvSlNPTiIsInBhcmFtZXRlcnMiLCJzbG90cyIsIlRlbXBsYXRlQmxvY2siLCJzeW1ib2xUYWJsZSIsInR5cGUiLCJ5aWVsZHMiLCJuYW1lZCIsInByZWx1ZGUiLCJoZWFkIiwiYmxvY2tzIiwiaGFzRXZhbCIsInNhd0VsZW1lbnQiLCJpblBhcmFtcyIsImlzT3BlbkVsZW1lbnQiLCJpc0ZsdXNoRWxlbWVudCIsImlzSW5FbGVtZW50SGVhZCIsIkVycm9yIiwic3ltYm9scyIsIkNvbXBvbmVudEJsb2NrIiwiYXR0cmlidXRlcyIsImFyZ3VtZW50cyIsInBvc2l0aW9uYWxzIiwiaXNBcmd1bWVudCIsImlzQXR0cmlidXRlIiwiaXNNb2RpZmllciIsImFyZ3MiLCJrZXlzIiwibWFwIiwiYXJnIiwidmFsdWVzIiwiVGVtcGxhdGUiLCJtZXRhIiwiYmxvY2siLCJKYXZhU2NyaXB0Q29tcGlsZXIiLCJvcGNvZGVzIiwidGVtcGxhdGUiLCJwcm9jZXNzIiwiY29tcGlsZXIiLCJmb3JFYWNoIiwib3Bjb2RlIiwic3RhcnRCbG9jayIsInByb2dyYW0iLCJlbmRCbG9jayIsInBvcCIsInN0YXJ0UHJvZ3JhbSIsImVuZFByb2dyYW0iLCJ0ZXh0IiwiY29udGVudCIsIlRleHQiLCJhcHBlbmQiLCJ0cnVzdGVkIiwiQXBwZW5kIiwicG9wVmFsdWUiLCJjb21tZW50IiwidmFsdWUiLCJDb21tZW50IiwibW9kaWZpZXIiLCJuYW1lIiwicGFyYW1zIiwiaGFzaCIsIk1vZGlmaWVyIiwiaW52ZXJzZSIsIm9wZW5FbGVtZW50IiwiZWxlbWVudCIsInRhZyIsImluZGV4T2YiLCJzdGFydENvbXBvbmVudCIsImJsb2NrUGFyYW1zIiwibGVuZ3RoIiwiT3BlbkVsZW1lbnQiLCJmbHVzaEVsZW1lbnQiLCJGbHVzaEVsZW1lbnQiLCJjbG9zZUVsZW1lbnQiLCJlbmRDb21wb25lbnQiLCJhdHRycyIsIkNvbXBvbmVudCIsIkNsb3NlRWxlbWVudCIsInN0YXRpY0F0dHIiLCJuYW1lc3BhY2UiLCJTdGF0aWNBdHRyIiwiZHluYW1pY0F0dHIiLCJEeW5hbWljQXR0ciIsInRydXN0aW5nQXR0ciIsIlRydXN0aW5nQXR0ciIsInN0YXRpY0FyZyIsIlN0YXRpY0FyZyIsImR5bmFtaWNBcmciLCJEeW5hbWljQXJnIiwieWllbGQiLCJ0byIsIllpZWxkIiwiZGVidWdnZXIiLCJldmFsSW5mbyIsIkRlYnVnZ2VyIiwiaGFzQmxvY2siLCJwdXNoVmFsdWUiLCJIYXNCbG9jayIsImhhc0Jsb2NrUGFyYW1zIiwiSGFzQmxvY2tQYXJhbXMiLCJwYXJ0aWFsIiwiUGFydGlhbCIsImxpdGVyYWwiLCJ1bmRlZmluZWQiLCJVbmRlZmluZWQiLCJ1bmtub3duIiwiVW5rbm93biIsImdldCIsInBhdGgiLCJHZXQiLCJtYXliZUxvY2FsIiwiTWF5YmVMb2NhbCIsImNvbmNhdCIsIkNvbmNhdCIsImhlbHBlciIsIkhlbHBlciIsImNvbXBvbmVudCIsInByZXBhcmVBcnJheSIsInNpemUiLCJpIiwicHJlcGFyZU9iamVjdCIsIkFycmF5IiwiY3VycmVudEJsb2NrIiwidmFsIiwiY3VycmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLEFBQVMsQUFBYyxBQUN2QixBQUFTLEFBQU8sQUFBdUI7O0FBQ3ZDLEFBQVMsQUFBWSxBQUFXLEFBQ2hDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUFBLEFBQWEsb0NBQ1Q7cUJBQWM7OEJBQ1Y7O2FBQUEsQUFBSyxhQUFMLEFBQWtCLEFBQ3JCO0FBSEw7O29CQUFBLEFBSUkscUJBSkosQUFJUyxXQUFXLEFBQ1o7YUFBQSxBQUFLLFdBQUwsQUFBZ0IsS0FBaEIsQUFBcUIsQUFDeEI7QUFO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QUFLLEEsTUFBTSxBQUNQO2VBQU8sS0FBSyxLQUFBLEFBQUssU0FBVixBQUFtQixPQUExQixBQUFpQyxNQUFNLEFBQ25DO2lCQUFBLEFBQUssQUFDUjtBQUNEO2FBQUEsQUFBSyxhQUFMLEFBQWtCLEtBQWxCLEFBQXVCLEFBQzFCO0E7O2lDQUNELEEsK0JBQVUsQSxLQUFLLEFBQ1g7YUFBQSxBQUFLLE9BQUwsQUFBWSxLQUFaLEFBQWlCLEFBQ3BCO0E7O2lDQUNELEEsK0JBQVcsQUFDUDswQkFBTyxLQUFBLEFBQUssT0FBWixBQUFtQixRQUFuQixBQUEyQixBQUMzQjtlQUFPLEtBQUEsQUFBSyxPQUFaLEFBQU8sQUFBWSxBQUN0QjtBOzs7O3lCQS9La0IsQUFDZjttQkFBYyxLQUFBLEFBQUssT0FBbkIsQUFBMEIsQUFDN0I7Ozs7Ozs7a0JBYmdCLEEiLCJmaWxlIjoibGliL2phdmFzY3JpcHQtY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgU3RhY2ssIERpY3RTZXQsIGV4cGVjdCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBTdGF0ZW1lbnRzLCBPcHMgfSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5leHBvcnQgY2xhc3MgQmxvY2sge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMgPSBbXTtcbiAgICB9XG4gICAgcHVzaChzdGF0ZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgSW5saW5lQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gICAgY29uc3RydWN0b3IodGFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50YWJsZSA9IHRhYmxlO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGlzLnRhYmxlLnNsb3RzXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gICAgY29uc3RydWN0b3Ioc3ltYm9sVGFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zeW1ib2xUYWJsZSA9IHN5bWJvbFRhYmxlO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInRlbXBsYXRlXCI7XG4gICAgICAgIHRoaXMueWllbGRzID0gbmV3IERpY3RTZXQoKTtcbiAgICAgICAgdGhpcy5uYW1lZCA9IG5ldyBEaWN0U2V0KCk7XG4gICAgICAgIHRoaXMucHJlbHVkZSA9IFtdO1xuICAgICAgICB0aGlzLmhlYWQgPSBbXTtcbiAgICAgICAgdGhpcy5ibG9ja3MgPSBbXTtcbiAgICAgICAgdGhpcy5oYXNFdmFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F3RWxlbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluUGFyYW1zID0gZmFsc2U7XG4gICAgfVxuICAgIHB1c2goc3RhdGVtZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5zYXdFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoU3RhdGVtZW50cy5pc09wZW5FbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhd0VsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5QYXJhbXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcmVsdWRlLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZC5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNJbkVsZW1lbnRIZWFkKHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWQucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IG9ubHkgcGFyYW1ldGVycyBhbGxvd2VkIGJlZm9yZSBmbHVzaC1lbGVtZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgICAgICAgIHByZWx1ZGU6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMucHJlbHVkZSA6IG51bGwsXG4gICAgICAgICAgICBoZWFkOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLmhlYWQgOiBudWxsLFxuICAgICAgICAgICAgc3RhdGVtZW50czogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5zdGF0ZW1lbnRzIDogdGhpcy5wcmVsdWRlLFxuICAgICAgICAgICAgaGFzRXZhbDogdGhpcy5oYXNFdmFsXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICAgIGNvbnN0cnVjdG9yKHRhYmxlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgIHRoaXMuYXJndW1lbnRzID0gW107XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSB0cnVlO1xuICAgICAgICB0aGlzLnBvc2l0aW9uYWxzID0gW107XG4gICAgfVxuICAgIHB1c2goc3RhdGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChTdGF0ZW1lbnRzLmlzQXJndW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXJndW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0F0dHJpYnV0ZShzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IEVsZW1lbnQgbW9kaWZpZXJzIGFyZSBub3QgYWxsb3dlZCBpbiBjb21wb25lbnRzJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogb25seSBwYXJhbWV0ZXJzIGFsbG93ZWQgYmVmb3JlIGZsdXNoLWVsZW1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgYXJncyA9IHRoaXMuYXJndW1lbnRzO1xuICAgICAgICBsZXQga2V5cyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMV0pO1xuICAgICAgICBsZXQgdmFsdWVzID0gYXJncy5tYXAoYXJnID0+IGFyZ1syXSk7XG4gICAgICAgIHJldHVybiBbdGhpcy5hdHRyaWJ1dGVzLCBba2V5cywgdmFsdWVzXSwge1xuICAgICAgICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgICB9XTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVGVtcGxhdGUge1xuICAgIGNvbnN0cnVjdG9yKHN5bWJvbHMsIG1ldGEpIHtcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcbiAgICAgICAgdGhpcy5ibG9jayA9IG5ldyBUZW1wbGF0ZUJsb2NrKHN5bWJvbHMpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBibG9jazogdGhpcy5ibG9jay50b0pTT04oKSxcbiAgICAgICAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphdmFTY3JpcHRDb21waWxlciB7XG4gICAgY29uc3RydWN0b3Iob3Bjb2Rlcywgc3ltYm9scywgbWV0YSkge1xuICAgICAgICB0aGlzLmJsb2NrcyA9IG5ldyBTdGFjaygpO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLm9wY29kZXMgPSBvcGNvZGVzO1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKHN5bWJvbHMsIG1ldGEpO1xuICAgIH1cbiAgICBzdGF0aWMgcHJvY2VzcyhvcGNvZGVzLCBzeW1ib2xzLCBtZXRhKSB7XG4gICAgICAgIGxldCBjb21waWxlciA9IG5ldyBKYXZhU2NyaXB0Q29tcGlsZXIob3Bjb2Rlcywgc3ltYm9scywgbWV0YSk7XG4gICAgICAgIHJldHVybiBjb21waWxlci5wcm9jZXNzKCk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50QmxvY2soKSB7XG4gICAgICAgIHJldHVybiBleHBlY3QodGhpcy5ibG9ja3MuY3VycmVudCwgJ0V4cGVjdGVkIGEgYmxvY2sgb24gdGhlIHN0YWNrJyk7XG4gICAgfVxuICAgIHByb2Nlc3MoKSB7XG4gICAgICAgIHRoaXMub3Bjb2Rlcy5mb3JFYWNoKChbb3Bjb2RlLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzW29wY29kZV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpc1tvcGNvZGVdKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGU7XG4gICAgfVxuICAgIC8vLyBOZXN0aW5nXG4gICAgc3RhcnRCbG9jayhbcHJvZ3JhbV0pIHtcbiAgICAgICAgbGV0IGJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgICAgIHRoaXMuYmxvY2tzLnB1c2goYmxvY2spO1xuICAgIH1cbiAgICBlbmRCbG9jaygpIHtcbiAgICAgICAgbGV0IHsgdGVtcGxhdGUsIGJsb2NrcyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGJsb2NrID0gYmxvY2tzLnBvcCgpO1xuICAgICAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gICAgfVxuICAgIHN0YXJ0UHJvZ3JhbSgpIHtcbiAgICAgICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgICB9XG4gICAgZW5kUHJvZ3JhbSgpIHt9XG4gICAgLy8vIFN0YXRlbWVudHNcbiAgICB0ZXh0KGNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuVGV4dCwgY29udGVudF0pO1xuICAgIH1cbiAgICBhcHBlbmQodHJ1c3RlZCkge1xuICAgICAgICB0aGlzLnB1c2goW09wcy5BcHBlbmQsIHRoaXMucG9wVmFsdWUoKSwgdHJ1c3RlZF0pO1xuICAgIH1cbiAgICBjb21tZW50KHZhbHVlKSB7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLkNvbW1lbnQsIHZhbHVlXSk7XG4gICAgfVxuICAgIG1vZGlmaWVyKG5hbWUpIHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLk1vZGlmaWVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgICB9XG4gICAgYmxvY2sobmFtZSwgdGVtcGxhdGUsIGludmVyc2UpIHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIGxldCBibG9ja3MgPSB0aGlzLnRlbXBsYXRlLmJsb2NrLmJsb2NrcztcbiAgICAgICAgYXNzZXJ0KHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW3RlbXBsYXRlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG4gICAgICAgIGFzc2VydCh0eXBlb2YgaW52ZXJzZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW2ludmVyc2VdICE9PSBudWxsLCAnbWlzc2luZyBibG9jayBpbiB0aGUgY29tcGlsZXInKTtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuQmxvY2ssIG5hbWUsIHBhcmFtcywgaGFzaCwgYmxvY2tzW3RlbXBsYXRlXSwgYmxvY2tzW2ludmVyc2VdXSk7XG4gICAgfVxuICAgIG9wZW5FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgbGV0IHRhZyA9IGVsZW1lbnQudGFnO1xuICAgICAgICBpZiAodGFnLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDb21wb25lbnQoZWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ibG9ja1BhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IDwke2VsZW1lbnQudGFnfT4gaXMgbm90IGEgY29tcG9uZW50IGFuZCBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgcGFyYW1ldGVyc2ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlbkVsZW1lbnQsIHRhZ10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZsdXNoRWxlbWVudCgpIHtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuRmx1c2hFbGVtZW50XSk7XG4gICAgfVxuICAgIGNsb3NlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcbiAgICAgICAgaWYgKHRhZy5pbmRleE9mKCctJykgIT09IC0xKSB7XG4gICAgICAgICAgICBsZXQgW2F0dHJzLCBhcmdzLCBibG9ja10gPSB0aGlzLmVuZENvbXBvbmVudCgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoKFtPcHMuQ29tcG9uZW50LCB0YWcsIGF0dHJzLCBhcmdzLCBibG9ja10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wdXNoKFtPcHMuQ2xvc2VFbGVtZW50XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljQXR0cihuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gICAgfVxuICAgIGR5bmFtaWNBdHRyKG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gICAgfVxuICAgIHRydXN0aW5nQXR0cihuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2goW09wcy5UcnVzdGluZ0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgICB9XG4gICAgc3RhdGljQXJnKG5hbWUpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gICAgfVxuICAgIGR5bmFtaWNBcmcobmFtZSkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gICAgfVxuICAgIHlpZWxkKHRvKSB7XG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLllpZWxkLCB0bywgcGFyYW1zXSk7XG4gICAgfVxuICAgIGRlYnVnZ2VyKGV2YWxJbmZvKSB7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLkRlYnVnZ2VyLCBldmFsSW5mb10pO1xuICAgICAgICB0aGlzLnRlbXBsYXRlLmJsb2NrLmhhc0V2YWwgPSB0cnVlO1xuICAgIH1cbiAgICBoYXNCbG9jayhuYW1lKSB7XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKFtPcHMuSGFzQmxvY2ssIG5hbWVdKTtcbiAgICB9XG4gICAgaGFzQmxvY2tQYXJhbXMobmFtZSkge1xuICAgICAgICB0aGlzLnB1c2hWYWx1ZShbT3BzLkhhc0Jsb2NrUGFyYW1zLCBuYW1lXSk7XG4gICAgfVxuICAgIHBhcnRpYWwoZXZhbEluZm8pIHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuUGFydGlhbCwgcGFyYW1zWzBdLCBldmFsSW5mb10pO1xuICAgICAgICB0aGlzLnRlbXBsYXRlLmJsb2NrLmhhc0V2YWwgPSB0cnVlO1xuICAgIH1cbiAgICAvLy8gRXhwcmVzc2lvbnNcbiAgICBsaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnB1c2hWYWx1ZShbT3BzLlVuZGVmaW5lZF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wdXNoVmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVua25vd24obmFtZSkge1xuICAgICAgICB0aGlzLnB1c2hWYWx1ZShbT3BzLlVua25vd24sIG5hbWVdKTtcbiAgICB9XG4gICAgZ2V0KGhlYWQsIHBhdGgpIHtcbiAgICAgICAgdGhpcy5wdXNoVmFsdWUoW09wcy5HZXQsIGhlYWQsIHBhdGhdKTtcbiAgICB9XG4gICAgbWF5YmVMb2NhbChwYXRoKSB7XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKFtPcHMuTWF5YmVMb2NhbCwgcGF0aF0pO1xuICAgIH1cbiAgICBjb25jYXQoKSB7XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKFtPcHMuQ29uY2F0LCB0aGlzLnBvcFZhbHVlKCldKTtcbiAgICB9XG4gICAgaGVscGVyKG5hbWUpIHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgICB9XG4gICAgLy8vIFN0YWNrIE1hbmFnZW1lbnQgT3Bjb2Rlc1xuICAgIHN0YXJ0Q29tcG9uZW50KGVsZW1lbnQpIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRCbG9jayhlbGVtZW50WydzeW1ib2xzJ10pO1xuICAgICAgICB0aGlzLmJsb2Nrcy5wdXNoKGNvbXBvbmVudCk7XG4gICAgfVxuICAgIGVuZENvbXBvbmVudCgpIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgICAgICBhc3NlcnQoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50QmxvY2ssIFwiQ29tcGlsZXIgYnVnOiBlbmRDb21wb25lbnQoKSBzaG91bGQgZW5kIGEgY29tcG9uZW50XCIpO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50LnRvSlNPTigpO1xuICAgIH1cbiAgICBwcmVwYXJlQXJyYXkoc2l6ZSkge1xuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKHZhbHVlcyk7XG4gICAgfVxuICAgIHByZXBhcmVPYmplY3Qoc2l6ZSkge1xuICAgICAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoID49IHNpemUsIGBFeHBlY3RlZCAke3NpemV9IHZhbHVlcyBvbiB0aGUgc3RhY2ssIGZvdW5kICR7dGhpcy52YWx1ZXMubGVuZ3RofWApO1xuICAgICAgICBsZXQga2V5cyA9IG5ldyBBcnJheShzaXplKTtcbiAgICAgICAgbGV0IHZhbHVlcyA9IG5ldyBBcnJheShzaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgICAgIGtleXNbaV0gPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgICAgICB2YWx1ZXNbaV0gPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdXNoVmFsdWUoW2tleXMsIHZhbHVlc10pO1xuICAgIH1cbiAgICAvLy8gVXRpbGl0aWVzXG4gICAgcHVzaChhcmdzKSB7XG4gICAgICAgIHdoaWxlIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGFyZ3MucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50QmxvY2sucHVzaChhcmdzKTtcbiAgICB9XG4gICAgcHVzaFZhbHVlKHZhbCkge1xuICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbCk7XG4gICAgfVxuICAgIHBvcFZhbHVlKCkge1xuICAgICAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoLCBcIk5vIGV4cHJlc3Npb24gZm91bmQgb24gc3RhY2tcIik7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5wb3AoKTtcbiAgICB9XG59Il19

@@ -357,2 +357,3 @@ "use strict";

var param = params[i];
(0, _util.assert)(this[param.type], "Unimplemented " + param.type + " on TemplateCompiler");
this[param.type](param);

@@ -374,2 +375,3 @@ }

(0, _util.assert)(this[value.type], "Unimplemented " + value.type + " on TemplateCompiler");
this[value.type](value);

@@ -542,2 +544,2 @@ this.opcode('literal', null, key);

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxBQUFPLEFBQXdDLEFBQU0sQUFBb0IsQUFBQzs7OztBQUMxRSxBQUFPLEFBQWdDLEFBQU0sQUFBdUIsQUFBQzs7OztBQUNyRSxBQUFPLEFBQUUsQUFBSyxBQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBRXhELEFBQU8sQUFBTyxBQUFTLEFBQUUsQUFBTSxBQUFpQixBQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1qRCx3QkFBd0IsQUFBVSxPQUNoQyxBQUFNO1dBQUMsQUFBSyxNQUFDLEFBQU8sWUFBSyxBQUFTLGFBQUksQ0FBQyxBQUFLLE1BQUMsQUFBTyxBQUFDLEFBQ3ZELEFBQUMsQUFFRCxBQUFNLEFBQUMsQUFBTzs7O21DQWlCWjs4QkFBWSxBQUEwQjs4QkFOOUI7O2FBQVUsYUFBRyxBQUFDLEFBQUMsQUFDZjthQUFXLGNBQWEsQUFBRSxBQUFDLEFBQzNCO2FBQVcsY0FBRyxBQUFJLEFBQUssQUFBZSxBQUFDLEFBQ3ZDO2FBQU8sVUFBVSxBQUFFLEFBQUMsQUFDcEI7YUFBVyxjQUFHLEFBQUssQUFBQyxBQUcxQixBQUFJO2FBQUMsQUFBTyxVQUFHLEFBQU8sV0FBSSxBQUFFLEFBQUMsQUFDL0IsQUFsQkEsQUFBTSxBQWtCTDs7O3FCQWxCTSxBQUFPLDJCQUF5QixBQUEwQixTQUFFLEFBQWdCLEtBQ2pGO1lBQUksQUFBZSxrQkFBRyxBQUFJLEFBQWUsQUFBRSxBQUFDLEFBQzVDLEFBQWU7d0JBQUMsQUFBSyxNQUFDLEFBQUcsQUFBQyxBQUFDLEFBRTNCO1lBQUksQUFBUSxXQUFHLElBQUksQUFBZ0IsaUJBQUMsQUFBTyxBQUFDLEFBQUMsQUFDN0M7WUFBSSxBQUFPLFVBQUcsQUFBUSxTQUFDLEFBQU8sUUFBQyxBQUFlLGdCQUFDLEFBQU8sQUFBQyxBQUFD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LEdBQUMsQUFBQyxBQUN4QixBQUFNO2VBQUMsQUFBUyxBQUFDLEFBQ25CLEFBQUMsQUFBQyxBQUFJO1dBQUMsQUFBQyxBQUNOO2NBQU0sSUFBSSxBQUFLLEFBQUMsQUFBaUQsQUFBQyxBQUFDLEFBQ3JFLE1BQUMsQUFDSDtBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVmlzaXRvciwgeyBTeW1ib2xUYWJsZSwgQWN0aW9uIH0gZnJvbSBcIi4vdGVtcGxhdGUtdmlzaXRvclwiO1xuaW1wb3J0IEphdmFTY3JpcHRDb21waWxlciwgeyBUZW1wbGF0ZSB9IGZyb20gXCIuL2phdmFzY3JpcHQtY29tcGlsZXJcIjtcbmltcG9ydCB7IFN0YWNrLCBnZXRBdHRyTmFtZXNwYWNlIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gXCJAZ2xpbW1lci93aXJlLWZvcm1hdFwiO1xuaW1wb3J0IHsgQVNULCBpc0xpdGVyYWwgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgbWV0YTogVDtcbn1cblxuZnVuY3Rpb24gaXNUcnVzdGVkVmFsdWUodmFsdWU6IGFueSkge1xuICByZXR1cm4gdmFsdWUuZXNjYXBlZCAhPT0gdW5kZWZpbmVkICYmICF2YWx1ZS5lc2NhcGVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZUNvbXBpbGVyPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgc3RhdGljIGNvbXBpbGU8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4sIGFzdDogQVNULlByb2dyYW0pOiBUZW1wbGF0ZTxUPiB7XG4gICAgbGV0IHRlbXBsYXRlVmlzaXRvciA9IG5ldyBUZW1wbGF0ZVZpc2l0b3IoKTtcbiAgICB0ZW1wbGF0ZVZpc2l0b3IudmlzaXQoYXN0KTtcblxuICAgIGxldCBjb21waWxlciA9IG5ldyBUZW1wbGF0ZUNvbXBpbGVyKG9wdGlvbnMpO1xuICAgIGxldCBvcGNvZGVzID0gY29tcGlsZXIucHJvY2Vzcyh0ZW1wbGF0ZVZpc2l0b3IuYWN0aW9ucyk7XG4gICAgcmV0dXJuIEphdmFTY3JpcHRDb21waWxlci5wcm9jZXNzPFQ+KG9wY29kZXMsIGFzdFsnc3ltYm9scyddLCBvcHRpb25zLm1ldGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcHRpb25zOiBDb21waWxlT3B0aW9uczxUPjtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkID0gMDtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkczogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBzeW1ib2xTdGFjayA9IG5ldyBTdGFjazxTeW1ib2xUYWJsZT4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGluY2x1ZGVNZXRhID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB9XG5cbiAgZ2V0IHN5bWJvbHMoKTogU3ltYm9sVGFibGUge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFN0YWNrLmN1cnJlbnQ7XG4gIH1cblxuICBwcm9jZXNzKGFjdGlvbnM6IEFjdGlvbltdKTogQWN0aW9uW10ge1xuICAgIGFjdGlvbnMuZm9yRWFjaCgoW25hbWUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbbmFtZV0pIHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkICR7bmFtZX0gb24gVGVtcGxhdGVDb21waWxlcmApOyB9XG4gICAgICAodGhpc1tuYW1lXSBhcyBhbnkpKC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm9wY29kZXM7XG4gIH1cblxuICBzdGFydFByb2dyYW0ocHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydFByb2dyYW0nLCBwcm9ncmFtLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kUHJvZ3JhbScsIG51bGwpO1xuICB9XG5cbiAgc3RhcnRCbG9jayhwcm9ncmFtOiBbQVNULlByb2dyYW1dKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKHByb2dyYW1bMF1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy50ZW1wbGF0ZUlkKys7XG4gICAgdGhpcy5vcGNvZGUoJ3N0YXJ0QmxvY2snLCBwcm9ncmFtLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZEJsb2NrKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy50ZW1wbGF0ZUlkcy5wdXNoKHRoaXMudGVtcGxhdGVJZCAtIDEpO1xuICAgIHRoaXMub3Bjb2RlKCdlbmRCbG9jaycsIG51bGwpO1xuICB9XG5cbiAgdGV4dChbYWN0aW9uXTogW0FTVC5UZXh0Tm9kZV0pIHtcbiAgICB0aGlzLm9wY29kZSgndGV4dCcsIGFjdGlvbiwgYWN0aW9uLmNoYXJzKTtcbiAgfVxuXG4gIGNvbW1lbnQoW2FjdGlvbl06IFtBU1QuQ29tbWVudFN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm9wY29kZSgnY29tbWVudCcsIGFjdGlvbiwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KFthY3Rpb25dOiBbQVNULkVsZW1lbnROb2RlXSkge1xuXG4gICAgdGhpcy5vcGNvZGUoJ29wZW5FbGVtZW50JywgYWN0aW9uLCBhY3Rpb24pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlKFthY3Rpb24uYXR0cmlidXRlc1tpXV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLm1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tb2RpZmllcihbYWN0aW9uLm1vZGlmaWVyc1tpXV0pO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgnZmx1c2hFbGVtZW50JywgbnVsbCk7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKGFjdGlvblsnc3ltYm9scyddKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMub3Bjb2RlKCdjbG9zZUVsZW1lbnQnLCBudWxsLCBhY3Rpb24pO1xuICB9XG5cbiAgYXR0cmlidXRlKFthY3Rpb25dOiBbQVNULkF0dHJOb2RlXSkge1xuICAgIGxldCB7IG5hbWUsIHZhbHVlIH0gPSBhY3Rpb247XG5cbiAgICBsZXQgbmFtZXNwYWNlID0gZ2V0QXR0ck5hbWVzcGFjZShuYW1lKTtcblxuICAgIGxldCBpc1N0YXRpYyA9IHRoaXMucHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAvLyBBcmd1bWVudHNcbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaXNUcnVzdGluZyA9IGlzVHJ1c3RlZFZhbHVlKHZhbHVlKTtcblxuICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdzdGF0aWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChpc1RydXN0aW5nKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCd0cnVzdGluZ0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXR0cicsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW9kaWZpZXIoW2FjdGlvbl06IFtBU1QuRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50XSkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChhY3Rpb24ucGF0aCwgYWN0aW9uLmxvYywgJ21vZGlmaWVyJyk7XG5cbiAgICBsZXQgeyBwYXRoOiB7IHBhcnRzIH0gfSA9IGFjdGlvbjtcblxuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIHRoaXMub3Bjb2RlKCdtb2RpZmllcicsIGFjdGlvbiwgcGFydHNbMF0pO1xuICB9XG5cbiAgbXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgbGV0IHsgcGF0aCB9ID0gYWN0aW9uO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnLCBhY3Rpb24sICFhY3Rpb24uZXNjYXBlZCk7XG4gICAgfSBlbHNlIGlmIChpc1lpZWxkKHBhdGgpKSB7XG4gICAgICBsZXQgdG8gPSBhc3NlcnRWYWxpZFlpZWxkKGFjdGlvbik7XG4gICAgICB0aGlzLnlpZWxkKHRvLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNQYXJ0aWFsKHBhdGgpKSB7XG4gICAgICBsZXQgcGFyYW1zID0gYXNzZXJ0VmFsaWRQYXJ0aWFsKGFjdGlvbik7XG4gICAgICB0aGlzLnBhcnRpYWwocGFyYW1zLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNEZWJ1Z2dlcihwYXRoKSkge1xuICAgICAgYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKGFjdGlvbik7XG4gICAgICB0aGlzLmRlYnVnZ2VyKCdkZWJ1Z2dlcicsIGFjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrKFthY3Rpb24vKiwgaW5kZXgsIGNvdW50Ki9dOiBbQVNULkJsb2NrU3RhdGVtZW50XSkge1xuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIGxldCB0ZW1wbGF0ZUlkID0gdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICBsZXQgaW52ZXJzZUlkID0gYWN0aW9uLmludmVyc2UgPT09IG51bGwgPyBudWxsIDogdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnYmxvY2snLCBhY3Rpb24sIGFjdGlvbi5wYXRoLnBhcnRzWzBdLCB0ZW1wbGF0ZUlkLCBpbnZlcnNlSWQpO1xuICB9XG5cbiAgLy8vIEludGVybmFsIGFjdGlvbnMsIG5vdCBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgcHJvY2Vzc2VkIGFjdGlvbnNcblxuICBhcmcoW3BhdGhdOiBbQVNULlBhdGhFeHByZXNzaW9uXSkge1xuICAgIGxldCB7IHBhcnRzOiBbaGVhZCwgLi4ucmVzdF0gfSA9IHBhdGg7XG4gICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9scy5hbGxvY2F0ZU5hbWVkKGhlYWQpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBwYXRoLCBzeW1ib2wsIHJlc3QpO1xuICB9XG5cbiAgbXVzdGFjaGVFeHByZXNzaW9uKGV4cHI6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG5cbiAgICBpZiAoaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIGV4cHIsIHBhdGgudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaXNCdWlsdEluSGVscGVyKHBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwciBhcyBBU1QuQ2FsbCk7XG4gICAgfSBlbHNlIGlmIChpc0FyZyhwYXRoKSkge1xuICAgICAgdGhpcy5hcmcoW3BhdGhdKTtcbiAgICB9IGVsc2UgaWYgKGlzSGVscGVySW52b2NhdGlvbihleHByKSkge1xuICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2hlbHBlcicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSBpZiAocGF0aC50aGlzKSB7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc0xvY2FsKHBhdGgsIHRoaXMuc3ltYm9scykpIHtcbiAgICAgIGxldCBbaGVhZCwgLi4ucGFydHNdID0gcGF0aC5wYXJ0cztcbiAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCB0aGlzLnN5bWJvbHMuZ2V0KGhlYWQpLCBwYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc1NpbXBsZVBhdGgocGF0aCkpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCd1bmtub3duJywgZXhwciwgcGF0aC5wYXJ0c1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdtYXliZUxvY2FsJywgZXhwciwgcGF0aC5wYXJ0cyk7XG4gICAgfVxuICB9XG5cbiAgLy8vIEludGVybmFsIFN5bnRheFxuXG4gIHlpZWxkKHRvOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgIHRoaXMub3Bjb2RlKCd5aWVsZCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sodG8pKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKF9uYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5vcGNvZGUoJ2RlYnVnZ2VyJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKSk7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2snLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIGhhc0Jsb2NrUGFyYW1zKG5hbWU6IHN0cmluZywgYWN0aW9uOiBBU1QuQ2FsbCkge1xuICAgIHRoaXMub3Bjb2RlKCdoYXNCbG9ja1BhcmFtcycsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sobmFtZSkpO1xuICB9XG5cbiAgcGFydGlhbChfcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgncGFydGlhbCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgYnVpbHRJbkhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG4gICAgaWYgKGlzSGFzQmxvY2socGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrKG5hbWUsIGV4cHIpO1xuICAgIH0gZWxzZSBpZiAoaXNIYXNCbG9ja1BhcmFtcyhwYXRoKSkge1xuICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgIHRoaXMuaGFzQmxvY2tQYXJhbXMobmFtZSwgZXhwcik7XG4gICAgfVxuICB9XG5cbiAgLy8vIEV4cHJlc3Npb25zLCBpbnZva2VkIHJlY3Vyc2l2ZWx5IGZyb20gcHJlcGFyZVBhcmFtcyBhbmQgcHJlcGFyZUhhc2hcblxuICBTdWJFeHByZXNzaW9uKGV4cHI6IEFTVC5TdWJFeHByZXNzaW9uKSB7XG4gICAgaWYgKGlzQnVpbHRJbkhlbHBlcihleHByLnBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBleHByLnBhdGgucGFydHNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIFBhdGhFeHByZXNzaW9uKGV4cHI6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICAgIGlmIChleHByLmRhdGEpIHtcbiAgICAgIHRoaXMuYXJnKFtleHByXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB7IHN5bWJvbHMgfSA9IHRoaXM7XG4gICAgICBsZXQgW2hlYWRdID0gZXhwci5wYXJ0cztcblxuICAgICAgaWYgKGV4cHIudGhpcykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgZXhwci5wYXJ0cyk7XG4gICAgICB9IGVsc2UgIGlmIChzeW1ib2xzLmhhcyhoZWFkKSkge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgc3ltYm9scy5nZXQoaGVhZCksIGV4cHIucGFydHMuc2xpY2UoMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFN0cmluZ0xpdGVyYWwoYWN0aW9uOiBBU1QuU3RyaW5nTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIEJvb2xlYW5MaXRlcmFsKGFjdGlvbjogQVNULkJvb2xlYW5MaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVtYmVyTGl0ZXJhbChhY3Rpb246IEFTVC5OdW1iZXJMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVsbExpdGVyYWwoYWN0aW9uOiBBU1QuTnVsbExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBVbmRlZmluZWRMaXRlcmFsKGFjdGlvbjogQVNULlVuZGVmaW5lZExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgb3Bjb2RlKG5hbWU6IGFueSwgYWN0aW9uOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbGV0IG9wY29kZSA9IFtuYW1lLCAuLi5hcmdzXTtcbiAgICBpZiAodGhpcy5pbmNsdWRlTWV0YSAmJiBhY3Rpb24pIHtcbiAgICAgIG9wY29kZS5wdXNoKHRoaXMubWV0YShhY3Rpb24pKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMucHVzaChvcGNvZGUpO1xuICB9XG5cbiAgcHJlcGFyZUhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChleHByLnBhdGgsIGV4cHIubG9jLCAnaGVscGVyJyk7XG5cbiAgICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IGV4cHI7XG5cbiAgICB0aGlzLnByZXBhcmVIYXNoKGhhc2gpO1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgcHJlcGFyZVBhcmFtcyhwYXJhbXM6IEFTVC5FeHByZXNzaW9uW10pIHtcbiAgICBpZiAoIXBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhcmFtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcmFtID0gcGFyYW1zW2ldO1xuXG4gICAgICAodGhpc1twYXJhbS50eXBlXSBhcyBhbnkpKHBhcmFtKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZUFycmF5JywgbnVsbCwgcGFyYW1zLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlSGFzaChoYXNoOiBBU1QuSGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgICBpZiAoIXBhaXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuXG4gICAgICAodGhpc1t2YWx1ZS50eXBlXSBhcyBhbnkpKHZhbHVlKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwga2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZU9iamVjdCcsIG51bGwsIHBhaXJzLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWU6IEFTVC5BdHRyTm9kZVsndmFsdWUnXSkge1xuICAgIC8vIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBpZiB0aGUgdmFsdWUgaXMgc3RhdGljXG5cbiAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1RleHROb2RlJzpcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCB2YWx1ZSwgdmFsdWUuY2hhcnMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5wcmVwYXJlQ29uY2F0UGFydHModmFsdWUucGFydHMpO1xuICAgICAgICB0aGlzLm9wY29kZSgnY29uY2F0JywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZUNvbmNhdFBhcnRzKHBhcnRzOiBBU1QuQ29uY2F0U3RhdGVtZW50WydwYXJ0cyddKSB7XG4gICAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3BhcnRdKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgcGFydC5jaGFycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcnRzLmxlbmd0aCk7XG4gIH1cblxuICBhdHRyaWJ1dGVNdXN0YWNoZShbYWN0aW9uXTogW0FTVC5NdXN0YWNoZVN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICB9XG5cbiAgbWV0YShub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICBsZXQgbG9jID0gbm9kZS5sb2M7XG4gICAgaWYgKCFsb2MpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICBsZXQgeyBzb3VyY2UsIHN0YXJ0LCBlbmQgfSA9IGxvYztcbiAgICByZXR1cm4gWyAnbG9jJywgW3NvdXJjZSB8fCBudWxsLCBbc3RhcnQubGluZSwgc3RhcnQuY29sdW1uXSwgW2VuZC5saW5lLCBlbmQuY29sdW1uXV0gXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hlbHBlckludm9jYXRpb24obXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IG11c3RhY2hlIGlzIEFTVC5NdXN0YWNoZVN0YXRlbWVudCAmIHsgcGF0aDogQVNULlBhdGhFeHByZXNzaW9uIH0ge1xuICByZXR1cm4gKG11c3RhY2hlLnBhcmFtcyAmJiBtdXN0YWNoZS5wYXJhbXMubGVuZ3RoID4gMCkgfHxcbiAgICAobXVzdGFjaGUuaGFzaCAmJiBtdXN0YWNoZS5oYXNoLnBhaXJzLmxlbmd0aCA+IDApO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZVBhdGgoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbCh7IHBhcnRzIH06IEFTVC5QYXRoRXhwcmVzc2lvbiwgc3ltYm9sczogU3ltYm9sVGFibGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN5bWJvbHMgJiYgLyogcGFydHMubGVuZ3RoICYmICovIHN5bWJvbHMuaGFzKHBhcnRzWzBdKTtcbn1cblxuZnVuY3Rpb24gaXNZaWVsZChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICd5aWVsZCc7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdwYXJ0aWFsJztcbn1cblxuZnVuY3Rpb24gaXNEZWJ1Z2dlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdkZWJ1Z2dlcic7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2socGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrJztcbn1cblxuZnVuY3Rpb24gaXNIYXNCbG9ja1BhcmFtcyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2stcGFyYW1zJztcbn1cblxuZnVuY3Rpb24gaXNCdWlsdEluSGVscGVyKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gaXNIYXNCbG9jayhwYXRoKSB8fCBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBpc0FyZyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcGF0aFsnZGF0YSddO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc1NpbXBsZVBhdGgocGF0aDogQVNULlBhdGhFeHByZXNzaW9uLCBsb2M6IEFTVC5Tb3VyY2VMb2NhdGlvbiwgY29udGV4dDogc3RyaW5nKSB7XG4gIGlmICghaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBcXGAke3BhdGgub3JpZ2luYWx9XFxgIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgJHtjb250ZXh0fSBvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9LmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkWWllbGQoeyBoYXNoIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IHN0cmluZyB7XG4gIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgaWYgKChwYWlycy5sZW5ndGggPT09IDEgJiYgcGFpcnNbMF0ua2V5ICE9PSAndG8nKSB8fCBwYWlycy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB5aWVsZCBvbmx5IHRha2VzIGEgc2luZ2xlIG5hbWVkIGFyZ3VtZW50OiAndG8nYCk7XG4gIH0gZWxzZSBpZiAocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLnZhbHVlLnR5cGUgIT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZWApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChwYWlyc1swXS52YWx1ZSBhcyBBU1QuU3RyaW5nTGl0ZXJhbCkudmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQYXJ0aWFsKHsgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBsb2MgfTogQVNULk11c3RhY2hlU3RhdGVtZW50KSAvKiA6IGV4cHIgKi8ge1xuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcnRpYWwgZm91bmQgd2l0aCBubyBhcmd1bWVudHMuIFlvdSBtdXN0IHNwZWNpZnkgYSB0ZW1wbGF0ZSBuYW1lLiAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgfSBlbHNlIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgcGFydGlhbCBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHMgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoIWVzY2FwZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHt7e3BhcnRpYWwgLi4ufX19IGlzIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSB1c2Uge3twYXJ0aWFsIC4uLn19IGluc3RlYWQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UodHlwZTogc3RyaW5nLCB7IHBhcmFtcywgaGFzaCwgbG9jIH06IEFTVC5DYWxsKTogc3RyaW5nIHtcbiAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R5cGV9IGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEpIHtcbiAgICBsZXQgcGFyYW0gPSBwYXJhbXNbMF07XG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgcmV0dXJuIHBhcmFtLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWUgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKHsgcGFyYW1zLCBoYXNoIH06IHsgcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBoYXNoOiBBU1QuSGFzaCB9KSB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZWJ1Z2dlciBkb2VzIG5vdCB0YWtlIGFueSBwb3NpdGlvbmFsIGFyZ3VtZW50c2ApO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wbGF0ZS1jb21waWxlci5qcyJdLCJuYW1lcyI6WyJUZW1wbGF0ZVZpc2l0b3IiLCJKYXZhU2NyaXB0Q29tcGlsZXIiLCJTdGFjayIsImdldEF0dHJOYW1lc3BhY2UiLCJhc3NlcnQiLCJpc0xpdGVyYWwiLCJpc1RydXN0ZWRWYWx1ZSIsInZhbHVlIiwiZXNjYXBlZCIsInVuZGVmaW5lZCIsIlRlbXBsYXRlQ29tcGlsZXIiLCJvcHRpb25zIiwidGVtcGxhdGVJZCIsInRlbXBsYXRlSWRzIiwic3ltYm9sU3RhY2siLCJvcGNvZGVzIiwiaW5jbHVkZU1ldGEiLCJjb21waWxlIiwiYXN0IiwidGVtcGxhdGVWaXNpdG9yIiwidmlzaXQiLCJjb21waWxlciIsInByb2Nlc3MiLCJhY3Rpb25zIiwibWV0YSIsImZvckVhY2giLCJuYW1lIiwiYXJncyIsIkVycm9yIiwic3RhcnRQcm9ncmFtIiwicHJvZ3JhbSIsInB1c2giLCJvcGNvZGUiLCJlbmRQcm9ncmFtIiwicG9wIiwic3RhcnRCbG9jayIsImVuZEJsb2NrIiwidGV4dCIsImFjdGlvbiIsImNoYXJzIiwiY29tbWVudCIsIm9wZW5FbGVtZW50IiwiaSIsImF0dHJpYnV0ZXMiLCJsZW5ndGgiLCJhdHRyaWJ1dGUiLCJtb2RpZmllcnMiLCJtb2RpZmllciIsImNsb3NlRWxlbWVudCIsIm5hbWVzcGFjZSIsImlzU3RhdGljIiwicHJlcGFyZUF0dHJpYnV0ZVZhbHVlIiwiY2hhckF0IiwidHlwZSIsImlzVHJ1c3RpbmciLCJhc3NlcnRJc1NpbXBsZVBhdGgiLCJwYXRoIiwibG9jIiwicGFydHMiLCJwcmVwYXJlSGVscGVyIiwibXVzdGFjaGUiLCJtdXN0YWNoZUV4cHJlc3Npb24iLCJpc1lpZWxkIiwidG8iLCJhc3NlcnRWYWxpZFlpZWxkIiwieWllbGQiLCJpc1BhcnRpYWwiLCJwYXJhbXMiLCJhc3NlcnRWYWxpZFBhcnRpYWwiLCJwYXJ0aWFsIiwiaXNEZWJ1Z2dlciIsImFzc2VydFZhbGlkRGVidWdnZXJVc2FnZSIsImRlYnVnZ2VyIiwiYmxvY2siLCJpbnZlcnNlSWQiLCJpbnZlcnNlIiwiYXJnIiwiaGVhZCIsInJlc3QiLCJzeW1ib2wiLCJzeW1ib2xzIiwiYWxsb2NhdGVOYW1lZCIsImV4cHIiLCJpc0J1aWx0SW5IZWxwZXIiLCJidWlsdEluSGVscGVyIiwiaXNBcmciLCJpc0hlbHBlckludm9jYXRpb24iLCJ0aGlzIiwiaXNMb2NhbCIsImdldCIsImlzU2ltcGxlUGF0aCIsInByZXBhcmVQYXJhbXMiLCJhbGxvY2F0ZUJsb2NrIiwiX25hbWUiLCJnZXRFdmFsSW5mbyIsImhhc0Jsb2NrIiwiaGFzQmxvY2tQYXJhbXMiLCJfcGFyYW1zIiwiaXNIYXNCbG9jayIsImFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZSIsIm9yaWdpbmFsIiwiaXNIYXNCbG9ja1BhcmFtcyIsIlN1YkV4cHJlc3Npb24iLCJQYXRoRXhwcmVzc2lvbiIsImRhdGEiLCJoYXMiLCJzbGljZSIsIlN0cmluZ0xpdGVyYWwiLCJCb29sZWFuTGl0ZXJhbCIsIk51bWJlckxpdGVyYWwiLCJOdWxsTGl0ZXJhbCIsIlVuZGVmaW5lZExpdGVyYWwiLCJoYXNoIiwicHJlcGFyZUhhc2giLCJwYXJhbSIsInBhaXJzIiwia2V5IiwiYXR0cmlidXRlTXVzdGFjaGUiLCJwcmVwYXJlQ29uY2F0UGFydHMiLCJwYXJ0Iiwibm9kZSIsInNvdXJjZSIsInN0YXJ0IiwiZW5kIiwibGluZSIsImNvbHVtbiIsImN1cnJlbnQiLCJjb250ZXh0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxBQUFPLEFBQXFCOzs7O0FBQzVCLEFBQU8sQUFBd0I7Ozs7QUFDL0IsQUFBUyxBQUFPLEFBQXdCLEFBQ3hDLEFBQVMsQUFBc0I7O0FBQy9CLEFBQVMsQUFBaUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQzFCLFNBQUEsQUFBUyxlQUFULEFBQXdCLE9BQU8sQUFDM0I7V0FBTyxNQUFBLEFBQU0sWUFBTixBQUFrQixhQUFhLENBQUMsTUFBdkMsQUFBNkMsQUFDaEQ7OztJLEFB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Y2VzQ29udGVudCI6WyJpbXBvcnQgVGVtcGxhdGVWaXNpdG9yIGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIgZnJvbSBcIi4vamF2YXNjcmlwdC1jb21waWxlclwiO1xuaW1wb3J0IHsgU3RhY2ssIGdldEF0dHJOYW1lc3BhY2UgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgYXNzZXJ0LCBleHBlY3QgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgaXNMaXRlcmFsIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcbmZ1bmN0aW9uIGlzVHJ1c3RlZFZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmVzY2FwZWQgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUuZXNjYXBlZDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlQ29tcGlsZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUlkID0gMDtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUlkcyA9IFtdO1xuICAgICAgICB0aGlzLnN5bWJvbFN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIHRoaXMub3Bjb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLmluY2x1ZGVNZXRhID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIHN0YXRpYyBjb21waWxlKG9wdGlvbnMsIGFzdCkge1xuICAgICAgICBsZXQgdGVtcGxhdGVWaXNpdG9yID0gbmV3IFRlbXBsYXRlVmlzaXRvcigpO1xuICAgICAgICB0ZW1wbGF0ZVZpc2l0b3IudmlzaXQoYXN0KTtcbiAgICAgICAgbGV0IGNvbXBpbGVyID0gbmV3IFRlbXBsYXRlQ29tcGlsZXIob3B0aW9ucyk7XG4gICAgICAgIGxldCBvcGNvZGVzID0gY29tcGlsZXIucHJvY2Vzcyh0ZW1wbGF0ZVZpc2l0b3IuYWN0aW9ucyk7XG4gICAgICAgIHJldHVybiBKYXZhU2NyaXB0Q29tcGlsZXIucHJvY2VzcyhvcGNvZGVzLCBhc3RbJ3N5bWJvbHMnXSwgb3B0aW9ucy5tZXRhKTtcbiAgICB9XG4gICAgZ2V0IHN5bWJvbHMoKSB7XG4gICAgICAgIHJldHVybiBleHBlY3QodGhpcy5zeW1ib2xTdGFjay5jdXJyZW50LCAnRXhwZWN0ZWQgYSBzeW1ib2wgdGFibGUgb24gdGhlIHN0YWNrJyk7XG4gICAgfVxuICAgIHByb2Nlc3MoYWN0aW9ucykge1xuICAgICAgICBhY3Rpb25zLmZvckVhY2goKFtuYW1lLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkICR7bmFtZX0gb24gVGVtcGxhdGVDb21waWxlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpc1tuYW1lXSguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wY29kZXM7XG4gICAgfVxuICAgIHN0YXJ0UHJvZ3JhbShwcm9ncmFtKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhcnRQcm9ncmFtJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gICAgfVxuICAgIGVuZFByb2dyYW0oKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdlbmRQcm9ncmFtJywgbnVsbCk7XG4gICAgfVxuICAgIHN0YXJ0QmxvY2socHJvZ3JhbSkge1xuICAgICAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUlkKys7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gICAgfVxuICAgIGVuZEJsb2NrKCkge1xuICAgICAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlSWRzLnB1c2godGhpcy50ZW1wbGF0ZUlkIC0gMSk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdlbmRCbG9jaycsIG51bGwpO1xuICAgIH1cbiAgICB0ZXh0KFthY3Rpb25dKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCd0ZXh0JywgYWN0aW9uLCBhY3Rpb24uY2hhcnMpO1xuICAgIH1cbiAgICBjb21tZW50KFthY3Rpb25dKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdjb21tZW50JywgYWN0aW9uLCBhY3Rpb24udmFsdWUpO1xuICAgIH1cbiAgICBvcGVuRWxlbWVudChbYWN0aW9uXSkge1xuICAgICAgICB0aGlzLm9wY29kZSgnb3BlbkVsZW1lbnQnLCBhY3Rpb24sIGFjdGlvbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlKFthY3Rpb24uYXR0cmlidXRlc1tpXV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLm1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5tb2RpZmllcihbYWN0aW9uLm1vZGlmaWVyc1tpXV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3Bjb2RlKCdmbHVzaEVsZW1lbnQnLCBudWxsKTtcbiAgICAgICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKGFjdGlvblsnc3ltYm9scyddKTtcbiAgICB9XG4gICAgY2xvc2VFbGVtZW50KFthY3Rpb25dKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdjbG9zZUVsZW1lbnQnLCBudWxsLCBhY3Rpb24pO1xuICAgIH1cbiAgICBhdHRyaWJ1dGUoW2FjdGlvbl0pIHtcbiAgICAgICAgbGV0IHsgbmFtZSwgdmFsdWUgfSA9IGFjdGlvbjtcbiAgICAgICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG4gICAgICAgIGxldCBpc1N0YXRpYyA9IHRoaXMucHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSAnQCcpIHtcbiAgICAgICAgICAgIC8vIEFyZ3VtZW50c1xuICAgICAgICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaXNUcnVzdGluZyA9IGlzVHJ1c3RlZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdzdGF0aWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1RydXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ3RydXN0aW5nQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbW9kaWZpZXIoW2FjdGlvbl0pIHtcbiAgICAgICAgYXNzZXJ0SXNTaW1wbGVQYXRoKGFjdGlvbi5wYXRoLCBhY3Rpb24ubG9jLCAnbW9kaWZpZXInKTtcbiAgICAgICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG4gICAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgICAgICB0aGlzLm9wY29kZSgnbW9kaWZpZXInLCBhY3Rpb24sIHBhcnRzWzBdKTtcbiAgICB9XG4gICAgbXVzdGFjaGUoW2FjdGlvbl0pIHtcbiAgICAgICAgbGV0IHsgcGF0aCB9ID0gYWN0aW9uO1xuICAgICAgICBpZiAoaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICAgICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1lpZWxkKHBhdGgpKSB7XG4gICAgICAgICAgICBsZXQgdG8gPSBhc3NlcnRWYWxpZFlpZWxkKGFjdGlvbik7XG4gICAgICAgICAgICB0aGlzLnlpZWxkKHRvLCBhY3Rpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlYnVnZ2VyKHBhdGgpKSB7XG4gICAgICAgICAgICBhc3NlcnRWYWxpZERlYnVnZ2VyVXNhZ2UoYWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZGVidWdnZXIoJ2RlYnVnZ2VyJywgYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJsb2NrKFthY3Rpb24gLyosIGluZGV4LCBjb3VudCovXSkge1xuICAgICAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlSWQgPSB0aGlzLnRlbXBsYXRlSWRzLnBvcCgpO1xuICAgICAgICBsZXQgaW52ZXJzZUlkID0gYWN0aW9uLmludmVyc2UgPT09IG51bGwgPyBudWxsIDogdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0c1swXSwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgICB9XG4gICAgLy8vIEludGVybmFsIGFjdGlvbnMsIG5vdCBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgcHJvY2Vzc2VkIGFjdGlvbnNcbiAgICBhcmcoW3BhdGhdKSB7XG4gICAgICAgIGxldCB7IHBhcnRzOiBbaGVhZCwgLi4ucmVzdF0gfSA9IHBhdGg7XG4gICAgICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChoZWFkKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIHBhdGgsIHN5bWJvbCwgcmVzdCk7XG4gICAgfVxuICAgIG11c3RhY2hlRXhwcmVzc2lvbihleHByKSB7XG4gICAgICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG4gICAgICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgZXhwciwgcGF0aC52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCdWlsdEluSGVscGVyKHBhdGgpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNIZWxwZXJJbnZvY2F0aW9uKGV4cHIpKSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgcGF0aC5wYXJ0c1swXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGF0aC50aGlzKSB7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgcGF0aC5wYXJ0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgdGhpcy5zeW1ib2xzLmdldChoZWFkKSwgcGFydHMpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ3Vua25vd24nLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdtYXliZUxvY2FsJywgZXhwciwgcGF0aC5wYXJ0cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8vIEludGVybmFsIFN5bnRheFxuICAgIHlpZWxkKHRvLCBhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgICAgICB0aGlzLm9wY29kZSgneWllbGQnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKHRvKSk7XG4gICAgfVxuICAgIGRlYnVnZ2VyKF9uYW1lLCBhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2RlYnVnZ2VyJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKSk7XG4gICAgfVxuICAgIGhhc0Jsb2NrKG5hbWUsIGFjdGlvbikge1xuICAgICAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2snLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgICB9XG4gICAgaGFzQmxvY2tQYXJhbXMobmFtZSwgYWN0aW9uKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdoYXNCbG9ja1BhcmFtcycsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sobmFtZSkpO1xuICAgIH1cbiAgICBwYXJ0aWFsKF9wYXJhbXMsIGFjdGlvbikge1xuICAgICAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwYXJ0aWFsJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKSk7XG4gICAgfVxuICAgIGJ1aWx0SW5IZWxwZXIoZXhwcikge1xuICAgICAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgICAgICBpZiAoaXNIYXNCbG9jayhwYXRoKSkge1xuICAgICAgICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgICAgICAgIHRoaXMuaGFzQmxvY2sobmFtZSwgZXhwcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNIYXNCbG9ja1BhcmFtcyhwYXRoKSkge1xuICAgICAgICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgICAgICAgIHRoaXMuaGFzQmxvY2tQYXJhbXMobmFtZSwgZXhwcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8vIEV4cHJlc3Npb25zLCBpbnZva2VkIHJlY3Vyc2l2ZWx5IGZyb20gcHJlcGFyZVBhcmFtcyBhbmQgcHJlcGFyZUhhc2hcbiAgICBTdWJFeHByZXNzaW9uKGV4cHIpIHtcbiAgICAgICAgaWYgKGlzQnVpbHRJbkhlbHBlcihleHByLnBhdGgpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgZXhwci5wYXRoLnBhcnRzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBQYXRoRXhwcmVzc2lvbihleHByKSB7XG4gICAgICAgIGlmIChleHByLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYXJnKFtleHByXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgeyBzeW1ib2xzIH0gPSB0aGlzO1xuICAgICAgICAgICAgbGV0IFtoZWFkXSA9IGV4cHIucGFydHM7XG4gICAgICAgICAgICBpZiAoZXhwci50aGlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2xzLmhhcyhoZWFkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCBzeW1ib2xzLmdldChoZWFkKSwgZXhwci5wYXJ0cy5zbGljZSgxKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBleHByLnBhcnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBTdHJpbmdMaXRlcmFsKGFjdGlvbikge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gICAgfVxuICAgIEJvb2xlYW5MaXRlcmFsKGFjdGlvbikge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gICAgfVxuICAgIE51bWJlckxpdGVyYWwoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgICB9XG4gICAgTnVsbExpdGVyYWwoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgICB9XG4gICAgVW5kZWZpbmVkTGl0ZXJhbChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICAgIH1cbiAgICAvLy8gVXRpbGl0aWVzXG4gICAgb3Bjb2RlKG5hbWUsIGFjdGlvbiwgLi4uYXJncykge1xuICAgICAgICBsZXQgb3Bjb2RlID0gW25hbWUsIC4uLmFyZ3NdO1xuICAgICAgICBpZiAodGhpcy5pbmNsdWRlTWV0YSAmJiBhY3Rpb24pIHtcbiAgICAgICAgICAgIG9wY29kZS5wdXNoKHRoaXMubWV0YShhY3Rpb24pKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wY29kZXMucHVzaChvcGNvZGUpO1xuICAgIH1cbiAgICBwcmVwYXJlSGVscGVyKGV4cHIpIHtcbiAgICAgICAgYXNzZXJ0SXNTaW1wbGVQYXRoKGV4cHIucGF0aCwgZXhwci5sb2MsICdoZWxwZXInKTtcbiAgICAgICAgbGV0IHsgcGFyYW1zLCBoYXNoIH0gPSBleHByO1xuICAgICAgICB0aGlzLnByZXBhcmVIYXNoKGhhc2gpO1xuICAgICAgICB0aGlzLnByZXBhcmVQYXJhbXMocGFyYW1zKTtcbiAgICB9XG4gICAgcHJlcGFyZVBhcmFtcyhwYXJhbXMpIHtcbiAgICAgICAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBwYXJhbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBwYXJhbSA9IHBhcmFtc1tpXTtcbiAgICAgICAgICAgIGFzc2VydCh0aGlzW3BhcmFtLnR5cGVdLCBgVW5pbXBsZW1lbnRlZCAke3BhcmFtLnR5cGV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTtcbiAgICAgICAgICAgIHRoaXNbcGFyYW0udHlwZV0ocGFyYW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJhbXMubGVuZ3RoKTtcbiAgICB9XG4gICAgcHJlcGFyZUhhc2goaGFzaCkge1xuICAgICAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuICAgICAgICBpZiAoIXBhaXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuICAgICAgICAgICAgYXNzZXJ0KHRoaXNbdmFsdWUudHlwZV0sIGBVbmltcGxlbWVudGVkICR7dmFsdWUudHlwZX0gb24gVGVtcGxhdGVDb21waWxlcmApO1xuICAgICAgICAgICAgdGhpc1t2YWx1ZS50eXBlXSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVPYmplY3QnLCBudWxsLCBwYWlycy5sZW5ndGgpO1xuICAgIH1cbiAgICBwcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgLy8gcmV0dXJucyB0aGUgc3RhdGljIHZhbHVlIGlmIHRoZSB2YWx1ZSBpcyBzdGF0aWNcbiAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCB2YWx1ZSwgdmFsdWUuY2hhcnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgY2FzZSAnTXVzdGFjaGVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVDb25jYXRQYXJ0cyh2YWx1ZS5wYXJ0cyk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2NvbmNhdCcsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlcGFyZUNvbmNhdFBhcnRzKHBhcnRzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFtwYXJ0XSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgcGFydC5jaGFycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcnRzLmxlbmd0aCk7XG4gICAgfVxuICAgIGF0dHJpYnV0ZU11c3RhY2hlKFthY3Rpb25dKSB7XG4gICAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgfVxuICAgIG1ldGEobm9kZSkge1xuICAgICAgICBsZXQgbG9jID0gbm9kZS5sb2M7XG4gICAgICAgIGlmICghbG9jKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHsgc291cmNlLCBzdGFydCwgZW5kIH0gPSBsb2M7XG4gICAgICAgIHJldHVybiBbJ2xvYycsIFtzb3VyY2UgfHwgbnVsbCwgW3N0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbl0sIFtlbmQubGluZSwgZW5kLmNvbHVtbl1dXTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc0hlbHBlckludm9jYXRpb24obXVzdGFjaGUpIHtcbiAgICByZXR1cm4gbXVzdGFjaGUucGFyYW1zICYmIG11c3RhY2hlLnBhcmFtcy5sZW5ndGggPiAwIHx8IG11c3RhY2hlLmhhc2ggJiYgbXVzdGFjaGUuaGFzaC5wYWlycy5sZW5ndGggPiAwO1xufVxuZnVuY3Rpb24gaXNTaW1wbGVQYXRoKHsgcGFydHMgfSkge1xuICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDE7XG59XG5mdW5jdGlvbiBpc0xvY2FsKHsgcGFydHMgfSwgc3ltYm9scykge1xuICAgIHJldHVybiBzeW1ib2xzICYmIHN5bWJvbHMuaGFzKHBhcnRzWzBdKTtcbn1cbmZ1bmN0aW9uIGlzWWllbGQocGF0aCkge1xuICAgIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAneWllbGQnO1xufVxuZnVuY3Rpb24gaXNQYXJ0aWFsKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ3BhcnRpYWwnO1xufVxuZnVuY3Rpb24gaXNEZWJ1Z2dlcihwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdkZWJ1Z2dlcic7XG59XG5mdW5jdGlvbiBpc0hhc0Jsb2NrKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jayc7XG59XG5mdW5jdGlvbiBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jay1wYXJhbXMnO1xufVxuZnVuY3Rpb24gaXNCdWlsdEluSGVscGVyKHBhdGgpIHtcbiAgICByZXR1cm4gaXNIYXNCbG9jayhwYXRoKSB8fCBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpO1xufVxuZnVuY3Rpb24gaXNBcmcocGF0aCkge1xuICAgIHJldHVybiAhIXBhdGhbJ2RhdGEnXTtcbn1cbmZ1bmN0aW9uIGFzc2VydElzU2ltcGxlUGF0aChwYXRoLCBsb2MsIGNvbnRleHQpIHtcbiAgICBpZiAoIWlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxcYCR7cGF0aC5vcmlnaW5hbH1cXGAgaXMgbm90IGEgdmFsaWQgbmFtZSBmb3IgYSAke2NvbnRleHR9IG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0uYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRZaWVsZCh7IGhhc2ggfSkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG4gICAgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS5rZXkgIT09ICd0bycgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHlpZWxkIG9ubHkgdGFrZXMgYSBzaW5nbGUgbmFtZWQgYXJndW1lbnQ6ICd0bydgKTtcbiAgICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlYCk7XG4gICAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICdkZWZhdWx0JztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFpcnNbMF0udmFsdWUudmFsdWU7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQYXJ0aWFsKHsgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBsb2MgfSkge1xuICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcnRpYWwgZm91bmQgd2l0aCBubyBhcmd1bWVudHMuIFlvdSBtdXN0IHNwZWNpZnkgYSB0ZW1wbGF0ZSBuYW1lLiAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgICB9IGVsc2UgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcGFydGlhbCBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHMgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfSBlbHNlIGlmICghZXNjYXBlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHt7e3BhcnRpYWwgLi4ufX19IGlzIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSB1c2Uge3twYXJ0aWFsIC4uLn19IGluc3RlYWQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG59XG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UodHlwZSwgeyBwYXJhbXMsIGhhc2gsIGxvYyB9KSB7XG4gICAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICdkZWZhdWx0JztcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgbGV0IHBhcmFtID0gcGFyYW1zWzBdO1xuICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW0udmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWUgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gb25seSB0YWtlcyBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZSh7IHBhcmFtcywgaGFzaCB9KSB7XG4gICAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnZGVmYXVsdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZWJ1Z2dlciBkb2VzIG5vdCB0YWtlIGFueSBwb3NpdGlvbmFsIGFyZ3VtZW50c2ApO1xuICAgIH1cbn0iXX0=

@@ -85,3 +85,5 @@ "use strict";

ProgramSymbolTable.prototype.get = function get(_name) {};
ProgramSymbolTable.prototype.get = function get(_name) {
throw (0, _util.unreachable)();
};

@@ -370,2 +372,5 @@ ProgramSymbolTable.prototype.getLocalsMap = function getLocalsMap() {

// Frame helpers
TemplateVisitor.prototype.getCurrentFrame = function getCurrentFrame() {

@@ -387,4 +392,2 @@ return this.frameStack[this.frameStack.length - 1];

key: 'currentFrame',
// Frame helpers
get: function () {

@@ -418,2 +421,2 @@ return this.getCurrentFrame();

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLEFBQU8sQUFBZ0IsQUFBSSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBRW5ELEFBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQ0osQUFBTTs7Ozs7Z0JBQUMsQUFBRyxxQkFDUixBQUFNO2VBQUMsSUFBSSxBQUFrQixBQUFFLEFBQUMsQUFDbEMsQUFBQzs7OzBCQVlELEFBQUssdUJBQUMsQUFBZ0I7b0JBQ3BCOztZQUFJLEFBQU8saUJBQVUsQUFBRyxvQkFBQyxBQUFJO21CQUFJLEFBQUksTUFBQyxBQUFRLFNBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQztBQUF4QyxBQUFNLEFBQ3BCLEFBQU07ZUFBQyxJQUFJLEFBQWdCLGlCQUFDLEFBQUksTUFBRSxBQUFNLFFBQUUsQUFBTyxBQUFDLEFBQUMsQUFDckQsQUFBQyxBQUNGOzs7O0FBRUQsQUFBTTtJQUEwQjtrQ0FBaEM7Ozs7OytFQUNTOztlQUFPLFVBQWEsQUFBRSxBQUFDLEFBRXRCO2VBQUksT0FBRyxBQUFDLEFBQUMsQUFDVDtlQUFLLFFBQUcsQUFBSSxBQUFVLEFBQUMsQUFDdkI7ZUFBTSxTQUFHLEFBQUksQUFBVSxBQUFDLEFBeUNsQztlQUFDOzs7aUNBdkNDLEFBQUcsbUJBQUMsQUFBYSxPQUNmLEFBQU07ZUFBQyxBQUFLLEFBQUMsQUFDZixBQUFDOzs7aUNBRUQsQUFBRyxtQkFBQyxBQUFhLE9BQ2pCLEFBQUM7O2lDQUVELEFBQVksdUNBQ1YsQUFBTTtlQUFDLEFBQUUsQUFBQyxBQUNaLEFBQUM7OztpQ0FFRCxBQUFXLHFDQUNULEFBQU07ZUFBQyxBQUFFLEFBQUMsQUFDWixBQUFDOzs7aUNBRUQsQUFBYSx1Q0FBQyxBQUFZLE1BQ3hCO1lBQUksQUFBSyxRQUFHLEFBQUksS0FBQyxBQUFLLE1B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QUMsQUFBSyxBQUFDLEFBQ2YsQUFBQyxBQUNIO0FBQUM7QUFFRCxBQUFNO1dBQUMsQ0FBQyxBQUFDLEFBQUMsQUFDWixBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVNUIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcbmltcG9ydCB7IENvcmUgfSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBEaWN0LCBPcHRpb24sIGRpY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN5bWJvbFRhYmxlIHtcbiAgc3RhdGljIHRvcCgpOiBQcm9ncmFtU3ltYm9sVGFibGUge1xuICAgIHJldHVybiBuZXcgUHJvZ3JhbVN5bWJvbFRhYmxlKCk7XG4gIH1cblxuICBhYnN0cmFjdCBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgYWJzdHJhY3QgZ2V0KG5hbWU6IHN0cmluZyk6IG51bWJlcjtcblxuICBhYnN0cmFjdCBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+O1xuICBhYnN0cmFjdCBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvO1xuXG4gIGFic3RyYWN0IGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYWJzdHJhY3QgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGNoaWxkKGxvY2Fsczogc3RyaW5nW10pOiBCbG9ja1N5bWJvbFRhYmxlIHtcbiAgICBsZXQgc3ltYm9scyA9IGxvY2Fscy5tYXAobmFtZSA9PiB0aGlzLmFsbG9jYXRlKG5hbWUpKTtcbiAgICByZXR1cm4gbmV3IEJsb2NrU3ltYm9sVGFibGUodGhpcywgbG9jYWxzLCBzeW1ib2xzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbVN5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10gPSBbXTtcblxuICBwcml2YXRlIHNpemUgPSAxO1xuICBwcml2YXRlIG5hbWVkID0gZGljdDxudW1iZXI+KCk7XG4gIHByaXZhdGUgYmxvY2tzID0gZGljdDxudW1iZXI+KCk7XG5cbiAgaGFzKF9uYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQoX25hbWU6IHN0cmluZyk6IG5ldmVyIHtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdO1xuXG4gICAgaWYgKCFuYW1lZCkge1xuICAgICAgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgQCR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZWQ7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV07XG5cbiAgICBpZiAoIWJsb2NrKSB7XG4gICAgICBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgJiR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2s7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuc3ltYm9scy5wdXNoKGlkZW50aWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnNpemUrKztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFN5bWJvbFRhYmxlLCBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10sIHB1YmxpYyBzbG90czogbnVtYmVyW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSkgIT09IC0xKSB8fCB0aGlzLnBhcmVudC5oYXMobmFtZSk7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgc2xvdCA9IHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpO1xuICAgIHJldHVybiBzbG90ID09PSAtMSA/IHRoaXMucGFyZW50LmdldChuYW1lKSA6IHRoaXMuc2xvdHNbc2xvdF07XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICBsZXQgZGljdCA9IHRoaXMucGFyZW50LmdldExvY2Fsc01hcCgpO1xuICAgIHRoaXMuc3ltYm9scy5mb3JFYWNoKHN5bWJvbCA9PiBkaWN0W3N5bWJvbF0gPSB0aGlzLmdldChzeW1ib2wpKTtcbiAgICByZXR1cm4gZGljdDtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIGxldCBsb2NhbHMgPSB0aGlzLmdldExvY2Fsc01hcCgpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhsb2NhbHMpLm1hcChzeW1ib2wgPT4gbG9jYWxzW3N5bWJvbF0pO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZU5hbWVkKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZUJsb2NrKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGUoaWRlbnRpZmllcik7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBpbiBhbiBBU1QgYW5kIG91dHB1dHMgYSBsaXN0IG9mIGFjdGlvbnMgdG8gYmUgY29uc3VtZWRcbiAqIGJ5IGEgY29tcGlsZXIuIEZvciBleGFtcGxlLCB0aGUgdGVtcGxhdGVcbiAqXG4gKiAgICAgZm9ve3tiYXJ9fTxkaXY+YmF6PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgM11dLFxuICogICAgICBbJ211c3RhY2hlJywgW211c3RhY2hlTm9kZSwgMSwgM11dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgM10sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoaXMgdmlzaXRvciB3YWxrcyB0aGUgQVNUIGRlcHRoIGZpcnN0IGFuZCBiYWNrd2FyZHMuIEFzXG4gKiBhIHJlc3VsdCB0aGUgYm90dG9tLW1vc3QgY2hpbGQgdGVtcGxhdGUgd2lsbCBhcHBlYXIgYXQgdGhlXG4gKiB0b3Agb2YgdGhlIGFjdGlvbnMgbGlzdCB3aGVyZWFzIHRoZSByb290IHRlbXBsYXRlIHdpbGwgYXBwZWFyXG4gKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgICAgPGRpdj57eyNpZn19Zm9ve3tlbHNlfX1iYXI8Yj48L2I+e3svaWZ9fTwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDIsIDBdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMiwgMF1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMl1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMl1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxLCAxXV0sXG4gKiAgICAgIFsnYmxvY2snLCBbYmxvY2tOb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIGlzIG1haW50YWluZWQgYnkgYSBzdGFjayBvZiBmcmFtZXMuXG4gKiBXaGVuZXZlciBhIG5vZGUgd2l0aCBjaGlsZHJlbiBpcyBlbnRlcmVkIChlaXRoZXIgYSBQcm9ncmFtTm9kZVxuICogb3IgYW4gRWxlbWVudE5vZGUpIGEgZnJhbWUgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIG9mIHRoYXRcbiAqIG5vZGUuIEZvciBleGFtcGxlLFxuICpcbiAqICAgLSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGlsZCBub2RlIGJlaW5nIHZpc2l0ZWRcbiAqICAgLSB0aGUgbnVtYmVyIG9mIG11c3RhY2hlcyBjb250YWluZWQgd2l0aGluIGl0cyBjaGlsZCBub2Rlc1xuICogICAtIHRoZSBsaXN0IG9mIGFjdGlvbnMgZ2VuZXJhdGVkIGJ5IGl0cyBjaGlsZCBub2Rlc1xuICovXG5cbmNsYXNzIEZyYW1lIHtcbiAgcHVibGljIHBhcmVudE5vZGU6IE9wdGlvbjxPYmplY3Q+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkcmVuOiBPcHRpb248QVNULk5vZGVbXT4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRJbmRleDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRDb3VudDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRUZW1wbGF0ZUNvdW50ID0gMDtcbiAgcHVibGljIG11c3RhY2hlQ291bnQgPSAwO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHVibGljIGJsYW5rQ2hpbGRUZXh0Tm9kZXM6IE9wdGlvbjxudW1iZXJbXT4gPSBudWxsO1xuICBwdWJsaWMgc3ltYm9sczogT3B0aW9uPFN5bWJvbFRhYmxlPiA9IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWN0aW9uIHtcbiAgZXhwb3J0IHR5cGUgU3RhcnRQcm9ncmFtID0gWydzdGFydFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kUHJvZ3JhbSA9IFsnZW5kUHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFN0YXJ0QmxvY2sgPSBbJ3N0YXJ0QmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kQmxvY2sgPSBbJ2VuZEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQmxvY2sgPSBbJ2Jsb2NrJywgW0FTVC5CbG9ja1N0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgTXVzdGFjaGUgPSBbJ211c3RhY2hlJywgW0FTVC5NdXN0YWNoZVN0YXRlbWVudCB8IEFTVC5QYXJ0aWFsU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBPcGVuRWxlbWVudCA9IFsnb3BlbkVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBDbG9zZUVsZW1lbnQgPSBbJ2Nsb3NlRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFRleHQgPSBbJ3RleHQnLCBbQVNULlRleHROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBDb21tZW50ID0gWydjb21tZW50JywgW0FTVC5Db21tZW50U3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbiA9XG4gICAgICBTdGFydFByb2dyYW1cbiAgICB8IEVuZFByb2dyYW1cbiAgICB8IFN0YXJ0QmxvY2tcbiAgICB8IEVuZEJsb2NrXG4gICAgfCBCbG9ja1xuICAgIHwgTXVzdGFjaGVcbiAgICB8IE9wZW5FbGVtZW50XG4gICAgfCBDbG9zZUVsZW1lbnRcbiAgICB8IFRleHRcbiAgICB8IENvbW1lbnRcbiAgICA7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IEFjdGlvbi5BY3Rpb247XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlVmlzaXRvciB7XG4gIHByaXZhdGUgZnJhbWVTdGFjazogRnJhbWVbXSA9IFtdO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBwcm9ncmFtRGVwdGggPSAtMTtcblxuICB2aXNpdChub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gIH1cblxuICAvLyBUcmF2ZXJzYWwgbWV0aG9kc1xuXG4gIFByb2dyYW0ocHJvZ3JhbTogQVNULlByb2dyYW0pIHtcbiAgICB0aGlzLnByb2dyYW1EZXB0aCsrO1xuXG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgICBsZXQgcHJvZ3JhbUZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGlmICghcGFyZW50RnJhbWUpIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IFN5bWJvbFRhYmxlLnRvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhcnRUeXBlLCBlbmRUeXBlO1xuXG4gICAgaWYgKHRoaXMucHJvZ3JhbURlcHRoID09PSAwKSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRQcm9ncmFtJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kUHJvZ3JhbSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydEJsb2NrJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kQmxvY2snO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5wYXJlbnROb2RlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRyZW4gPSBwcm9ncmFtLmJvZHk7XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkQ291bnQgPSBwcm9ncmFtLmJvZHkubGVuZ3RoO1xuICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbZW5kVHlwZSwgW3Byb2dyYW0sIHRoaXMucHJvZ3JhbURlcHRoXV0gYXMgQWN0aW9uKTtcbiAgICBwcm9ncmFtRnJhbWUuc3ltYm9scyA9IHByb2dyYW1bJ3N5bWJvbHMnXTtcblxuICAgIGZvciAobGV0IGkgPSBwcm9ncmFtLmJvZHkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHByb2dyYW1GcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQocHJvZ3JhbS5ib2R5W2ldKTtcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtzdGFydFR5cGUsIFtcbiAgICAgIHByb2dyYW0sIHByb2dyYW1GcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQsXG4gICAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKClcbiAgICBdXSBhcyBBY3Rpb24pO1xuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIHRoaXMucHJvZ3JhbURlcHRoLS07XG5cbiAgICAvLyBQdXNoIHRoZSBjb21wbGV0ZWQgdGVtcGxhdGUgaW50byB0aGUgZ2xvYmFsIGFjdGlvbnMgbGlzdFxuICAgIGlmIChwYXJlbnRGcmFtZSkgeyBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQrKzsgfVxuICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLnByb2dyYW1GcmFtZS5hY3Rpb25zLnJldmVyc2UoKSk7XG4gIH1cblxuICBFbGVtZW50Tm9kZShlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBsZXQgZWxlbWVudEZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGVsZW1lbnRGcmFtZS5wYXJlbnROb2RlID0gZWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuO1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZENvdW50ID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgKz0gZWxlbWVudC5tb2RpZmllcnMubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgZWxlbWVudEZyYW1lLnN5bWJvbHMgPSBlbGVtZW50WydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChlbGVtZW50LmJsb2NrUGFyYW1zKTtcblxuICAgIGxldCBhY3Rpb25BcmdzOiBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICBlbGVtZW50LFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRJbmRleCEsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZENvdW50IVxuICAgIF07XG5cbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKFsnY2xvc2VFbGVtZW50JywgYWN0aW9uQXJnc10pO1xuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmF0dHJpYnV0ZXNbaV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBlbGVtZW50RnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuY2hpbGRyZW5baV0pO1xuICAgIH1cblxuICAgIGxldCBvcGVuID0gWydvcGVuRWxlbWVudCcsIFsuLi5hY3Rpb25BcmdzLCBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCwgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXV0gYXMgQWN0aW9uLk9wZW5FbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2gob3Blbik7XG5cbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICAvLyBQcm9wYWdhdGUgdGhlIGVsZW1lbnQncyBmcmFtZSBzdGF0ZSB0byB0aGUgcGFyZW50IGZyYW1lXG4gICAgaWYgKGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ID4gMCkgeyBwYXJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7IH1cbiAgICBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQgKz0gZWxlbWVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudDtcbiAgICBwYXJlbnRGcmFtZS5hY3Rpb25zLnB1c2goLi4uZWxlbWVudEZyYW1lLmFjdGlvbnMpO1xuICB9XG5cbiAgQXR0ck5vZGUoYXR0cjogQVNULkF0dHJOb2RlKSB7XG4gICAgaWYgKGF0dHIudmFsdWUudHlwZSAhPT0gJ1RleHROb2RlJykge1xuICAgICAgdGhpcy5jdXJyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIH1cbiAgfTtcblxuICBUZXh0Tm9kZSh0ZXh0OiBBU1QuVGV4dE5vZGUpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBpZiAodGV4dC5jaGFycyA9PT0gJycpIHtcbiAgICAgIGZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMhLnB1c2goZG9tSW5kZXhPZihmcmFtZS5jaGlsZHJlbiEsIHRleHQpKTtcbiAgICB9XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsndGV4dCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBCbG9ja1N0YXRlbWVudChub2RlOiBBU1QuQmxvY2tTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydibG9jaycsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcblxuICAgIGlmIChub2RlLmludmVyc2UpIHsgdGhpcy52aXNpdChub2RlLmludmVyc2UpOyB9XG4gICAgaWYgKG5vZGUucHJvZ3JhbSkgeyB0aGlzLnZpc2l0KG5vZGUucHJvZ3JhbSk7IH1cbiAgfTtcblxuICBQYXJ0aWFsU3RhdGVtZW50KG5vZGU6IEFTVC5QYXJ0aWFsU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIENvbW1lbnRTdGF0ZW1lbnQodGV4dDogQVNULkNvbW1lbnRTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydjb21tZW50JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIE11c3RhY2hlQ29tbWVudFN0YXRlbWVudCgpIHtcbiAgICAvLyBJbnRlbnRpb25hbCBlbXB0eTogSGFuZGxlYmFycyBjb21tZW50cyBzaG91bGQgbm90IGFmZmVjdCBvdXRwdXQuXG4gIH07XG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQobXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFttdXN0YWNoZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgLy8gRnJhbWUgaGVscGVyc1xuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRGcmFtZSgpOiBGcmFtZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGcmFtZSgpOiBPcHRpb248RnJhbWU+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEZyYW1lKCkge1xuICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBwcml2YXRlIHBvcEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzOiBBU1QuTm9kZVtdLCBkb21Ob2RlOiBBU1QuVGV4dE5vZGUgfCBBU1QuRWxlbWVudE5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wbGF0ZS12aXNpdG9yLmpzIl0sIm5hbWVzIjpbImRpY3QiLCJ1bnJlYWNoYWJsZSIsIlN5bWJvbFRhYmxlIiwidG9wIiwiUHJvZ3JhbVN5bWJvbFRhYmxlIiwiY2hpbGQiLCJsb2NhbHMiLCJzeW1ib2xzIiwibWFwIiwiYWxsb2NhdGUiLCJuYW1lIiwiQmxvY2tTeW1ib2xUYWJsZSIsImFyZ3VtZW50cyIsInNpemUiLCJuYW1lZCIsImJsb2NrcyIsImhhcyIsIl9uYW1lIiwiZ2V0IiwiZ2V0TG9jYWxzTWFwIiwiZ2V0RXZhbEluZm8iLCJhbGxvY2F0ZU5hbWVkIiwiYWxsb2NhdGVCbG9jayIsImJsb2NrIiwiaWRlbnRpZmllciIsInB1c2giLCJwYXJlbnQiLCJzbG90cyIsImluZGV4T2YiLCJzbG90IiwiZm9yRWFjaCIsInN5bWJvbCIsIk9iamVjdCIsImtleXMiLCJGcmFtZSIsInBhcmVudE5vZGUiLCJjaGlsZHJlbiIsImNoaWxkSW5kZXgiLCJjaGlsZENvdW50IiwiY2hpbGRUZW1wbGF0ZUNvdW50IiwibXVzdGFjaGVDb3VudCIsImFjdGlvbnMiLCJibGFua0NoaWxkVGV4dE5vZGVzIiwiVGVtcGxhdGVWaXNpdG9yIiwiZnJhbWVTdGFjayIsInByb2dyYW1EZXB0aCIsInZpc2l0Iiwibm9kZSIsInR5cGUiLCJQcm9ncmFtIiwicHJvZ3JhbSIsInBhcmVudEZyYW1lIiwiZ2V0Q3VycmVudEZyYW1lIiwicHJvZ3JhbUZyYW1lIiwicHVzaEZyYW1lIiwiYmxvY2tQYXJhbXMiLCJzdGFydFR5cGUiLCJlbmRUeXBlIiwiYm9keSIsImxlbmd0aCIsImkiLCJyZXZlcnNlIiwicG9wRnJhbWUiLCJFbGVtZW50Tm9kZSIsImVsZW1lbnQiLCJjdXJyZW50RnJhbWUiLCJlbGVtZW50RnJhbWUiLCJtb2RpZmllcnMiLCJhY3Rpb25BcmdzIiwiYXR0cmlidXRlcyIsIm9wZW4iLCJBdHRyTm9kZSIsImF0dHIiLCJ2YWx1ZSIsIlRleHROb2RlIiwidGV4dCIsImZyYW1lIiwiY2hhcnMiLCJkb21JbmRleE9mIiwiQmxvY2tTdGF0ZW1lbnQiLCJpbnZlcnNlIiwiUGFydGlhbFN0YXRlbWVudCIsIkNvbW1lbnRTdGF0ZW1lbnQiLCJNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQiLCJNdXN0YWNoZVN0YXRlbWVudCIsIm11c3RhY2hlIiwicG9wIiwibm9kZXMiLCJkb21Ob2RlIiwiaW5kZXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFTLEFBQU0sQUFBMkIsQUFDMUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsQUFBYSxnREFBYjsyQkFBQTs4QkFBQTtBQUFBOztnQkFBQSxBQUNXLHFCQUFNLEFBQ1Q7ZUFBTyxJQUFQLEFBQU8sQUFBSSxBQUNkO0FBSEw7OzBCQUFBLEFBSUksdUJBSkosQUFJVSxRQUFRO29CQUNWOztZQUFJLGlCQUFVLEFBQU8sSUFBSSxnQkFBQTttQkFBUSxNQUFBLEFBQUssU0FBYixBQUFRLEFBQWM7QUFBL0MsQUFBYyxBQUNkLFNBRGM7ZUFDUCxJQUFBLEFBQUksaUJBQUosQUFBcUIsTUFBckIsQUFBMkIsUUFBbEMsQUFBTyxBQUFtQyxBQUM3QztBQVBMOztXQUFBO0FBU0E7SUFBQSxBQUFhLDBFQUFiO2tDQUNJOztrQ0FBYzs4QkFBQTs7c0RBQ1YseUJBRFUsQUFDVixBQUFTLEFBQ1Q7O2VBQUEsQUFBSyxVQUFMLEFBQWUsQUFDZjtlQUFBLEFBQUssT0FBTCxBQUFZLEFBQ1o7ZUFBQSxBQUFLLFFBQUwsQUFBYSxBQUNiO2VBQUEsQUFBSyxTQUxLLEFBS1YsQUFBYztlQUNqQjtBQVBMOztpQ0FBQSxBQVFJLG1CQVJKLEFBUVEsT0FBTyxBQUNQO2VBQUEsQUFBTyxBQUNWO0FBVkw7O2lDQUFBLEFBV0ksbUJBWEosQUFXUSxPQUFPLEFBQ1A7Y0FBQSxBQUFNLEFBQ1Q7QUFiTDs7aUNBQUEsQUFjSSx1Q0FBZSxBQUNYO2VBQUEsQUFBTyxBQUNWO0FBaEJMOztpQ0FBQSxBQWlCSSxxQ0FBYyxBQUNWO2VBQUEs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QixVQUFVLEFBQ3hCO1lBQUksUUFBUSxLQUFaLEFBQWlCLEFBQ2pCO2NBQUEsQUFBTSxBQUNOO2NBQUEsQUFBTSxRQUFOLEFBQWMsS0FBSyxDQUFBLEFBQUMsWUFBWSxDQUFBLEFBQUMsVUFBVSxNQUFYLEFBQWlCLFlBQVksTUFBN0QsQUFBbUIsQUFBYSxBQUFtQyxBQUN0RTtBLEFBRUQ7Ozs7OzhCLEFBSUEsNkNBQWtCLEFBQ2Q7ZUFBTyxLQUFBLEFBQUssV0FBVyxLQUFBLEFBQUssV0FBTCxBQUFnQixTQUF2QyxBQUFPLEFBQXlDLEFBQ25EO0E7OzhCLEFBQ0QsaUNBQVksQUFDUjtZQUFJLFFBQVEsSUFBWixBQUFZLEFBQUksQUFDaEI7YUFBQSxBQUFLLFdBQUwsQUFBZ0IsS0FBaEIsQUFBcUIsQUFDckI7ZUFBQSxBQUFPLEFBQ1Y7QTs7OEJBQ0QsQSwrQkFBVyxBQUNQO2VBQU8sS0FBQSxBQUFLLFdBQVosQUFBTyxBQUFnQixBQUMxQjtBOzs7O3lCQWJrQixBQUNmO21CQUFjLEtBQWQsQUFBYyxBQUFLLEFBQ3RCOzs7Ozs7QUFhTDtBQUNBOzs7a0IsQUExSXFCOztBQTJJckIsU0FBQSxBQUFTLFdBQVQsQUFBb0IsT0FBcEIsQUFBMkIsU0FBUyxBQUNoQztRQUFJLFFBQVEsQ0FBWixBQUFhLEFBQ2I7U0FBSyxJQUFJLElBQVQsQUFBYSxHQUFHLElBQUksTUFBcEIsQUFBMEIsUUFBMUIsQUFBa0MsS0FBSyxBQUNuQztZQUFJLE9BQU8sTUFBWCxBQUFXLEFBQU0sQUFDakI7WUFBSSxLQUFBLEFBQUssU0FBTCxBQUFjLGNBQWMsS0FBQSxBQUFLLFNBQXJDLEFBQThDLGVBQWUsQUFDekQ7QUFDSDtBQUZELGVBRU8sQUFDSDtBQUNIO0FBQ0Q7WUFBSSxTQUFKLEFBQWEsU0FBUyxBQUNsQjttQkFBQSxBQUFPLEFBQ1Y7QUFDSjtBQUNEO1dBQU8sQ0FBUCxBQUFRLEFBQ1giLCJmaWxlIjoibGliL3RlbXBsYXRlLXZpc2l0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaWN0LCB1bnJlYWNoYWJsZSwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5leHBvcnQgY2xhc3MgU3ltYm9sVGFibGUge1xuICAgIHN0YXRpYyB0b3AoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvZ3JhbVN5bWJvbFRhYmxlKCk7XG4gICAgfVxuICAgIGNoaWxkKGxvY2Fscykge1xuICAgICAgICBsZXQgc3ltYm9scyA9IGxvY2Fscy5tYXAobmFtZSA9PiB0aGlzLmFsbG9jYXRlKG5hbWUpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja1N5bWJvbFRhYmxlKHRoaXMsIGxvY2Fscywgc3ltYm9scyk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFByb2dyYW1TeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5zeW1ib2xzID0gW107XG4gICAgICAgIHRoaXMuc2l6ZSA9IDE7XG4gICAgICAgIHRoaXMubmFtZWQgPSBkaWN0KCk7XG4gICAgICAgIHRoaXMuYmxvY2tzID0gZGljdCgpO1xuICAgIH1cbiAgICBoYXMoX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQoX25hbWUpIHtcbiAgICAgICAgdGhyb3cgdW5yZWFjaGFibGUoKTtcbiAgICB9XG4gICAgZ2V0TG9jYWxzTWFwKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGdldEV2YWxJbmZvKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGFsbG9jYXRlTmFtZWQobmFtZSkge1xuICAgICAgICBsZXQgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdO1xuICAgICAgICBpZiAoIW5hbWVkKSB7XG4gICAgICAgICAgICBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGBAJHtuYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lZDtcbiAgICB9XG4gICAgYWxsb2NhdGVCbG9jayhuYW1lKSB7XG4gICAgICAgIGxldCBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdO1xuICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgJiR7bmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmxvY2s7XG4gICAgfVxuICAgIGFsbG9jYXRlKGlkZW50aWZpZXIpIHtcbiAgICAgICAgdGhpcy5zeW1ib2xzLnB1c2goaWRlbnRpZmllcik7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemUrKztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQmxvY2tTeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIHN5bWJvbHMsIHNsb3RzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnN5bWJvbHMgPSBzeW1ib2xzO1xuICAgICAgICB0aGlzLnNsb3RzID0gc2xvdHM7XG4gICAgfVxuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKSAhPT0gLTEgfHwgdGhpcy5wYXJlbnQuaGFzKG5hbWUpO1xuICAgIH1cbiAgICBnZXQobmFtZSkge1xuICAgICAgICBsZXQgc2xvdCA9IHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpO1xuICAgICAgICByZXR1cm4gc2xvdCA9PT0gLTEgPyB0aGlzLnBhcmVudC5nZXQobmFtZSkgOiB0aGlzLnNsb3RzW3Nsb3RdO1xuICAgIH1cbiAgICBnZXRMb2NhbHNNYXAoKSB7XG4gICAgICAgIGxldCBkaWN0ID0gdGhpcy5wYXJlbnQuZ2V0TG9jYWxzTWFwKCk7XG4gICAgICAgIHRoaXMuc3ltYm9scy5mb3JFYWNoKHN5bWJvbCA9PiBkaWN0W3N5bWJvbF0gPSB0aGlzLmdldChzeW1ib2wpKTtcbiAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgfVxuICAgIGdldEV2YWxJbmZvKCkge1xuICAgICAgICBsZXQgbG9jYWxzID0gdGhpcy5nZXRMb2NhbHNNYXAoKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGxvY2FscykubWFwKHN5bWJvbCA9PiBsb2NhbHNbc3ltYm9sXSk7XG4gICAgfVxuICAgIGFsbG9jYXRlTmFtZWQobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVOYW1lZChuYW1lKTtcbiAgICB9XG4gICAgYWxsb2NhdGVCbG9jayhuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZUJsb2NrKG5hbWUpO1xuICAgIH1cbiAgICBhbGxvY2F0ZShpZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZShpZGVudGlmaWVyKTtcbiAgICB9XG59XG4vKipcbiAqIFRha2VzIGluIGFuIEFTVCBhbmQgb3V0cHV0cyBhIGxpc3Qgb2YgYWN0aW9ucyB0byBiZSBjb25zdW1lZFxuICogYnkgYSBjb21waWxlci4gRm9yIGV4YW1wbGUsIHRoZSB0ZW1wbGF0ZVxuICpcbiAqICAgICBmb297e2Jhcn19PGRpdj5iYXo8L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAzXV0sXG4gKiAgICAgIFsnbXVzdGFjaGUnLCBbbXVzdGFjaGVOb2RlLCAxLCAzXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDMsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhpcyB2aXNpdG9yIHdhbGtzIHRoZSBBU1QgZGVwdGggZmlyc3QgYW5kIGJhY2t3YXJkcy4gQXNcbiAqIGEgcmVzdWx0IHRoZSBib3R0b20tbW9zdCBjaGlsZCB0ZW1wbGF0ZSB3aWxsIGFwcGVhciBhdCB0aGVcbiAqIHRvcCBvZiB0aGUgYWN0aW9ucyBsaXN0IHdoZXJlYXMgdGhlIHJvb3QgdGVtcGxhdGUgd2lsbCBhcHBlYXJcbiAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QuIEZvciBleGFtcGxlLFxuICpcbiAqICAgICA8ZGl2Pnt7I2lmfX1mb297e2Vsc2V9fWJhcjxiPjwvYj57ey9pZn19PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMiwgMF1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyLCAwXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAyXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDEsIDFdXSxcbiAqICAgICAgWydibG9jaycsIFtibG9ja05vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgaXMgbWFpbnRhaW5lZCBieSBhIHN0YWNrIG9mIGZyYW1lcy5cbiAqIFdoZW5ldmVyIGEgbm9kZSB3aXRoIGNoaWxkcmVuIGlzIGVudGVyZWQgKGVpdGhlciBhIFByb2dyYW1Ob2RlXG4gKiBvciBhbiBFbGVtZW50Tm9kZSkgYSBmcmFtZSBpcyBwdXNoZWQgb250byB0aGUgc3RhY2suIFRoZSBmcmFtZVxuICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgb2YgdGhhdFxuICogbm9kZS4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAtIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoaWxkIG5vZGUgYmVpbmcgdmlzaXRlZFxuICogICAtIHRoZSBudW1iZXIgb2YgbXVzdGFjaGVzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGNoaWxkIG5vZGVzXG4gKiAgIC0gdGhlIGxpc3Qgb2YgYWN0aW9ucyBnZW5lcmF0ZWQgYnkgaXRzIGNoaWxkIG5vZGVzXG4gKi9cbmNsYXNzIEZyYW1lIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wYXJlbnROb2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuY2hpbGRJbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMuY2hpbGRDb3VudCA9IG51bGw7XG4gICAgICAgIHRoaXMuY2hpbGRUZW1wbGF0ZUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5tdXN0YWNoZUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuYmxhbmtDaGlsZFRleHROb2RlcyA9IG51bGw7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IG51bGw7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5mcmFtZVN0YWNrID0gW107XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnByb2dyYW1EZXB0aCA9IC0xO1xuICAgIH1cbiAgICB2aXNpdChub2RlKSB7XG4gICAgICAgIHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgICB9XG4gICAgLy8gVHJhdmVyc2FsIG1ldGhvZHNcbiAgICBQcm9ncmFtKHByb2dyYW0pIHtcbiAgICAgICAgdGhpcy5wcm9ncmFtRGVwdGgrKztcbiAgICAgICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgICAgICAgbGV0IHByb2dyYW1GcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG4gICAgICAgIGlmICghcGFyZW50RnJhbWUpIHtcbiAgICAgICAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IFN5bWJvbFRhYmxlLnRvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scy5jaGlsZChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RhcnRUeXBlLCBlbmRUeXBlO1xuICAgICAgICBpZiAodGhpcy5wcm9ncmFtRGVwdGggPT09IDApIHtcbiAgICAgICAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydFByb2dyYW0nO1xuICAgICAgICAgICAgZW5kVHlwZSA9ICdlbmRQcm9ncmFtJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydEJsb2NrJztcbiAgICAgICAgICAgIGVuZFR5cGUgPSAnZW5kQmxvY2snO1xuICAgICAgICB9XG4gICAgICAgIHByb2dyYW1GcmFtZS5wYXJlbnROb2RlID0gcHJvZ3JhbTtcbiAgICAgICAgcHJvZ3JhbUZyYW1lLmNoaWxkcmVuID0gcHJvZ3JhbS5ib2R5O1xuICAgICAgICBwcm9ncmFtRnJhbWUuY2hpbGRDb3VudCA9IHByb2dyYW0uYm9keS5sZW5ndGg7XG4gICAgICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW2VuZFR5cGUsIFtwcm9ncmFtLCB0aGlzLnByb2dyYW1EZXB0aF1dKTtcbiAgICAgICAgcHJvZ3JhbUZyYW1lLnN5bWJvbHMgPSBwcm9ncmFtWydzeW1ib2xzJ107XG4gICAgICAgIGZvciAobGV0IGkgPSBwcm9ncmFtLmJvZHkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHByb2dyYW1GcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgICAgICAgIHRoaXMudmlzaXQocHJvZ3JhbS5ib2R5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtzdGFydFR5cGUsIFtwcm9ncmFtLCBwcm9ncmFtRnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50LCBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKCldXSk7XG4gICAgICAgIHRoaXMucG9wRnJhbWUoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtRGVwdGgtLTtcbiAgICAgICAgLy8gUHVzaCB0aGUgY29tcGxldGVkIHRlbXBsYXRlIGludG8gdGhlIGdsb2JhbCBhY3Rpb25zIGxpc3RcbiAgICAgICAgaWYgKHBhcmVudEZyYW1lKSB7XG4gICAgICAgICAgICBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5wcm9ncmFtRnJhbWUuYWN0aW9ucy5yZXZlcnNlKCkpO1xuICAgIH1cbiAgICBFbGVtZW50Tm9kZShlbGVtZW50KSB7XG4gICAgICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgICAgICBsZXQgZWxlbWVudEZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcbiAgICAgICAgZWxlbWVudEZyYW1lLnBhcmVudE5vZGUgPSBlbGVtZW50O1xuICAgICAgICBlbGVtZW50RnJhbWUuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICBlbGVtZW50RnJhbWUuY2hpbGRDb3VudCA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCArPSBlbGVtZW50Lm1vZGlmaWVycy5sZW5ndGg7XG4gICAgICAgIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgICAgIGVsZW1lbnRGcmFtZS5zeW1ib2xzID0gZWxlbWVudFsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scy5jaGlsZChlbGVtZW50LmJsb2NrUGFyYW1zKTtcbiAgICAgICAgbGV0IGFjdGlvbkFyZ3MgPSBbZWxlbWVudCwgcGFyZW50RnJhbWUuY2hpbGRJbmRleCwgcGFyZW50RnJhbWUuY2hpbGRDb3VudF07XG4gICAgICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2goWydjbG9zZUVsZW1lbnQnLCBhY3Rpb25BcmdzXSk7XG4gICAgICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgZWxlbWVudEZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgICAgICAgdGhpcy52aXNpdChlbGVtZW50LmNoaWxkcmVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3BlbiA9IFsnb3BlbkVsZW1lbnQnLCBbLi4uYWN0aW9uQXJncywgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQsIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKV1dO1xuICAgICAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKG9wZW4pO1xuICAgICAgICB0aGlzLnBvcEZyYW1lKCk7XG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgZWxlbWVudCdzIGZyYW1lIHN0YXRlIHRvIHRoZSBwYXJlbnQgZnJhbWVcbiAgICAgICAgaWYgKGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgcGFyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCArPSBlbGVtZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50O1xuICAgICAgICBwYXJlbnRGcmFtZS5hY3Rpb25zLnB1c2goLi4uZWxlbWVudEZyYW1lLmFjdGlvbnMpO1xuICAgIH1cbiAgICBBdHRyTm9kZShhdHRyKSB7XG4gICAgICAgIGlmIChhdHRyLnZhbHVlLnR5cGUgIT09ICdUZXh0Tm9kZScpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFRleHROb2RlKHRleHQpIHtcbiAgICAgICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgICAgIGlmICh0ZXh0LmNoYXJzID09PSAnJykge1xuICAgICAgICAgICAgZnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5wdXNoKGRvbUluZGV4T2YoZnJhbWUuY2hpbGRyZW4sIHRleHQpKTtcbiAgICAgICAgfVxuICAgICAgICBmcmFtZS5hY3Rpb25zLnB1c2goWyd0ZXh0JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSk7XG4gICAgfVxuXG4gICAgQmxvY2tTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICAgICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgICAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydibG9jaycsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0pO1xuICAgICAgICBpZiAobm9kZS5pbnZlcnNlKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0KG5vZGUuaW52ZXJzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucHJvZ3JhbSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdChub2RlLnByb2dyYW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgUGFydGlhbFN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgICAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSk7XG4gICAgfVxuXG4gICAgQ29tbWVudFN0YXRlbWVudCh0ZXh0KSB7XG4gICAgICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgICAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydjb21tZW50JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSk7XG4gICAgfVxuXG4gICAgTXVzdGFjaGVDb21tZW50U3RhdGVtZW50KCkge1xuICAgICAgICAvLyBJbnRlbnRpb25hbCBlbXB0eTogSGFuZGxlYmFycyBjb21tZW50cyBzaG91bGQgbm90IGFmZmVjdCBvdXRwdXQuXG4gICAgfVxuXG4gICAgTXVzdGFjaGVTdGF0ZW1lbnQobXVzdGFjaGUpIHtcbiAgICAgICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICAgICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbXVzdGFjaGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSk7XG4gICAgfVxuXG4gICAgLy8gRnJhbWUgaGVscGVyc1xuICAgIGdldCBjdXJyZW50RnJhbWUoKSB7XG4gICAgICAgIHJldHVybiBleHBlY3QodGhpcy5nZXRDdXJyZW50RnJhbWUoKSwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgZnJhbWVcIik7XG4gICAgfVxuICAgIGdldEN1cnJlbnRGcmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFja1t0aGlzLmZyYW1lU3RhY2subGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHB1c2hGcmFtZSgpIHtcbiAgICAgICAgbGV0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgICBwb3BGcmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgICB9XG59XG4vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBgZG9tTm9kZWAgaW4gdGhlIGBub2Rlc2AgYXJyYXksIHNraXBwaW5nXG4vLyBvdmVyIGFueSBub2RlcyB3aGljaCBkbyBub3QgcmVwcmVzZW50IERPTSBub2Rlcy5cbmZ1bmN0aW9uIGRvbUluZGV4T2Yobm9kZXMsIGRvbU5vZGUpIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGlmIChub2RlLnR5cGUgIT09ICdUZXh0Tm9kZScgJiYgbm9kZS50eXBlICE9PSAnRWxlbWVudE5vZGUnKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59Il19

@@ -18,2 +18,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7d0JBQStCLEFBQWEsVUFBRSxBQUFZLFNBQ3hELEFBQUcsQUFBQztTQUFDLElBQUksQUFBQyxJQUFDLEFBQUMsR0FBRSxBQUFDLElBQUMsQUFBTyxRQUFDLEFBQU0sUUFBRSxBQUFDLElBQUMsQUFBQyxHQUFFLEFBQUMsQUFBRSxLQUFFLEFBQUMsQUFDekM7WUFBSSxBQUFNLFNBQUcsQUFBTyxRQUFDLEFBQUMsQUFBQyxHQUFDLEFBQUMsQUFBQyxBQUFDLEFBQzNCO1lBQUksQUFBTSxTQUFHLEFBQU8sUUFBQyxBQUFDLEFBQUMsR0FBQyxBQUFDLEFBQUMsQUFBQyxBQUMzQixBQUFFLEFBQUM7WUFBQyxBQUFNLEFBQUMsUUFBQyxBQUFDLEFBQ1gsQUFBUTtxQkFBQyxBQUFNLEFBQUMsUUFBQyxBQUFLLE1BQUMsQUFBUSxVQUFFLEFBQU0sQUFBQyxBQUFDLEFBQzNDLEFBQUMsQUFBQyxBQUFJO2VBQUMsQUFBQyxBQUNOLEFBQVE7cUJBQUMsQUFBTSxBQUFDLFFBQUMsQUFBSSxLQUFDLEFBQVEsQUFBQyxBQUFDLEFBQ2xDLEFBQUMsQUFDSDtBQUFDLEFBQ0g7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzT3Bjb2Rlcyhjb21waWxlcjogYW55LCBvcGNvZGVzOiBhbnkpIHtcbiAgZm9yIChsZXQgaT0wLCBsPW9wY29kZXMubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgIGxldCBtZXRob2QgPSBvcGNvZGVzW2ldWzBdO1xuICAgIGxldCBwYXJhbXMgPSBvcGNvZGVzW2ldWzFdO1xuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIGNvbXBpbGVyW21ldGhvZF0uYXBwbHkoY29tcGlsZXIsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBpbGVyW21ldGhvZF0uY2FsbChjb21waWxlcik7XG4gICAgfVxuICB9XG59Il19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJwcm9jZXNzT3Bjb2RlcyIsImNvbXBpbGVyIiwib3Bjb2RlcyIsImkiLCJsIiwibGVuZ3RoIiwibWV0aG9kIiwicGFyYW1zIiwiYXBwbHkiLCJjYWxsIl0sIm1hcHBpbmdzIjoiOzs7OztRQUFPLEFBQVM7QUFBVCx3QkFBQSxBQUF3QixVQUF4QixBQUFrQyxTQUFTLEFBQzlDO1NBQUssSUFBSSxJQUFKLEFBQVEsR0FBRyxJQUFJLFFBQXBCLEFBQTRCLFFBQVEsSUFBcEMsQUFBd0MsR0FBeEMsQUFBMkMsS0FBSyxBQUM1QztZQUFJLFNBQVMsUUFBQSxBQUFRLEdBQXJCLEFBQWEsQUFBVyxBQUN4QjtZQUFJLFNBQVMsUUFBQSxBQUFRLEdBQXJCLEFBQWEsQUFBVyxBQUN4QjtZQUFBLEFBQUksUUFBUSxBQUNSO3FCQUFBLEFBQVMsUUFBVCxBQUFpQixNQUFqQixBQUF1QixVQUF2QixBQUFpQyxBQUNwQztBQUZELGVBRU8sQUFDSDtxQkFBQSxBQUFTLFFBQVQsQUFBaUIsS0FBakIsQUFBc0IsQUFDekI7QUFDSjtBQUNKIiwiZmlsZSI6ImxpYi91dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzT3Bjb2Rlcyhjb21waWxlciwgb3Bjb2Rlcykge1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gb3Bjb2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9IG9wY29kZXNbaV1bMF07XG4gICAgICAgIGxldCBwYXJhbXMgPSBvcGNvZGVzW2ldWzFdO1xuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBjb21waWxlclttZXRob2RdLmFwcGx5KGNvbXBpbGVyLCBwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcGlsZXJbbWV0aG9kXS5jYWxsKGNvbXBpbGVyKTtcbiAgICAgICAgfVxuICAgIH1cbn0iXX0=
export { precompile } from "./lib/compiler";
// exported only for tests
export { default as TemplateVisitor } from './lib/template-visitor';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsMEJBQTBCO0FBQzFCLE9BQU8sRUFBRSxPQUFPLElBQUksZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBwcmVjb21waWxlLCBQcmVjb21waWxlT3B0aW9uc1xufSBmcm9tIFwiLi9saWIvY29tcGlsZXJcIjtcblxuLy8gZXhwb3J0ZWQgb25seSBmb3IgdGVzdHNcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVtcGxhdGVWaXNpdG9yIH0gZnJvbSAnLi9saWIvdGVtcGxhdGUtdmlzaXRvcic7XG4iXX0=
export { default as TemplateVisitor } from './lib/template-visitor';

@@ -19,4 +19,3 @@ import { preprocess } from "@glimmer/syntax";

idFn("test");
}
catch (e) {
} catch (e) {
idFn = () => null;

@@ -45,3 +44,2 @@ }

return JSON.stringify(templateJSONObject);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxnQkFBb0MsTUFBTSxxQkFBcUIsQ0FBQztBQWN2RSxNQUFNLFNBQVMsR0FBdUIsQ0FBQztJQUNyQyxJQUFJLElBQWtCLENBQUM7SUFDdkIsTUFBTSxDQUFDO1FBQ0wsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1YsRUFBRSxDQUFDLENBQUMsT0FBTyxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDO29CQUNILHVDQUF1QztvQkFDdkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqQyxzQ0FBc0M7b0JBQ3RDLElBQUksR0FBRyxHQUFHO3dCQUNSLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUN6QixxQ0FBcUM7d0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlDLENBQUMsQ0FBQztvQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2YsQ0FBQztnQkFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNYLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQztnQkFDcEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFpQkwsTUFBTSxxQkFBcUIsTUFBYyxFQUFFLE9BQXlDO0lBQ2xGLElBQUksSUFBSSxHQUFHLE9BQU8sSUFBSTtRQUNwQixFQUFFLEVBQUUsU0FBUyxFQUFFO1FBQ2YsSUFBSSxFQUFFLEVBQUU7S0FDaUMsQ0FBQztJQUM1QyxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25DLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQ2xDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDL0MsSUFBSSxrQkFBa0IsR0FBa0Q7UUFDdEUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUMxQyxLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJO0tBQ0wsQ0FBQztJQUVGLHFCQUFxQjtJQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcmVwcm9jZXNzIH0gZnJvbSBcIkBnbGltbWVyL3N5bnRheFwiO1xuaW1wb3J0IFRlbXBsYXRlQ29tcGlsZXIsIHsgQ29tcGlsZU9wdGlvbnMgfSBmcm9tIFwiLi90ZW1wbGF0ZS1jb21waWxlclwiO1xuaW1wb3J0IHsgU2VyaWFsaXplZFRlbXBsYXRlV2l0aExhenlCbG9jaywgVGVtcGxhdGVKYXZhc2NyaXB0LCBUZW1wbGF0ZU1ldGEgfSBmcm9tIFwiQGdsaW1tZXIvd2lyZS1mb3JtYXRcIjtcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gXCJAZ2xpbW1lci9pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVJZEZuIHtcbiAgKHNyYzogc3RyaW5nKTogT3B0aW9uPHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlY29tcGlsZU9wdGlvbnM8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4gZXh0ZW5kcyBDb21waWxlT3B0aW9uczxUPiB7XG4gIGlkPzogVGVtcGxhdGVJZEZuO1xufVxuXG5kZWNsYXJlIGZ1bmN0aW9uIHJlcXVpcmUoaWQ6IHN0cmluZyk6IGFueTtcblxuY29uc3QgZGVmYXVsdElkOiAoKSA9PiBUZW1wbGF0ZUlkRm4gPSAoKCkgPT4ge1xuICBsZXQgaWRGbjogVGVtcGxhdGVJZEZuO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmICghaWRGbikge1xuICAgICAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLyogdHNsaW50OmRpc2FibGU6bm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICAgICAgY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgICAgICAgLyogdHNsaW50OmVuYWJsZTpuby1yZXF1aXJlLWltcG9ydHMgKi9cbiAgICAgICAgICBpZEZuID0gc3JjID0+IHtcbiAgICAgICAgICAgIGxldCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKTtcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKHNyYywgJ3V0ZjgnKTtcbiAgICAgICAgICAgIC8vIHRyaW0gdG8gNiBieXRlcyBvZiBkYXRhICgyXjQ4IC0gMSlcbiAgICAgICAgICAgIHJldHVybiBoYXNoLmRpZ2VzdCgnYmFzZTY0Jykuc3Vic3RyaW5nKDAsOCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZEZuKFwidGVzdFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlkRm4gPSAoKSA9PiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZEZuO1xuICB9O1xufSkoKTtcblxuLypcbiAqIENvbXBpbGUgYSBzdHJpbmcgaW50byBhIHRlbXBsYXRlIGphdmFzY3JpcHQgc3RyaW5nLlxuICpcbiAqIEV4YW1wbGUgdXNhZ2U6XG4gKiAgICAgaW1wb3J0IHsgcHJlY29tcGlsZSB9IGZyb20gJ0BnbGltbWVyL2NvbXBpbGVyJztcbiAqICAgICBpbXBvcnQgeyB0ZW1wbGF0ZUZhY3RvcnkgfSBmcm9tICdnbGltZXItcnVudGltZSc7XG4gKiAgICAgbGV0IHRlbXBsYXRlSnMgPSBwcmVjb21waWxlKFwiSG93ZHkge3tuYW1lfX1cIik7XG4gKiAgICAgbGV0IGZhY3RvcnkgPSB0ZW1wbGF0ZUZhY3RvcnkobmV3IEZ1bmN0aW9uKFwicmV0dXJuIFwiICsgdGVtcGxhdGVKcykoKSk7XG4gKiAgICAgbGV0IHRlbXBsYXRlID0gZmFjdG9yeS5jcmVhdGUoZW52KTtcbiAqXG4gKiBAbWV0aG9kIHByZWNvbXBpbGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgYSBHbGltbWVyIHRlbXBsYXRlIHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfSBhIHRlbXBsYXRlIGphdmFzY3JpcHQgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KHN0cmluZzogc3RyaW5nLCBvcHRpb25zPzogUHJlY29tcGlsZU9wdGlvbnM8VD4pOiBUZW1wbGF0ZUphdmFzY3JpcHQ7XG5leHBvcnQgZnVuY3Rpb24gcHJlY29tcGlsZShzdHJpbmc6IHN0cmluZywgb3B0aW9ucz86IFByZWNvbXBpbGVPcHRpb25zPFRlbXBsYXRlTWV0YT4pOiBUZW1wbGF0ZUphdmFzY3JpcHQge1xuICBsZXQgb3B0cyA9IG9wdGlvbnMgfHwge1xuICAgIGlkOiBkZWZhdWx0SWQoKSxcbiAgICBtZXRhOiB7fVxuICB9IGFzIGFueSBhcyBQcmVjb21waWxlT3B0aW9uczxUZW1wbGF0ZU1ldGE+O1xuICBsZXQgYXN0ID0gcHJlcHJvY2VzcyhzdHJpbmcsIG9wdHMpO1xuICBsZXQgeyBibG9jaywgbWV0YSB9ID0gVGVtcGxhdGVDb21waWxlci5jb21waWxlKG9wdHMsIGFzdCk7XG4gIGxldCBpZEZuID0gb3B0cy5pZCB8fCBkZWZhdWx0SWQoKTtcbiAgbGV0IGJsb2NrSlNPTiA9IEpTT04uc3RyaW5naWZ5KGJsb2NrLnRvSlNPTigpKTtcbiAgbGV0IHRlbXBsYXRlSlNPTk9iamVjdDogU2VyaWFsaXplZFRlbXBsYXRlV2l0aExhenlCbG9jazxUZW1wbGF0ZU1ldGE+ID0ge1xuICAgIGlkOiBpZEZuKEpTT04uc3RyaW5naWZ5KG1ldGEpICsgYmxvY2tKU09OKSxcbiAgICBibG9jazogYmxvY2tKU09OLFxuICAgIG1ldGFcbiAgfTtcblxuICAvLyBKU09OIGlzIGphdmFzY3JpcHRcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlSlNPTk9iamVjdCk7XG59XG4iXX0=
}

@@ -1,2 +0,3 @@

import { Stack, DictSet } from "@glimmer/util";
import { assert } from "@glimmer/util";
import { Stack, DictSet, expect } from "@glimmer/util";
import { Statements, Ops } from '@glimmer/wire-format';

@@ -44,16 +45,12 @@ export class Block {

this.prelude.push(statement);
}
else if (this.inParams) {
} else if (this.inParams) {
if (Statements.isFlushElement(statement)) {
this.inParams = false;
this.head.push(statement);
}
else if (Statements.isInElementHead(statement)) {
} else if (Statements.isInElementHead(statement)) {
this.head.push(statement);
}
else {
} else {
throw new Error('Compile Error: only parameters allowed before flush-element');
}
}
else {
} else {
this.statements.push(statement);

@@ -85,17 +82,12 @@ }

this.inParams = false;
}
else if (Statements.isArgument(statement)) {
} else if (Statements.isArgument(statement)) {
this.arguments.push(statement);
}
else if (Statements.isAttribute(statement)) {
} else if (Statements.isAttribute(statement)) {
this.attributes.push(statement);
}
else if (Statements.isModifier(statement)) {
} else if (Statements.isModifier(statement)) {
throw new Error('Compile Error: Element modifiers are not allowed in components');
}
else {
} else {
throw new Error('Compile Error: only parameters allowed before flush-element');
}
}
else {
} else {
this.statements.push(statement);

@@ -108,10 +100,6 @@ }

let values = args.map(arg => arg[2]);
return [
this.attributes,
[keys, values],
{
statements: this.statements,
parameters: this.table.slots
}
];
return [this.attributes, [keys, values], {
statements: this.statements,
parameters: this.table.slots
}];
}

@@ -143,3 +131,3 @@ }

get currentBlock() {
return this.blocks.current;
return expect(this.blocks.current, 'Expected a block on the stack');
}

@@ -168,4 +156,3 @@ process() {

}
endProgram() {
}
endProgram() {}
/// Statements

@@ -190,2 +177,4 @@ text(content) {

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]]);

@@ -197,7 +186,5 @@ }

this.startComponent(element);
}
else if (element.blockParams.length > 0) {
} else if (element.blockParams.length > 0) {
throw new Error(`Compile Error: <${element.tag}> is not a component and doesn't support block parameters`);
}
else {
} else {
this.push([Ops.OpenElement, tag]);

@@ -214,4 +201,3 @@ }

this.push([Ops.Component, tag, attrs, args, block]);
}
else {
} else {
this.push([Ops.CloseElement]);

@@ -263,4 +249,3 @@ }

this.pushValue([Ops.Undefined]);
}
else {
} else {
this.pushValue(value);

@@ -293,2 +278,3 @@ }

let component = this.blocks.pop();
assert(component instanceof ComponentBlock, "Compiler bug: endComponent() should end a component");
return component.toJSON();

@@ -304,2 +290,3 @@ }

prepareObject(size) {
assert(this.values.length >= size, `Expected ${size} values on the stack, found ${this.values.length}`);
let keys = new Array(size);

@@ -324,5 +311,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,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';

@@ -25,3 +26,3 @@ function isTrustedValue(value) {

get symbols() {
return this.symbolStack.current;
return expect(this.symbolStack.current, 'Expected a symbol table on the stack');
}

@@ -84,22 +85,16 @@ process(actions) {

this.opcode('staticArg', action, name);
}
else if (action.value.type === 'MustacheStatement') {
} else if (action.value.type === 'MustacheStatement') {
this.opcode('dynamicArg', action, name);
}
else {
} else {
this.opcode('dynamicArg', action, name);
}
}
else {
} else {
let isTrusting = isTrustedValue(value);
if (isStatic) {
this.opcode('staticAttr', action, name, namespace);
}
else if (isTrusting) {
} else if (isTrusting) {
this.opcode('trustingAttr', action, name, namespace);
}
else if (action.value.type === 'MustacheStatement') {
} else if (action.value.type === 'MustacheStatement') {
this.opcode('dynamicAttr', action, name);
}
else {
} else {
this.opcode('dynamicAttr', action, name, namespace);

@@ -120,16 +115,12 @@ }

this.opcode('append', action, !action.escaped);
}
else if (isYield(path)) {
} else if (isYield(path)) {
let to = assertValidYield(action);
this.yield(to, action);
}
else if (isPartial(path)) {
} else if (isPartial(path)) {
let params = assertValidPartial(action);
this.partial(params, action);
}
else if (isDebugger(path)) {
} else if (isDebugger(path)) {
assertValidDebuggerUsage(action);
this.debugger('debugger', action);
}
else {
} else {
this.mustacheExpression(action);

@@ -155,24 +146,17 @@ this.opcode('append', action, !action.escaped);

this.opcode('literal', expr, path.value);
}
else if (isBuiltInHelper(path)) {
} else if (isBuiltInHelper(path)) {
this.builtInHelper(expr);
}
else if (isArg(path)) {
} else if (isArg(path)) {
this.arg([path]);
}
else if (isHelperInvocation(expr)) {
} else if (isHelperInvocation(expr)) {
this.prepareHelper(expr);
this.opcode('helper', expr, path.parts[0]);
}
else if (path.this) {
} else if (path.this) {
this.opcode('get', expr, 0, path.parts);
}
else if (isLocal(path, this.symbols)) {
} else if (isLocal(path, this.symbols)) {
let [head, ...parts] = path.parts;
this.opcode('get', expr, this.symbols.get(head), parts);
}
else if (isSimplePath(path)) {
} else if (isSimplePath(path)) {
this.opcode('unknown', expr, path.parts[0]);
}
else {
} else {
this.opcode('maybeLocal', expr, path.parts);

@@ -204,4 +188,3 @@ }

this.hasBlock(name, expr);
}
else if (isHasBlockParams(path)) {
} else if (isHasBlockParams(path)) {
let name = assertValidHasBlockUsage(expr.path.original, expr);

@@ -215,4 +198,3 @@ this.hasBlockParams(name, expr);

this.builtInHelper(expr);
}
else {
} else {
this.prepareHelper(expr);

@@ -225,4 +207,3 @@ this.opcode('helper', expr, expr.path.parts[0]);

this.arg([expr]);
}
else {
} else {
let { symbols } = this;

@@ -232,7 +213,5 @@ let [head] = expr.parts;

this.opcode('get', expr, 0, expr.parts);
}
else if (symbols.has(head)) {
} else if (symbols.has(head)) {
this.opcode('get', expr, symbols.get(head), expr.parts.slice(1));
}
else {
} else {
this.opcode('get', expr, 0, expr.parts);

@@ -278,2 +257,3 @@ }

let param = params[i];
assert(this[param.type], `Unimplemented ${param.type} on TemplateCompiler`);
this[param.type](param);

@@ -291,2 +271,3 @@ }

let { key, value } = pairs[i];
assert(this[value.type], `Unimplemented ${value.type} on TemplateCompiler`);
this[value.type](value);

@@ -317,4 +298,3 @@ this.opcode('literal', null, key);

this.attributeMustache([part]);
}
else if (part.type === 'TextNode') {
} else if (part.type === 'TextNode') {
this.opcode('literal', null, part.chars);

@@ -338,4 +318,3 @@ }

function isHelperInvocation(mustache) {
return (mustache.params && mustache.params.length > 0) ||
(mustache.hash && mustache.hash.pairs.length > 0);
return mustache.params && mustache.params.length > 0 || mustache.hash && mustache.hash.pairs.length > 0;
}

@@ -376,12 +355,9 @@ function isSimplePath({ parts }) {

let pairs = hash.pairs;
if ((pairs.length === 1 && pairs[0].key !== 'to') || pairs.length > 1) {
if (pairs.length === 1 && pairs[0].key !== 'to' || pairs.length > 1) {
throw new Error(`yield only takes a single named argument: 'to'`);
}
else if (pairs.length === 1 && pairs[0].value.type !== 'StringLiteral') {
} else if (pairs.length === 1 && pairs[0].value.type !== 'StringLiteral') {
throw new Error(`you can only yield to a literal value`);
}
else if (pairs.length === 0) {
} else if (pairs.length === 0) {
return 'default';
}
else {
} else {
return pairs[0].value.value;

@@ -393,7 +369,5 @@ }

throw new Error(`Partial found with no arguments. You must specify a template name. (on line ${loc.start.line})`);
}
else if (hash && hash.pairs.length > 0) {
} else if (hash && hash.pairs.length > 0) {
throw new Error(`partial does not take any named arguments (on line ${loc.start.line})`);
}
else if (!escaped) {
} else if (!escaped) {
throw new Error(`{{{partial ...}}} is not supported, please use {{partial ...}} instead (on line ${loc.start.line})`);

@@ -409,13 +383,10 @@ }

return 'default';
}
else if (params.length === 1) {
} else if (params.length === 1) {
let param = params[0];
if (param.type === 'StringLiteral') {
return param.value;
}
else {
} else {
throw new Error(`you can only yield to a literal value (on line ${loc.start.line})`);
}
}
else {
} else {
throw new Error(`${type} only takes a single positional argument (on line ${loc.start.line})`);

@@ -430,7 +401,5 @@ }

return 'default';
}
else {
} else {
throw new Error(`debugger does not take any positional arguments`);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGVBQXdDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUUsT0FBTyxrQkFBZ0MsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhELE9BQU8sRUFBTyxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU1qRCx3QkFBd0IsS0FBVTtJQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTztJQWlCWixZQUFZLE9BQTBCO1FBTjlCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixnQkFBVyxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7UUFDdkMsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUcxQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQWxCRCxNQUFNLENBQUMsT0FBTyxDQUF5QixPQUEwQixFQUFFLEdBQWdCO1FBQ2pGLElBQUksZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDNUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQixJQUFJLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUksT0FBTyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQWFELElBQUksT0FBTztRQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQWlCO1FBQ3ZCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztZQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxzQkFBc0IsQ0FBQyxDQUFDO1lBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsSUFBSSxDQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBc0I7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQXNCO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBaUI7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUF5QjtRQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQW9CO1FBRXJDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFvQjtRQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFpQjtRQUNoQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUU3QixJQUFJLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNCLFlBQVk7WUFDWixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksVUFBVSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV2QyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFpQztRQUMvQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFeEQsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRWpDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQTBCO1FBQ3hDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFdEIsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUEsa0JBQWtCLENBQXVCO1FBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxpRUFBaUU7SUFFakUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUF1QjtRQUM5QixJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDdEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBMkI7UUFDNUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztRQUVwQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBZ0IsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQjtJQUVuQixLQUFLLENBQUMsRUFBVSxFQUFFLE1BQTZCO1FBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYSxFQUFFLE1BQTZCO1FBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZLEVBQUUsTUFBZ0I7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZLEVBQUUsTUFBZ0I7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQXlCLEVBQUUsTUFBNkI7UUFDOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWM7UUFDMUIsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztRQUNwQixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksSUFBSSxHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksSUFBSSxHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsdUVBQXVFO0lBRXZFLGFBQWEsQ0FBQyxJQUF1QjtRQUNuQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsSUFBd0I7UUFDckMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBRXhCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFBQyxJQUFJLENBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUF5QjtRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBMEI7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQXlCO1FBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUF1QjtRQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUE0QjtRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxhQUFhO0lBRWIsTUFBTSxDQUFDLElBQVMsRUFBRSxNQUFXLEVBQUUsR0FBRyxJQUFXO1FBQzNDLElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDN0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWM7UUFDMUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWxELElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRTVCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQXdCO1FBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLE1BQU0sQ0FBQztRQUNULENBQUM7UUFFRCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXJCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFjO1FBQ3hCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFdkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDO1FBQ1QsQ0FBQztRQUVELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMzQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBNEI7UUFDaEQsa0RBQWtEO1FBRWxELE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ25CLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2QsS0FBSyxtQkFBbUI7Z0JBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDZixLQUFLLGlCQUFpQjtnQkFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFtQztRQUNwRCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0MsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXBCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQTBCO1FBQ2pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQWtCO1FBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFFeEIsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxDQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsQ0FBQztJQUN6RixDQUFDO0NBQ0Y7QUFFRCw0QkFBNEIsUUFBK0I7SUFDekQsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsc0JBQXNCLEVBQUUsS0FBSyxFQUFzQjtJQUNqRCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVELGlCQUFpQixFQUFFLEtBQUssRUFBc0IsRUFBRSxPQUFvQjtJQUNsRSxNQUFNLENBQUMsT0FBTyxJQUEwQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxpQkFBaUIsSUFBd0I7SUFDdkMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDO0FBQ25DLENBQUM7QUFFRCxtQkFBbUIsSUFBd0I7SUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxvQkFBb0IsSUFBd0I7SUFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxvQkFBb0IsSUFBd0I7SUFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCwwQkFBMEIsSUFBd0I7SUFDaEQsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssa0JBQWtCLENBQUM7QUFDOUMsQ0FBQztBQUVELHlCQUF5QixJQUF3QjtJQUMvQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxlQUFlLElBQXdCO0lBQ3JDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCw0QkFBNEIsSUFBd0IsRUFBRSxHQUF1QixFQUFFLE9BQWU7SUFDNUYsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxnQ0FBZ0MsT0FBTyxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMxRyxDQUFDO0FBQ0gsQ0FBQztBQUVELDBCQUEwQixFQUFFLElBQUksRUFBeUI7SUFDdkQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUV2QixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDekUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sTUFBTSxDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUEyQixDQUFDLEtBQUssQ0FBQztJQUNyRCxDQUFDO0FBQ0gsQ0FBQztBQUVELDRCQUE0QixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBeUI7SUFDL0UsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLCtFQUErRSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRkFBbUYsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3hILENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxrQ0FBa0MsSUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQVk7SUFDN0UsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksb0NBQW9DLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQztZQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNILENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLHFEQUFxRCxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDakcsQ0FBQztBQUNILENBQUM7QUFFRCxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFnRDtJQUM5RixFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZW1wbGF0ZVZpc2l0b3IsIHsgU3ltYm9sVGFibGUsIEFjdGlvbiB9IGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIsIHsgVGVtcGxhdGUgfSBmcm9tIFwiLi9qYXZhc2NyaXB0LWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBTdGFjaywgZ2V0QXR0ck5hbWVzcGFjZSB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1ldGEgfSBmcm9tIFwiQGdsaW1tZXIvd2lyZS1mb3JtYXRcIjtcbmltcG9ydCB7IEFTVCwgaXNMaXRlcmFsIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcblxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlT3B0aW9uczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIG1ldGE6IFQ7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1c3RlZFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlLmVzY2FwZWQgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUuZXNjYXBlZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVDb21waWxlcjxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIHN0YXRpYyBjb21waWxlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+KG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+LCBhc3Q6IEFTVC5Qcm9ncmFtKTogVGVtcGxhdGU8VD4ge1xuICAgIGxldCB0ZW1wbGF0ZVZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKCk7XG4gICAgdGVtcGxhdGVWaXNpdG9yLnZpc2l0KGFzdCk7XG5cbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgVGVtcGxhdGVDb21waWxlcihvcHRpb25zKTtcbiAgICBsZXQgb3Bjb2RlcyA9IGNvbXBpbGVyLnByb2Nlc3ModGVtcGxhdGVWaXNpdG9yLmFjdGlvbnMpO1xuICAgIHJldHVybiBKYXZhU2NyaXB0Q29tcGlsZXIucHJvY2VzczxUPihvcGNvZGVzLCBhc3RbJ3N5bWJvbHMnXSwgb3B0aW9ucy5tZXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgb3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD47XG4gIHByaXZhdGUgdGVtcGxhdGVJZCA9IDA7XG4gIHByaXZhdGUgdGVtcGxhdGVJZHM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgc3ltYm9sU3RhY2sgPSBuZXcgU3RhY2s8U3ltYm9sVGFibGU+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBpbmNsdWRlTWV0YSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbXBpbGVPcHRpb25zPFQ+KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIGdldCBzeW1ib2xzKCk6IFN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xTdGFjay5jdXJyZW50O1xuICB9XG5cbiAgcHJvY2VzcyhhY3Rpb25zOiBBY3Rpb25bXSk6IEFjdGlvbltdIHtcbiAgICBhY3Rpb25zLmZvckVhY2goKFtuYW1lLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW25hbWVdKSB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCAke25hbWV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTsgfVxuICAgICAgKHRoaXNbbmFtZV0gYXMgYW55KSguLi5hcmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5vcGNvZGVzO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKHByb2dyYW06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICB0aGlzLm9wY29kZSgnc3RhcnRQcm9ncmFtJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2VuZFByb2dyYW0nLCBudWxsKTtcbiAgfVxuXG4gIHN0YXJ0QmxvY2socHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMudGVtcGxhdGVJZCsrO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMudGVtcGxhdGVJZHMucHVzaCh0aGlzLnRlbXBsYXRlSWQgLSAxKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kQmxvY2snLCBudWxsKTtcbiAgfVxuXG4gIHRleHQoW2FjdGlvbl06IFtBU1QuVGV4dE5vZGVdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3RleHQnLCBhY3Rpb24sIGFjdGlvbi5jaGFycyk7XG4gIH1cblxuICBjb21tZW50KFthY3Rpb25dOiBbQVNULkNvbW1lbnRTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2NvbW1lbnQnLCBhY3Rpb24sIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcblxuICAgIHRoaXMub3Bjb2RlKCdvcGVuRWxlbWVudCcsIGFjdGlvbiwgYWN0aW9uKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZShbYWN0aW9uLmF0dHJpYnV0ZXNbaV1dKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5tb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubW9kaWZpZXIoW2FjdGlvbi5tb2RpZmllcnNbaV1dKTtcbiAgICB9XG4gICAgdGhpcy5vcGNvZGUoJ2ZsdXNoRWxlbWVudCcsIG51bGwpO1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChhY3Rpb25bJ3N5bWJvbHMnXSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoW2FjdGlvbl06IFtBU1QuRWxlbWVudE5vZGVdKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnY2xvc2VFbGVtZW50JywgbnVsbCwgYWN0aW9uKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZShbYWN0aW9uXTogW0FTVC5BdHRyTm9kZV0pIHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gYWN0aW9uO1xuXG4gICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG5cbiAgICBsZXQgaXNTdGF0aWMgPSB0aGlzLnByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgLy8gQXJndW1lbnRzXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlzVHJ1c3RpbmcgPSBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVzdGluZykge1xuICAgICAgICB0aGlzLm9wY29kZSgndHJ1c3RpbmdBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vZGlmaWVyKFthY3Rpb25dOiBbQVNULkVsZW1lbnRNb2RpZmllclN0YXRlbWVudF0pIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoYWN0aW9uLnBhdGgsIGFjdGlvbi5sb2MsICdtb2RpZmllcicpO1xuXG4gICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG5cbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICB0aGlzLm9wY29kZSgnbW9kaWZpZXInLCBhY3Rpb24sIHBhcnRzWzBdKTtcbiAgfVxuXG4gIG11c3RhY2hlKFthY3Rpb25dOiBbQVNULk11c3RhY2hlU3RhdGVtZW50XSkge1xuICAgIGxldCB7IHBhdGggfSA9IGFjdGlvbjtcblxuICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNZaWVsZChwYXRoKSkge1xuICAgICAgbGV0IHRvID0gYXNzZXJ0VmFsaWRZaWVsZChhY3Rpb24pO1xuICAgICAgdGhpcy55aWVsZCh0bywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVidWdnZXIocGF0aCkpIHtcbiAgICAgIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShhY3Rpb24pO1xuICAgICAgdGhpcy5kZWJ1Z2dlcignZGVidWdnZXInLCBhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICB9XG4gIH1cblxuICBibG9jayhbYWN0aW9uLyosIGluZGV4LCBjb3VudCovXTogW0FTVC5CbG9ja1N0YXRlbWVudF0pIHtcbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICBsZXQgdGVtcGxhdGVJZCA9IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0c1swXSwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG5cbiAgYXJnKFtwYXRoXTogW0FTVC5QYXRoRXhwcmVzc2lvbl0pIHtcbiAgICBsZXQgeyBwYXJ0czogW2hlYWQsIC4uLnJlc3RdIH0gPSBwYXRoO1xuICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChoZWFkKTtcbiAgICB0aGlzLm9wY29kZSgnZ2V0JywgcGF0aCwgc3ltYm9sLCByZXN0KTtcbiAgfVxuXG4gIG11c3RhY2hlRXhwcmVzc2lvbihleHByOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBleHByLCBwYXRoLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzQnVpbHRJbkhlbHBlcihwYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIgYXMgQVNULkNhbGwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgfSBlbHNlIGlmIChpc0hlbHBlckludm9jYXRpb24oZXhwcikpIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICB9IGVsc2UgaWYgKHBhdGgudGhpcykge1xuICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgdGhpcy5zeW1ib2xzLmdldChoZWFkKSwgcGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgndW5rbm93bicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbWF5YmVMb2NhbCcsIGV4cHIsIHBhdGgucGFydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBTeW50YXhcblxuICB5aWVsZCh0bzogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgneWllbGQnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKHRvKSk7XG4gIH1cblxuICBkZWJ1Z2dlcihfbmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMub3Bjb2RlKCdkZWJ1Z2dlcicsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2hhc0Jsb2NrJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhuYW1lKSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2tQYXJhbXMnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIHBhcnRpYWwoX3BhcmFtczogQVNULkV4cHJlc3Npb25bXSwgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoJ3BhcnRpYWwnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5nZXRFdmFsSW5mbygpKTtcbiAgfVxuXG4gIGJ1aWx0SW5IZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgIGlmIChpc0hhc0Jsb2NrKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9jayhuYW1lLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzSGFzQmxvY2tQYXJhbXMocGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrUGFyYW1zKG5hbWUsIGV4cHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9ucywgaW52b2tlZCByZWN1cnNpdmVseSBmcm9tIHByZXBhcmVQYXJhbXMgYW5kIHByZXBhcmVIYXNoXG5cbiAgU3ViRXhwcmVzc2lvbihleHByOiBBU1QuU3ViRXhwcmVzc2lvbikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwci5wYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgZXhwci5wYXRoLnBhcnRzWzBdKTtcbiAgICB9XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbihleHByOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwci5kYXRhKSB7XG4gICAgICB0aGlzLmFyZyhbZXhwcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBzeW1ib2xzIH0gPSB0aGlzO1xuICAgICAgbGV0IFtoZWFkXSA9IGV4cHIucGFydHM7XG5cbiAgICAgIGlmIChleHByLnRoaXMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfSBlbHNlICBpZiAoc3ltYm9scy5oYXMoaGVhZCkpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIHN5bWJvbHMuZ2V0KGhlYWQpLCBleHByLnBhcnRzLnNsaWNlKDEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBleHByLnBhcnRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBTdHJpbmdMaXRlcmFsKGFjdGlvbjogQVNULlN0cmluZ0xpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBCb29sZWFuTGl0ZXJhbChhY3Rpb246IEFTVC5Cb29sZWFuTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bWJlckxpdGVyYWwoYWN0aW9uOiBBU1QuTnVtYmVyTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bGxMaXRlcmFsKGFjdGlvbjogQVNULk51bGxMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgVW5kZWZpbmVkTGl0ZXJhbChhY3Rpb246IEFTVC5VbmRlZmluZWRMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIG9wY29kZShuYW1lOiBhbnksIGFjdGlvbjogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGxldCBvcGNvZGUgPSBbbmFtZSwgLi4uYXJnc107XG4gICAgaWYgKHRoaXMuaW5jbHVkZU1ldGEgJiYgYWN0aW9uKSB7XG4gICAgICBvcGNvZGUucHVzaCh0aGlzLm1ldGEoYWN0aW9uKSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgfVxuXG4gIHByZXBhcmVIZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoZXhwci5wYXRoLCBleHByLmxvYywgJ2hlbHBlcicpO1xuXG4gICAgbGV0IHsgcGFyYW1zLCBoYXNoIH0gPSBleHByO1xuXG4gICAgdGhpcy5wcmVwYXJlSGFzaChoYXNoKTtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIHByZXBhcmVQYXJhbXMocGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdKSB7XG4gICAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBwYXJhbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBwYXJhbSA9IHBhcmFtc1tpXTtcblxuICAgICAgKHRoaXNbcGFyYW0udHlwZV0gYXMgYW55KShwYXJhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcmFtcy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUhhc2goaGFzaDogQVNULkhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gICAgaWYgKCFwYWlycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhaXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgeyBrZXksIHZhbHVlIH0gPSBwYWlyc1tpXTtcblxuICAgICAgKHRoaXNbdmFsdWUudHlwZV0gYXMgYW55KSh2YWx1ZSk7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGtleSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVPYmplY3QnLCBudWxsLCBwYWlycy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlOiBBU1QuQXR0ck5vZGVbJ3ZhbHVlJ10pIHtcbiAgICAvLyByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgaWYgdGhlIHZhbHVlIGlzIHN0YXRpY1xuXG4gICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgdmFsdWUsIHZhbHVlLmNoYXJzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdNdXN0YWNoZVN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3ZhbHVlXSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMucHJlcGFyZUNvbmNhdFBhcnRzKHZhbHVlLnBhcnRzKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2NvbmNhdCcsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVDb25jYXRQYXJ0cyhwYXJ0czogQVNULkNvbmNhdFN0YXRlbWVudFsncGFydHMnXSkge1xuICAgIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgaWYgKHBhcnQudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFtwYXJ0XSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIHBhcnQuY2hhcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJ0cy5sZW5ndGgpO1xuICB9XG5cbiAgYXR0cmlidXRlTXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgfVxuXG4gIG1ldGEobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgbGV0IGxvYyA9IG5vZGUubG9jO1xuICAgIGlmICghbG9jKSB7IHJldHVybiBbXTsgfVxuXG4gICAgbGV0IHsgc291cmNlLCBzdGFydCwgZW5kIH0gPSBsb2M7XG4gICAgcmV0dXJuIFsgJ2xvYycsIFtzb3VyY2UgfHwgbnVsbCwgW3N0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbl0sIFtlbmQubGluZSwgZW5kLmNvbHVtbl1dIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWxwZXJJbnZvY2F0aW9uKG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBtdXN0YWNoZSBpcyBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgJiB7IHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiB9IHtcbiAgcmV0dXJuIChtdXN0YWNoZS5wYXJhbXMgJiYgbXVzdGFjaGUucGFyYW1zLmxlbmd0aCA+IDApIHx8XG4gICAgKG11c3RhY2hlLmhhc2ggJiYgbXVzdGFjaGUuaGFzaC5wYWlycy5sZW5ndGggPiAwKTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVQYXRoKHsgcGFydHMgfTogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDE7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWwoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24sIHN5bWJvbHM6IFN5bWJvbFRhYmxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzeW1ib2xzICYmIC8qIHBhcnRzLmxlbmd0aCAmJiAqLyBzeW1ib2xzLmhhcyhwYXJ0c1swXSk7XG59XG5cbmZ1bmN0aW9uIGlzWWllbGQocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAneWllbGQnO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRpYWwocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAncGFydGlhbCc7XG59XG5cbmZ1bmN0aW9uIGlzRGVidWdnZXIocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnZGVidWdnZXInO1xufVxuXG5mdW5jdGlvbiBpc0hhc0Jsb2NrKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jayc7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2tQYXJhbXMocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrLXBhcmFtcyc7XG59XG5cbmZ1bmN0aW9uIGlzQnVpbHRJbkhlbHBlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIGlzSGFzQmxvY2socGF0aCkgfHwgaXNIYXNCbG9ja1BhcmFtcyhwYXRoKTtcbn1cblxuZnVuY3Rpb24gaXNBcmcocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXBhdGhbJ2RhdGEnXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNTaW1wbGVQYXRoKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiwgbG9jOiBBU1QuU291cmNlTG9jYXRpb24sIGNvbnRleHQ6IHN0cmluZykge1xuICBpZiAoIWlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgXFxgJHtwYXRoLm9yaWdpbmFsfVxcYCBpcyBub3QgYSB2YWxpZCBuYW1lIGZvciBhICR7Y29udGV4dH0gb24gbGluZSAke2xvYy5zdGFydC5saW5lfS5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFlpZWxkKHsgaGFzaCB9OiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBzdHJpbmcge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gIGlmICgocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLmtleSAhPT0gJ3RvJykgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeWllbGQgb25seSB0YWtlcyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudDogJ3RvJ2ApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWVgKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAocGFpcnNbMF0udmFsdWUgYXMgQVNULlN0cmluZ0xpdGVyYWwpLnZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbCh7IHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgbG9jIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkgLyogOiBleHByICovIHtcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXJ0aWFsIGZvdW5kIHdpdGggbm8gYXJndW1lbnRzLiBZb3UgbXVzdCBzcGVjaWZ5IGEgdGVtcGxhdGUgbmFtZS4gKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcnRpYWwgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9IGVsc2UgaWYgKCFlc2NhcGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB7e3twYXJ0aWFsIC4uLn19fSBpcyBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIHt7cGFydGlhbCAuLi59fSBpbnN0ZWFkIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKHR5cGU6IHN0cmluZywgeyBwYXJhbXMsIGhhc2gsIGxvYyB9OiBBU1QuQ2FsbCk6IHN0cmluZyB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfSBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IHBhcmFtID0gcGFyYW1zWzBdO1xuICAgIGlmIChwYXJhbS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgIHJldHVybiBwYXJhbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gb25seSB0YWtlcyBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZSh7IHBhcmFtcywgaGFzaCB9OiB7IHBhcmFtczogQVNULkV4cHJlc3Npb25bXSwgaGFzaDogQVNULkhhc2ggfSkge1xuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHNgKTtcbiAgfVxufVxuIl19
}

@@ -1,2 +0,2 @@

import { dict } from '@glimmer/util';
import { dict, unreachable, expect } from '@glimmer/util';
export class SymbolTable {

@@ -23,2 +23,3 @@ static top() {

get(_name) {
throw unreachable();
}

@@ -58,3 +59,3 @@ getLocalsMap() {

has(name) {
return (this.symbols.indexOf(name) !== -1) || this.parent.has(name);
return this.symbols.indexOf(name) !== -1 || this.parent.has(name);
}

@@ -162,4 +163,3 @@ get(name) {

program['symbols'] = SymbolTable.top();
}
else {
} else {
program['symbols'] = parentFrame.symbols.child(program.blockParams);

@@ -171,4 +171,3 @@ }

endType = 'endProgram';
}
else {
} else {
startType = 'startBlock';

@@ -187,6 +186,3 @@ endType = 'endBlock';

}
programFrame.actions.push([startType, [
program, programFrame.childTemplateCount,
programFrame.blankChildTextNodes.reverse()
]]);
programFrame.actions.push([startType, [program, programFrame.childTemplateCount, programFrame.blankChildTextNodes.reverse()]]);
this.popFrame();

@@ -209,7 +205,3 @@ this.programDepth--;

elementFrame.symbols = element['symbols'] = parentFrame.symbols.child(element.blockParams);
let actionArgs = [
element,
parentFrame.childIndex,
parentFrame.childCount
];
let actionArgs = [element, parentFrame.childIndex, parentFrame.childCount];
elementFrame.actions.push(['closeElement', actionArgs]);

@@ -238,3 +230,3 @@ for (let i = element.attributes.length - 1; i >= 0; i--) {

}
;
TextNode(text) {

@@ -247,3 +239,3 @@ let frame = this.currentFrame;

}
;
BlockStatement(node) {

@@ -260,3 +252,3 @@ let frame = this.currentFrame;

}
;
PartialStatement(node) {

@@ -267,3 +259,3 @@ let frame = this.currentFrame;

}
;
CommentStatement(text) {

@@ -273,7 +265,7 @@ let frame = this.currentFrame;

}
;
MustacheCommentStatement() {
// Intentional empty: Handlebars comments should not affect output.
}
;
MustacheStatement(mustache) {

@@ -284,6 +276,6 @@ let frame = this.currentFrame;

}
;
// Frame helpers
get currentFrame() {
return this.getCurrentFrame();
return expect(this.getCurrentFrame(), "Expected a current frame");
}

@@ -310,4 +302,3 @@ getCurrentFrame() {

continue;
}
else {
} else {
index++;

@@ -320,3 +311,2 @@ }

return -1;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFnQixJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsTUFBTTtJQUNKLE1BQU0sQ0FBQyxHQUFHO1FBQ1IsTUFBTSxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBWUQsS0FBSyxDQUFDLE1BQWdCO1FBQ3BCLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDRjtBQUVELE1BQU0seUJBQTBCLFNBQVEsV0FBVztJQUFuRDs7UUFDUyxZQUFPLEdBQWEsRUFBRSxDQUFDO1FBRXRCLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxVQUFLLEdBQUcsSUFBSSxFQUFVLENBQUM7UUFDdkIsV0FBTSxHQUFHLElBQUksRUFBVSxDQUFDO0lBeUNsQyxDQUFDO0lBdkNDLEdBQUcsQ0FBQyxLQUFhO1FBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxHQUFHLENBQUMsS0FBYTtJQUNqQixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVk7UUFDeEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxLQUFLLEdB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QztJQUVPLFNBQVM7UUFDZixJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sUUFBUTtRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUVELGdFQUFnRTtBQUNoRSxtREFBbUQ7QUFDbkQsb0JBQW9CLEtBQWlCLEVBQUUsT0FBdUM7SUFDNUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFZixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0QyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzVELFFBQVEsQ0FBQztRQUNYLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLEtBQUssRUFBRSxDQUFDO1FBQ1YsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQ29yZSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IERpY3QsIE9wdGlvbiwgZGljdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3ltYm9sVGFibGUge1xuICBzdGF0aWMgdG9wKCk6IFByb2dyYW1TeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9ncmFtU3ltYm9sVGFibGUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj47XG4gIGFic3RyYWN0IGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm87XG5cbiAgYWJzdHJhY3QgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgY2hpbGQobG9jYWxzOiBzdHJpbmdbXSk6IEJsb2NrU3ltYm9sVGFibGUge1xuICAgIGxldCBzeW1ib2xzID0gbG9jYWxzLm1hcChuYW1lID0+IHRoaXMuYWxsb2NhdGUobmFtZSkpO1xuICAgIHJldHVybiBuZXcgQmxvY2tTeW1ib2xUYWJsZSh0aGlzLCBsb2NhbHMsIHN5bWJvbHMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc2l6ZSA9IDE7XG4gIHByaXZhdGUgbmFtZWQgPSBkaWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBkaWN0PG51bWJlcj4oKTtcblxuICBoYXMoX25hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldChfbmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV07XG5cbiAgICBpZiAoIW5hbWVkKSB7XG4gICAgICBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGBAJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBuYW1lZDtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXTtcblxuICAgIGlmICghYmxvY2spIHtcbiAgICAgIGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGAmJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBibG9jaztcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdGhpcy5zeW1ib2xzLnB1c2goaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSsrO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbG9ja1N5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU3ltYm9sVGFibGUsIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSwgcHVibGljIHNsb3RzOiBudW1iZXJbXSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHx8IHRoaXMucGFyZW50LmhhcyhuYW1lKTtcbiAgfVxuXG4gIGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBzbG90ID0gdGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSk7XG4gICAgcmV0dXJuIHNsb3QgPT09IC0xID8gdGhpcy5wYXJlbnQuZ2V0KG5hbWUpIDogdGhpcy5zbG90c1tzbG90XTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIGxldCBkaWN0ID0gdGhpcy5wYXJlbnQuZ2V0TG9jYWxzTWFwKCk7XG4gICAgdGhpcy5zeW1ib2xzLmZvckVhY2goc3ltYm9sID0+IGRpY3Rbc3ltYm9sXSA9IHRoaXMuZ2V0KHN5bWJvbCkpO1xuICAgIHJldHVybiBkaWN0O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgbGV0IGxvY2FscyA9IHRoaXMuZ2V0TG9jYWxzTWFwKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxvY2FscykubWFwKHN5bWJvbCA9PiBsb2NhbHNbc3ltYm9sXSk7XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlTmFtZWQobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlQmxvY2sobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZShpZGVudGlmaWVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGluIGFuIEFTVCBhbmQgb3V0cHV0cyBhIGxpc3Qgb2YgYWN0aW9ucyB0byBiZSBjb25zdW1lZFxuICogYnkgYSBjb21waWxlci4gRm9yIGV4YW1wbGUsIHRoZSB0ZW1wbGF0ZVxuICpcbiAqICAgICBmb297e2Jhcn19PGRpdj5iYXo8L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAzXV0sXG4gKiAgICAgIFsnbXVzdGFjaGUnLCBbbXVzdGFjaGVOb2RlLCAxLCAzXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDMsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhpcyB2aXNpdG9yIHdhbGtzIHRoZSBBU1QgZGVwdGggZmlyc3QgYW5kIGJhY2t3YXJkcy4gQXNcbiAqIGEgcmVzdWx0IHRoZSBib3R0b20tbW9zdCBjaGlsZCB0ZW1wbGF0ZSB3aWxsIGFwcGVhciBhdCB0aGVcbiAqIHRvcCBvZiB0aGUgYWN0aW9ucyBsaXN0IHdoZXJlYXMgdGhlIHJvb3QgdGVtcGxhdGUgd2lsbCBhcHBlYXJcbiAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QuIEZvciBleGFtcGxlLFxuICpcbiAqICAgICA8ZGl2Pnt7I2lmfX1mb297e2Vsc2V9fWJhcjxiPjwvYj57ey9pZn19PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMiwgMF1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyLCAwXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAyXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDEsIDFdXSxcbiAqICAgICAgWydibG9jaycsIFtibG9ja05vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgaXMgbWFpbnRhaW5lZCBieSBhIHN0YWNrIG9mIGZyYW1lcy5cbiAqIFdoZW5ldmVyIGEgbm9kZSB3aXRoIGNoaWxkcmVuIGlzIGVudGVyZWQgKGVpdGhlciBhIFByb2dyYW1Ob2RlXG4gKiBvciBhbiBFbGVtZW50Tm9kZSkgYSBmcmFtZSBpcyBwdXNoZWQgb250byB0aGUgc3RhY2suIFRoZSBmcmFtZVxuICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgb2YgdGhhdFxuICogbm9kZS4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAtIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoaWxkIG5vZGUgYmVpbmcgdmlzaXRlZFxuICogICAtIHRoZSBudW1iZXIgb2YgbXVzdGFjaGVzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGNoaWxkIG5vZGVzXG4gKiAgIC0gdGhlIGxpc3Qgb2YgYWN0aW9ucyBnZW5lcmF0ZWQgYnkgaXRzIGNoaWxkIG5vZGVzXG4gKi9cblxuY2xhc3MgRnJhbWUge1xuICBwdWJsaWMgcGFyZW50Tm9kZTogT3B0aW9uPE9iamVjdD4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRyZW46IE9wdGlvbjxBU1QuTm9kZVtdPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZEluZGV4OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZENvdW50OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZFRlbXBsYXRlQ291bnQgPSAwO1xuICBwdWJsaWMgbXVzdGFjaGVDb3VudCA9IDA7XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgYmxhbmtDaGlsZFRleHROb2RlczogT3B0aW9uPG51bWJlcltdPiA9IG51bGw7XG4gIHB1YmxpYyBzeW1ib2xzOiBPcHRpb248U3ltYm9sVGFibGU+ID0gbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb24ge1xuICBleHBvcnQgdHlwZSBTdGFydFByb2dyYW0gPSBbJ3N0YXJ0UHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRQcm9ncmFtID0gWydlbmRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgU3RhcnRCbG9jayA9IFsnc3RhcnRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRCbG9jayA9IFsnZW5kQmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBCbG9jayA9IFsnYmxvY2snLCBbQVNULkJsb2NrU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBNdXN0YWNoZSA9IFsnbXVzdGFjaGUnLCBbQVNULk11c3RhY2hlU3RhdGVtZW50IHwgQVNULlBhcnRpYWxTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE9wZW5FbGVtZW50ID0gWydvcGVuRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIENsb3NlRWxlbWVudCA9IFsnY2xvc2VFbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgVGV4dCA9IFsndGV4dCcsIFtBU1QuVGV4dE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIENvbW1lbnQgPSBbJ2NvbW1lbnQnLCBbQVNULkNvbW1lbnRTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uID1cbiAgICAgIFN0YXJ0UHJvZ3JhbVxuICAgIHwgRW5kUHJvZ3JhbVxuICAgIHwgU3RhcnRCbG9ja1xuICAgIHwgRW5kQmxvY2tcbiAgICB8IEJsb2NrXG4gICAgfCBNdXN0YWNoZVxuICAgIHwgT3BlbkVsZW1lbnRcbiAgICB8IENsb3NlRWxlbWVudFxuICAgIHwgVGV4dFxuICAgIHwgQ29tbWVudFxuICAgIDtcbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uID0gQWN0aW9uLkFjdGlvbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVWaXNpdG9yIHtcbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBGcmFtZVtdID0gW107XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIHByb2dyYW1EZXB0aCA9IC0xO1xuXG4gIHZpc2l0KG5vZGU6IEFTVC5CYXNlTm9kZSkge1xuICAgIHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgfVxuXG4gIC8vIFRyYXZlcnNhbCBtZXRob2RzXG5cbiAgUHJvZ3JhbShwcm9ncmFtOiBBU1QuUHJvZ3JhbSkge1xuICAgIHRoaXMucHJvZ3JhbURlcHRoKys7XG5cbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmdldEN1cnJlbnRGcmFtZSgpO1xuICAgIGxldCBwcm9ncmFtRnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgaWYgKCFwYXJlbnRGcmFtZSkge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gU3ltYm9sVGFibGUudG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKHByb2dyYW0uYmxvY2tQYXJhbXMpO1xuICAgIH1cblxuICAgIGxldCBzdGFydFR5cGUsIGVuZFR5cGU7XG5cbiAgICBpZiAodGhpcy5wcm9ncmFtRGVwdGggPT09IDApIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydFByb2dyYW0nO1xuICAgICAgZW5kVHlwZSA9ICdlbmRQcm9ncmFtJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0QmxvY2snO1xuICAgICAgZW5kVHlwZSA9ICdlbmRCbG9jayc7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLnBhcmVudE5vZGUgPSBwcm9ncmFtO1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZHJlbiA9IHByb2dyYW0uYm9keTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRDb3VudCA9IHByb2dyYW0uYm9keS5sZW5ndGg7XG4gICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtlbmRUeXBlLCBbcHJvZ3JhbSwgdGhpcy5wcm9ncmFtRGVwdGhdXSBhcyBBY3Rpb24pO1xuICAgIHByb2dyYW1GcmFtZS5zeW1ib2xzID0gcHJvZ3JhbVsnc3ltYm9scyddO1xuXG4gICAgZm9yIChsZXQgaSA9IHByb2dyYW0uYm9keS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgcHJvZ3JhbUZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChwcm9ncmFtLmJvZHlbaV0pO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW3N0YXJ0VHlwZSwgW1xuICAgICAgcHJvZ3JhbSwgcHJvZ3JhbUZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCxcbiAgICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKVxuICAgIF1dIGFzIEFjdGlvbik7XG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgdGhpcy5wcm9ncmFtRGVwdGgtLTtcblxuICAgIC8vIFB1c2ggdGhlIGNvbXBsZXRlZCB0ZW1wbGF0ZSBpbnRvIHRoZSBnbG9iYWwgYWN0aW9ucyBsaXN0XG4gICAgaWYgKHBhcmVudEZyYW1lKSB7IHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCsrOyB9XG4gICAgdGhpcy5hY3Rpb25zLnB1c2goLi4ucHJvZ3JhbUZyYW1lLmFjdGlvbnMucmV2ZXJzZSgpKTtcbiAgfVxuXG4gIEVsZW1lbnROb2RlKGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGxldCBlbGVtZW50RnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgZWxlbWVudEZyYW1lLnBhcmVudE5vZGUgPSBlbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkQ291bnQgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCArPSBlbGVtZW50Lm1vZGlmaWVycy5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBlbGVtZW50RnJhbWUuc3ltYm9scyA9IGVsZW1lbnRbJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKGVsZW1lbnQuYmxvY2tQYXJhbXMpO1xuXG4gICAgbGV0IGFjdGlvbkFyZ3M6IFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZEluZGV4ISxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkQ291bnQhXG4gICAgXTtcblxuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2goWydjbG9zZUVsZW1lbnQnLCBhY3Rpb25BcmdzXSk7XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuYXR0cmlidXRlc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGVsZW1lbnRGcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5jaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgbGV0IG9wZW4gPSBbJ29wZW5FbGVtZW50JywgWy4uLmFjdGlvbkFyZ3MsIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50LCBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKCldXSBhcyBBY3Rpb24uT3BlbkVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChvcGVuKTtcblxuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSB0aGUgZWxlbWVudCdzIGZyYW1lIHN0YXRlIHRvIHRoZSBwYXJlbnQgZnJhbWVcbiAgICBpZiAoZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgPiAwKSB7IHBhcmVudEZyYW1lLm11c3RhY2hlQ291bnQrKzsgfVxuICAgIHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCArPSBlbGVtZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50O1xuICAgIHBhcmVudEZyYW1lLmFjdGlvbnMucHVzaCguLi5lbGVtZW50RnJhbWUuYWN0aW9ucyk7XG4gIH1cblxuICBBdHRyTm9kZShhdHRyOiBBU1QuQXR0ck5vZGUpIHtcbiAgICBpZiAoYXR0ci52YWx1ZS50eXBlICE9PSAnVGV4dE5vZGUnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgfVxuICB9O1xuXG4gIFRleHROb2RlKHRleHQ6IEFTVC5UZXh0Tm9kZSkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGlmICh0ZXh0LmNoYXJzID09PSAnJykge1xuICAgICAgZnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyEucHVzaChkb21JbmRleE9mKGZyYW1lLmNoaWxkcmVuISwgdGV4dCkpO1xuICAgIH1cbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWyd0ZXh0JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIEJsb2NrU3RhdGVtZW50KG5vZGU6IEFTVC5CbG9ja1N0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2Jsb2NrJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuXG4gICAgaWYgKG5vZGUuaW52ZXJzZSkgeyB0aGlzLnZpc2l0KG5vZGUuaW52ZXJzZSk7IH1cbiAgICBpZiAobm9kZS5wcm9ncmFtKSB7IHRoaXMudmlzaXQobm9kZS5wcm9ncmFtKTsgfVxuICB9O1xuXG4gIFBhcnRpYWxTdGF0ZW1lbnQobm9kZTogQVNULlBhcnRpYWxTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQ29tbWVudFN0YXRlbWVudCh0ZXh0OiBBU1QuQ29tbWVudFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2NvbW1lbnQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgTXVzdGFjaGVDb21tZW50U3RhdGVtZW50KCkge1xuICAgIC8vIEludGVudGlvbmFsIGVtcHR5OiBIYW5kbGViYXJzIGNvbW1lbnRzIHNob3VsZCBub3QgYWZmZWN0IG91dHB1dC5cbiAgfTtcblxuICBNdXN0YWNoZVN0YXRlbWVudChtdXN0YWNoZTogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW211c3RhY2hlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICAvLyBGcmFtZSBoZWxwZXJzXG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudEZyYW1lKCk6IEZyYW1lIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZyYW1lKCk6IE9wdGlvbjxGcmFtZT4ge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2tbdGhpcy5mcmFtZVN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoRnJhbWUoKSB7XG4gICAgbGV0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5mcmFtZVN0YWNrLnB1c2goZnJhbWUpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wRnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBgZG9tTm9kZWAgaW4gdGhlIGBub2Rlc2AgYXJyYXksIHNraXBwaW5nXG4vLyBvdmVyIGFueSBub2RlcyB3aGljaCBkbyBub3QgcmVwcmVzZW50IERPTSBub2Rlcy5cbmZ1bmN0aW9uIGRvbUluZGV4T2Yobm9kZXM6IEFTVC5Ob2RlW10sIGRvbU5vZGU6IEFTVC5UZXh0Tm9kZSB8IEFTVC5FbGVtZW50Tm9kZSkge1xuICBsZXQgaW5kZXggPSAtMTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcblxuICAgIGlmIChub2RlLnR5cGUgIT09ICdUZXh0Tm9kZScgJiYgbm9kZS50eXBlICE9PSAnRWxlbWVudE5vZGUnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gZG9tTm9kZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cbiJdfQ==
}

@@ -7,8 +7,6 @@ export function processOpcodes(compiler, opcodes) {

compiler[method].apply(compiler, params);
}
else {
} else {
compiler[method].call(compiler);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLHlCQUF5QixRQUFhLEVBQUUsT0FBWTtJQUN4RCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3pDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNYLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NPcGNvZGVzKGNvbXBpbGVyOiBhbnksIG9wY29kZXM6IGFueSkge1xuICBmb3IgKGxldCBpPTAsIGw9b3Bjb2Rlcy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgbGV0IG1ldGhvZCA9IG9wY29kZXNbaV1bMF07XG4gICAgbGV0IHBhcmFtcyA9IG9wY29kZXNbaV1bMV07XG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgY29tcGlsZXJbbWV0aG9kXS5hcHBseShjb21waWxlciwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcGlsZXJbbWV0aG9kXS5jYWxsKGNvbXBpbGVyKTtcbiAgICB9XG4gIH1cbn0iXX0=
}
export { precompile } from "./lib/compiler";
// exported only for tests
export { default as TemplateVisitor } from './lib/template-visitor';
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFPLFNBQ0wsQUFBVSxBQUNYLGtCQUFNLEFBQWdCLEFBQUM7QUFFeEIsQUFBMEI7QUFDMUIsQUFBTyxTQUFFLEFBQU8sV0FBSSxBQUFlLEFBQUUsdUJBQU0sQUFBd0IsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIHByZWNvbXBpbGUsIFByZWNvbXBpbGVPcHRpb25zXG59IGZyb20gXCIuL2xpYi9jb21waWxlclwiO1xuXG4vLyBleHBvcnRlZCBvbmx5IGZvciB0ZXN0c1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZW1wbGF0ZVZpc2l0b3IgfSBmcm9tICcuL2xpYi90ZW1wbGF0ZS12aXNpdG9yJztcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbInByZWNvbXBpbGUiLCJkZWZhdWx0IiwiVGVtcGxhdGVWaXNpdG9yIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxVQUFULFFBQTJCLGdCQUEzQjtBQUNBO0FBQ0EsU0FBU0MsV0FBV0MsZUFBcEIsUUFBMkMsd0JBQTNDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcHJlY29tcGlsZSB9IGZyb20gXCIuL2xpYi9jb21waWxlclwiO1xuLy8gZXhwb3J0ZWQgb25seSBmb3IgdGVzdHNcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVtcGxhdGVWaXNpdG9yIH0gZnJvbSAnLi9saWIvdGVtcGxhdGUtdmlzaXRvcic7Il19

@@ -50,2 +50,2 @@ import { preprocess } from "@glimmer/syntax";

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFPLFNBQUUsQUFBVSxBQUFFLGtCQUFNLEFBQWlCLEFBQUM7QUFDN0MsT0FBTyxBQUFvQyxzQkFBTSxBQUFxQixBQUFDO0FBY3ZFLElBQU0sQUFBUyxZQUF3QjtBQUNyQyxRQUFJLEFBQWtCLEFBQUM7QUFDdkIsQUFBTSxXQUFDO0FBQ0wsQUFBRSxBQUFDLFlBQUMsQ0FBQyxBQUFJLEFBQUMsTUFBQyxBQUFDO0FBQ1YsQUFBRSxBQUFDLGdCQUFDLE9BQU8sQUFBTyxZQUFLLEFBQVUsQUFBQyxZQUFDLEFBQUM7QUFDbEMsb0JBQUksQUFBQztBQUNILEFBQXVDO0FBQ3ZDLHdCQUFNLEFBQU0sU0FBRyxBQUFPLFFBQUMsQUFBUSxBQUFDLEFBQUM7QUFDakMsQUFBc0M7QUFDdEMsQUFBSSwyQkFBRyxBQUFHO0FBQ1IsNEJBQUksQUFBSSxPQUFHLEFBQU0sT0FBQyxBQUFVLFdBQUMsQUFBTSxBQUFDLEFBQUM7QUFDckMsQUFBSSw2QkFBQyxBQUFNLE9BQUMsQUFBRyxLQUFFLEFBQU0sQUFBQyxBQUFDO0FBQ3pCLEFBQXFDO0FBQ3JDLEFBQU0sK0JBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFRLEFBQUMsVUFBQyxBQUFTLFVBQUMsQUFBQyxHQUFDLEFBQUMsQUFBQyxBQUFDLEFBQzlDO0FBQUMsQUFBQztBQUNGLEFBQUkseUJBQUMsQUFBTSxBQUFDLEFBQUMsQUFDZjtBQUFDLGtCQUFDLEFBQUssQUFBQyxPQUFDLEFBQUMsQUFBQyxHQUFDLEFBQUM7QUFDWCxBQUFJO0FBQUcsK0JBQU0sQUFBSSxBQUFDLEFBQ3BCOztBQUFDLEFBQ0g7QUFBQyxBQUNIO0FBQUM7QUFDRCxBQUFNLGVBQUMsQUFBSSxBQUFDLEFBQ2Q7QUFBQyxBQUFDLEFBQ0o7QUFBQyxBQUFDLEFBQUUsQUFBQyxDQXZCaUM7QUF3Q3RDLEFBQU0sMkJBQXFCLEFBQWMsUUFBRSxBQUF5QztBQUNsRixRQUFJLEFBQUksT0FBRyxBQUFPO0FBQ2hCLEFBQUUsWUFBRSxBQUFTLEFBQUU7QUFDZixBQUFJLGNBQUUsQUFBRSxBQUNpQyxBQUFDO0FBSHRCO0FBSXRCLFFBQUksQUFBRyxNQUFHLEFBQVUsV0FBQyxBQUFNLFFBQUUsQUFBSSxBQUFDLEFBQUMsQUFDbkMsQUFBSTs7Z0NBQWtCLEFBQWdCLGlCQUFDLEFBQU8sUUFBQyxBQUFJLE1BQUUsQUFBRyxBQUFDLEFBQUM7UUFBcEQsQUFBSztRQUFFLEFBQUksQUFBRTs7QUFDbkIsUUFBSSxBQUFJLE9BQUcsQUFBSSxLQUFDLEFBQUUsTUFBSSxBQUFTLEFBQUUsQUFBQztBQUNsQyxRQUFJLEFBQVMsWUFBRyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUssTUFBQyxBQUFNLEFBQUUsQUFBQyxBQUFDO0FBQy9DLFFBQUksQUFBa0I7QUFDcEIsQUFBRSxZQUFFLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUksQUFBQyxRQUFHLEFBQVMsQUFBQztBQUMxQyxBQUFLLGVBQUUsQUFBUztBQUNoQixBQUFJLEFBQ0wsQUFBQztBQUpzRTtBQU14RSxBQUFxQjtBQUNyQixBQUFNLFdBQUMsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFrQixBQUFDLEFBQUMsQUFDNUM7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByZXByb2Nlc3MgfSBmcm9tIFwiQGdsaW1tZXIvc3ludGF4XCI7XG5pbXBvcnQgVGVtcGxhdGVDb21waWxlciwgeyBDb21waWxlT3B0aW9ucyB9IGZyb20gXCIuL3RlbXBsYXRlLWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVkVGVtcGxhdGVXaXRoTGF6eUJsb2NrLCBUZW1wbGF0ZUphdmFzY3JpcHQsIFRlbXBsYXRlTWV0YSB9IGZyb20gXCJAZ2xpbW1lci93aXJlLWZvcm1hdFwiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIkBnbGltbWVyL2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZUlkRm4ge1xuICAoc3JjOiBzdHJpbmcpOiBPcHRpb248c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmVjb21waWxlT3B0aW9uczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiBleHRlbmRzIENvbXBpbGVPcHRpb25zPFQ+IHtcbiAgaWQ/OiBUZW1wbGF0ZUlkRm47XG59XG5cbmRlY2xhcmUgZnVuY3Rpb24gcmVxdWlyZShpZDogc3RyaW5nKTogYW55O1xuXG5jb25zdCBkZWZhdWx0SWQ6ICgpID0+IFRlbXBsYXRlSWRGbiA9ICgoKSA9PiB7XG4gIGxldCBpZEZuOiBUZW1wbGF0ZUlkRm47XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKCFpZEZuKSB7XG4gICAgICBpZiAodHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZTpuby1yZXF1aXJlLWltcG9ydHMgKi9cbiAgICAgICAgICBjb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbiAgICAgICAgICAvKiB0c2xpbnQ6ZW5hYmxlOm5vLXJlcXVpcmUtaW1wb3J0cyAqL1xuICAgICAgICAgIGlkRm4gPSBzcmMgPT4ge1xuICAgICAgICAgICAgbGV0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpO1xuICAgICAgICAgICAgaGFzaC51cGRhdGUoc3JjLCAndXRmOCcpO1xuICAgICAgICAgICAgLy8gdHJpbSB0byA2IGJ5dGVzIG9mIGRhdGEgKDJeNDggLSAxKVxuICAgICAgICAgICAgcmV0dXJuIGhhc2guZGlnZXN0KCdiYXNlNjQnKS5zdWJzdHJpbmcoMCw4KTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlkRm4oXCJ0ZXN0XCIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWRGbiA9ICgpID0+IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkRm47XG4gIH07XG59KSgpO1xuXG4vKlxuICogQ29tcGlsZSBhIHN0cmluZyBpbnRvIGEgdGVtcGxhdGUgamF2YXNjcmlwdCBzdHJpbmcuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqICAgICBpbXBvcnQgeyBwcmVjb21waWxlIH0gZnJvbSAnQGdsaW1tZXIvY29tcGlsZXInO1xuICogICAgIGltcG9ydCB7IHRlbXBsYXRlRmFjdG9yeSB9IGZyb20gJ2dsaW1lci1ydW50aW1lJztcbiAqICAgICBsZXQgdGVtcGxhdGVKcyA9IHByZWNvbXBpbGUoXCJIb3dkeSB7e25hbWV9fVwiKTtcbiAqICAgICBsZXQgZmFjdG9yeSA9IHRlbXBsYXRlRmFjdG9yeShuZXcgRnVuY3Rpb24oXCJyZXR1cm4gXCIgKyB0ZW1wbGF0ZUpzKSgpKTtcbiAqICAgICBsZXQgdGVtcGxhdGUgPSBmYWN0b3J5LmNyZWF0ZShlbnYpO1xuICpcbiAqIEBtZXRob2QgcHJlY29tcGlsZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBhIEdsaW1tZXIgdGVtcGxhdGUgc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGEgdGVtcGxhdGUgamF2YXNjcmlwdCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWNvbXBpbGU8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4oc3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBQcmVjb21waWxlT3B0aW9uczxUPik6IFRlbXBsYXRlSmF2YXNjcmlwdDtcbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlKHN0cmluZzogc3RyaW5nLCBvcHRpb25zPzogUHJlY29tcGlsZU9wdGlvbnM8VGVtcGxhdGVNZXRhPik6IFRlbXBsYXRlSmF2YXNjcmlwdCB7XG4gIGxldCBvcHRzID0gb3B0aW9ucyB8fCB7XG4gICAgaWQ6IGRlZmF1bHRJZCgpLFxuICAgIG1ldGE6IHt9XG4gIH0gYXMgYW55IGFzIFByZWNvbXBpbGVPcHRpb25zPFRlbXBsYXRlTWV0YT47XG4gIGxldCBhc3QgPSBwcmVwcm9jZXNzKHN0cmluZywgb3B0cyk7XG4gIGxldCB7IGJsb2NrLCBtZXRhIH0gPSBUZW1wbGF0ZUNvbXBpbGVyLmNvbXBpbGUob3B0cywgYXN0KTtcbiAgbGV0IGlkRm4gPSBvcHRzLmlkIHx8IGRlZmF1bHRJZCgpO1xuICBsZXQgYmxvY2tKU09OID0gSlNPTi5zdHJpbmdpZnkoYmxvY2sudG9KU09OKCkpO1xuICBsZXQgdGVtcGxhdGVKU09OT2JqZWN0OiBTZXJpYWxpemVkVGVtcGxhdGVXaXRoTGF6eUJsb2NrPFRlbXBsYXRlTWV0YT4gPSB7XG4gICAgaWQ6IGlkRm4oSlNPTi5zdHJpbmdpZnkobWV0YSkgKyBibG9ja0pTT04pLFxuICAgIGJsb2NrOiBibG9ja0pTT04sXG4gICAgbWV0YVxuICB9O1xuXG4gIC8vIEpTT04gaXMgamF2YXNjcmlwdFxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGVtcGxhdGVKU09OT2JqZWN0KTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21waWxlci5qcyJdLCJuYW1lcyI6WyJwcmVwcm9jZXNzIiwiVGVtcGxhdGVDb21waWxlciIsImRlZmF1bHRJZCIsImlkRm4iLCJyZXF1aXJlIiwiY3J5cHRvIiwiaGFzaCIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJzcmMiLCJkaWdlc3QiLCJzdWJzdHJpbmciLCJlIiwicHJlY29tcGlsZSIsInN0cmluZyIsIm9wdGlvbnMiLCJvcHRzIiwiaWQiLCJtZXRhIiwiYXN0IiwiY29tcGlsZSIsImJsb2NrIiwiYmxvY2tKU09OIiwiSlNPTiIsInN0cmluZ2lmeSIsInRvSlNPTiIsInRlbXBsYXRlSlNPTk9iamVjdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVCxRQUEyQixpQkFBM0I7QUFDQSxPQUFPQyxnQkFBUCxNQUE2QixxQkFBN0I7QUFDQSxJQUFNQyxZQUFhLFlBQU07QUFDckIsUUFBSUMsYUFBSjtBQUNBLFdBQU8sWUFBTTtBQUNULFlBQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1AsZ0JBQUksT0FBT0MsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUMvQixvQkFBSTtBQUNBO0FBQ0Esd0JBQU1DLFNBQVNELFFBQVEsUUFBUixDQUFmO0FBQ0E7QUFDQUQsMkJBQU8sZUFBTztBQUNWLDRCQUFJRyxPQUFPRCxPQUFPRSxVQUFQLENBQWtCLE1BQWxCLENBQVg7QUFDQUQsNkJBQUtFLE1BQUwsQ0FBWUMsR0FBWixFQUFpQixNQUFqQjtBQUNBO0FBQ0EsK0JBQU9ILEtBQUtJLE1BQUwsQ0FBWSxRQUFaLEVBQXNCQyxTQUF0QixDQUFnQyxDQUFoQyxFQUFtQyxDQUFuQyxDQUFQO0FBQ0gscUJBTEQ7QUFNQVIseUJBQUssTUFBTDtBQUNILGlCQVhELENBV0UsT0FBT1MsQ0FBUCxFQUFVO0FBQ1JULDJCQUFPO0FBQUEsK0JBQU0sSUFBTjtBQUFBLHFCQUFQO0FBQ0g7QUFDSjtBQUNKO0FBQ0QsZUFBT0EsSUFBUDtBQUNILEtBcEJEO0FBcUJILENBdkJpQixFQUFsQjtBQXdCQSxPQUFPLFNBQVNVLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQTRCQyxPQUE1QixFQUFxQztBQUN4QyxRQUFJQyxPQUFPRCxXQUFXO0FBQ2xCRSxZQUFJZixXQURjO0FBRWxCZ0IsY0FBTTtBQUZZLEtBQXRCO0FBSUEsUUFBSUMsTUFBTW5CLFdBQVdjLE1BQVgsRUFBbUJFLElBQW5CLENBQVY7O0FBTHdDLGdDQU1sQmYsaUJBQWlCbUIsT0FBakIsQ0FBeUJKLElBQXpCLEVBQStCRyxHQUEvQixDQU5rQjtBQUFBLFFBTWxDRSxLQU5rQyx5QkFNbENBLEtBTmtDO0FBQUEsUUFNM0JILElBTjJCLHlCQU0zQkEsSUFOMkI7O0FBT3hDLFFBQUlmLE9BQU9hLEtBQUtDLEVBQUwsSUFBV2YsV0FBdEI7QUFDQSxRQUFJb0IsWUFBWUMsS0FBS0MsU0FBTCxDQUFlSCxNQUFNSSxNQUFOLEVBQWYsQ0FBaEI7QUFDQSxRQUFJQyxxQkFBcUI7QUFDckJULFlBQUlkLEtBQUtvQixLQUFLQyxTQUFMLENBQWVOLElBQWYsSUFBdUJJLFNBQTVCLENBRGlCO0FBRXJCRCxlQUFPQyxTQUZjO0FBR3JCSjtBQUhxQixLQUF6QjtBQUtBO0FBQ0EsV0FBT0ssS0FBS0MsU0FBTCxDQUFlRSxrQkFBZixDQUFQO0FBQ0giLCJmaWxlIjoibGliL2NvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJlcHJvY2VzcyB9IGZyb20gXCJAZ2xpbW1lci9zeW50YXhcIjtcbmltcG9ydCBUZW1wbGF0ZUNvbXBpbGVyIGZyb20gXCIuL3RlbXBsYXRlLWNvbXBpbGVyXCI7XG5jb25zdCBkZWZhdWx0SWQgPSAoKCkgPT4ge1xuICAgIGxldCBpZEZuO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICghaWRGbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLyogdHNsaW50OmRpc2FibGU6bm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuICAgICAgICAgICAgICAgICAgICAvKiB0c2xpbnQ6ZW5hYmxlOm5vLXJlcXVpcmUtaW1wb3J0cyAqL1xuICAgICAgICAgICAgICAgICAgICBpZEZuID0gc3JjID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gudXBkYXRlKHNyYywgJ3V0ZjgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyaW0gdG8gNiBieXRlcyBvZiBkYXRhICgyXjQ4IC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNoLmRpZ2VzdCgnYmFzZTY0Jykuc3Vic3RyaW5nKDAsIDgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZEZuKFwidGVzdFwiKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkRm4gPSAoKSA9PiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWRGbjtcbiAgICB9O1xufSkoKTtcbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlKHN0cmluZywgb3B0aW9ucykge1xuICAgIGxldCBvcHRzID0gb3B0aW9ucyB8fCB7XG4gICAgICAgIGlkOiBkZWZhdWx0SWQoKSxcbiAgICAgICAgbWV0YToge31cbiAgICB9O1xuICAgIGxldCBhc3QgPSBwcmVwcm9jZXNzKHN0cmluZywgb3B0cyk7XG4gICAgbGV0IHsgYmxvY2ssIG1ldGEgfSA9IFRlbXBsYXRlQ29tcGlsZXIuY29tcGlsZShvcHRzLCBhc3QpO1xuICAgIGxldCBpZEZuID0gb3B0cy5pZCB8fCBkZWZhdWx0SWQoKTtcbiAgICBsZXQgYmxvY2tKU09OID0gSlNPTi5zdHJpbmdpZnkoYmxvY2sudG9KU09OKCkpO1xuICAgIGxldCB0ZW1wbGF0ZUpTT05PYmplY3QgPSB7XG4gICAgICAgIGlkOiBpZEZuKEpTT04uc3RyaW5naWZ5KG1ldGEpICsgYmxvY2tKU09OKSxcbiAgICAgICAgYmxvY2s6IGJsb2NrSlNPTixcbiAgICAgICAgbWV0YVxuICAgIH07XG4gICAgLy8gSlNPTiBpcyBqYXZhc2NyaXB0XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlSlNPTk9iamVjdCk7XG59Il19

@@ -11,2 +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 } from "@glimmer/util";

@@ -247,2 +248,4 @@ import { Statements, Ops } from '@glimmer/wire-format';

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]]);

@@ -370,2 +373,3 @@ };

var component = this.blocks.pop();
assert(component instanceof ComponentBlock, "Compiler bug: endComponent() should end a component");
return component.toJSON();

@@ -383,2 +387,3 @@ };

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);

@@ -407,2 +412,3 @@ var values = new Array(size);

JavaScriptCompiler.prototype.popValue = function popValue() {
assert(this.values.length, "No expression found on stack");
return this.values.pop();

@@ -422,2 +428,2 @@ };

export default JavaScriptCompiler;
//# 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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLmpzIl0sIm5hbWVzIjpbImFzc2VydCIsIlN0YWNrIiwiRGljdFNldCIsIlN0YXRlbWVudHMiLCJPcHMiLCJCbG9jayIsInN0YXRlbWVudHMiLCJwdXNoIiwic3RhdGVtZW50IiwiSW5saW5lQmxvY2siLCJ0YWJsZSIsInRvSlNPTiIsInBhcmFtZXRlcnMiLCJzbG90cyIsIlRlbXBsYXRlQmxvY2siLCJzeW1ib2xUYWJsZSIsInR5cGUiLCJ5aWVsZHMiLCJuYW1lZCIsInByZWx1ZGUiLCJoZWFkIiwiYmxvY2tzIiwiaGFzRXZhbCIsInNhd0VsZW1lbnQiLCJpblBhcmFtcyIsImlzT3BlbkVsZW1lbnQiLCJpc0ZsdXNoRWxlbWVudCIsImlzSW5FbGVtZW50SGVhZCIsIkVycm9yIiwic3ltYm9scyIsIkNvbXBvbmVudEJsb2NrIiwiYXR0cmlidXRlcyIsImFyZ3VtZW50cyIsInBvc2l0aW9uYWxzIiwiaXNBcmd1bWVudCIsImlzQXR0cmlidXRlIiwiaXNNb2RpZmllciIsImFyZ3MiLCJrZXlzIiwibWFwIiwiYXJnIiwidmFsdWVzIiwiVGVtcGxhdGUiLCJtZXRhIiwiYmxvY2siLCJKYXZhU2NyaXB0Q29tcGlsZXIiLCJvcGNvZGVzIiwidGVtcGxhdGUiLCJwcm9jZXNzIiwiY29tcGlsZXIiLCJmb3JFYWNoIiwib3Bjb2RlIiwic3RhcnRCbG9jayIsInByb2dyYW0iLCJlbmRCbG9jayIsInBvcCIsInN0YXJ0UHJvZ3JhbSIsImVuZFByb2dyYW0iLCJ0ZXh0IiwiY29udGVudCIsIlRleHQiLCJhcHBlbmQiLCJ0cnVzdGVkIiwiQXBwZW5kIiwicG9wVmFsdWUiLCJjb21tZW50IiwidmFsdWUiLCJDb21tZW50IiwibW9kaWZpZXIiLCJuYW1lIiwicGFyYW1zIiwiaGFzaCIsIk1vZGlmaWVyIiwiaW52ZXJzZSIsIm9wZW5FbGVtZW50IiwiZWxlbWVudCIsInRhZyIsImluZGV4T2YiLCJzdGFydENvbXBvbmVudCIsImJsb2NrUGFyYW1zIiwibGVuZ3RoIiwiT3BlbkVsZW1lbnQiLCJmbHVzaEVsZW1lbnQiLCJGbHVzaEVsZW1lbnQiLCJjbG9zZUVsZW1lbnQiLCJlbmRDb21wb25lbnQiLCJhdHRycyIsIkNvbXBvbmVudCIsIkNsb3NlRWxlbWVudCIsInN0YXRpY0F0dHIiLCJuYW1lc3BhY2UiLCJTdGF0aWNBdHRyIiwiZHluYW1pY0F0dHIiLCJEeW5hbWljQXR0ciIsInRydXN0aW5nQXR0ciIsIlRydXN0aW5nQXR0ciIsInN0YXRpY0FyZyIsIlN0YXRpY0FyZyIsImR5bmFtaWNBcmciLCJEeW5hbWljQXJnIiwieWllbGQiLCJ0byIsIllpZWxkIiwiZGVidWdnZXIiLCJldmFsSW5mbyIsIkRlYnVnZ2VyIiwiaGFzQmxvY2siLCJwdXNoVmFsdWUiLCJIYXNCbG9jayIsImhhc0Jsb2NrUGFyYW1zIiwiSGFzQmxvY2tQYXJhbXMiLCJwYXJ0aWFsIiwiUGFydGlhbCIsImxpdGVyYWwiLCJ1bmRlZmluZWQiLCJVbmRlZmluZWQiLCJ1bmtub3duIiwiVW5rbm93biIsImdldCIsInBhdGgiLCJHZXQiLCJtYXliZUxvY2FsIiwiTWF5YmVMb2NhbCIsImNvbmNhdCIsIkNvbmNhdCIsImhlbHBlciIsIkhlbHBlciIsImNvbXBvbmVudCIsInByZXBhcmVBcnJheSIsInNpemUiLCJpIiwicHJlcGFyZU9iamVjdCIsIkFycmF5IiwiY3VycmVudEJsb2NrIiwidmFsIiwiY3VycmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLFNBQVNBLE1BQVQsUUFBdUIsZUFBdkI7QUFDQSxTQUFTQyxLQUFULEVBQWdCQyxPQUFoQixRQUF1QyxlQUF2QztBQUNBLFNBQVNDLFVBQVQsRUFBcUJDLEdBQXJCLFFBQWdDLHNCQUFoQztBQUNBLFdBQWFDLEtBQWI7QUFDSSxxQkFBYztBQUFBOztBQUNWLGFBQUtDLFVBQUwsR0FBa0IsRUFBbEI7QUFDSDs7QUFITCxvQkFJSUMsSUFKSixpQkFJU0MsU0FKVCxFQUlvQjtBQUNaLGFBQUtGLFVBQUwsQ0FBZ0JD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YUFBSzhFLFlBQUwsQ0FBa0I5SCxJQUFsQixDQUF1QjhCLElBQXZCO0FBQ0gsSzs7aUNBQ0RzRSxTLHNCQUFVMkIsRyxFQUFLO0FBQ1gsYUFBSzdGLE1BQUwsQ0FBWWxDLElBQVosQ0FBaUIrSCxHQUFqQjtBQUNILEs7O2lDQUNEdEUsUSx1QkFBVztBQUNQaEUsZUFBTyxLQUFLeUMsTUFBTCxDQUFZdUMsTUFBbkIsRUFBMkIsOEJBQTNCO0FBQ0EsZUFBTyxLQUFLdkMsTUFBTCxDQUFZYyxHQUFaLEVBQVA7QUFDSCxLOzs7O3lCQS9La0I7QUFDZixtQkFBYyxLQUFLbEMsTUFBTCxDQUFZa0gsT0FBMUI7QUFDSDs7Ozs7O2VBYmdCMUYsa0IiLCJmaWxlIjoibGliL2phdmFzY3JpcHQtY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgU3RhY2ssIERpY3RTZXQsIGV4cGVjdCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBTdGF0ZW1lbnRzLCBPcHMgfSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5leHBvcnQgY2xhc3MgQmxvY2sge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMgPSBbXTtcbiAgICB9XG4gICAgcHVzaChzdGF0ZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgSW5saW5lQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gICAgY29uc3RydWN0b3IodGFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50YWJsZSA9IHRhYmxlO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGlzLnRhYmxlLnNsb3RzXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gICAgY29uc3RydWN0b3Ioc3ltYm9sVGFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zeW1ib2xUYWJsZSA9IHN5bWJvbFRhYmxlO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInRlbXBsYXRlXCI7XG4gICAgICAgIHRoaXMueWllbGRzID0gbmV3IERpY3RTZXQoKTtcbiAgICAgICAgdGhpcy5uYW1lZCA9IG5ldyBEaWN0U2V0KCk7XG4gICAgICAgIHRoaXMucHJlbHVkZSA9IFtdO1xuICAgICAgICB0aGlzLmhlYWQgPSBbXTtcbiAgICAgICAgdGhpcy5ibG9ja3MgPSBbXTtcbiAgICAgICAgdGhpcy5oYXNFdmFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F3RWxlbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluUGFyYW1zID0gZmFsc2U7XG4gICAgfVxuICAgIHB1c2goc3RhdGVtZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5zYXdFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoU3RhdGVtZW50cy5pc09wZW5FbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhd0VsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5QYXJhbXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcmVsdWRlLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZC5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFN0YXRlbWVudHMuaXNJbkVsZW1lbnRIZWFkKHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWQucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IG9ubHkgcGFyYW1ldGVycyBhbGxvd2VkIGJlZm9yZSBmbHVzaC1lbGVtZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgICAgICAgIHByZWx1ZGU6IHRoaXMuc2F3RWxlbWVudCA/IHRoaXMucHJlbHVkZSA6IG51bGwsXG4gICAgICAgICAgICBoZWFkOiB0aGlzLnNhd0VsZW1lbnQgPyB0aGlzLmhlYWQgOiBudWxsLFxuICAgICAgICAgICAgc3RhdGVtZW50czogdGhpcy5zYXdFbGVtZW50ID8gdGhpcy5zdGF0ZW1lbnRzIDogdGhpcy5wcmVsdWRlLFxuICAgICAgICAgICAgaGFzRXZhbDogdGhpcy5oYXNFdmFsXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICAgIGNvbnN0cnVjdG9yKHRhYmxlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgIHRoaXMuYXJndW1lbnRzID0gW107XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSB0cnVlO1xuICAgICAgICB0aGlzLnBvc2l0aW9uYWxzID0gW107XG4gICAgfVxuICAgIHB1c2goc3RhdGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChTdGF0ZW1lbnRzLmlzQXJndW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXJndW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc0F0dHJpYnV0ZShzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoU3RhdGVtZW50cy5pc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IEVsZW1lbnQgbW9kaWZpZXJzIGFyZSBub3QgYWxsb3dlZCBpbiBjb21wb25lbnRzJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogb25seSBwYXJhbWV0ZXJzIGFsbG93ZWQgYmVmb3JlIGZsdXNoLWVsZW1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgYXJncyA9IHRoaXMuYXJndW1lbnRzO1xuICAgICAgICBsZXQga2V5cyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMV0pO1xuICAgICAgICBsZXQgdmFsdWVzID0gYXJncy5tYXAoYXJnID0+IGFyZ1syXSk7XG4gICAgICAgIHJldHVybiBbdGhpcy5hdHRyaWJ1dGVzLCBba2V5cywgdmFsdWVzXSwge1xuICAgICAgICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgICB9XTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVGVtcGxhdGUge1xuICAgIGNvbnN0cnVjdG9yKHN5bWJvbHMsIG1ldGEpIHtcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcbiAgICAgICAgdGhpcy5ibG9jayA9IG5ldyBUZW1wbGF0ZUJsb2NrKHN5bWJvbHMpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBibG9jazogdGhpcy5ibG9jay50b0pTT04oKSxcbiAgICAgICAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphdmFTY3JpcHRDb21waWxlciB7XG4gICAgY29uc3RydWN0b3Iob3Bjb2Rlcywgc3ltYm9scywgbWV0YSkge1xuICAgICAgICB0aGlzLmJsb2NrcyA9IG5ldyBTdGFjaygpO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLm9wY29kZXMgPSBvcGNvZGVzO1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKHN5bWJvbHMsIG1ldGEpO1xuICAgIH1cbiAgICBzdGF0aWMgcHJvY2VzcyhvcGNvZGVzLCBzeW1ib2xzLCBtZXRhKSB7XG4gICAgICAgIGxldCBjb21waWxlciA9IG5ldyBKYXZhU2NyaXB0Q29tcGlsZXIob3Bjb2Rlcywgc3ltYm9scywgbWV0YSk7XG4gICAgICAgIHJldHVybiBjb21waWxlci5wcm9jZXNzKCk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50QmxvY2soKSB7XG4gICAgICAgIHJldHVybiBleHBlY3QodGhpcy5ibG9ja3MuY3VycmVudCwgJ0V4cGVjdGVkIGEgYmxvY2sgb24gdGhlIHN0YWNrJyk7XG4gICAgfVxuICAgIHByb2Nlc3MoKSB7XG4gICAgICAgIHRoaXMub3Bjb2Rlcy5mb3JFYWNoKChbb3Bjb2RlLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzW29wY29kZV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpc1tvcGNvZGVdKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGU7XG4gICAgfVxuICAgIC8vLyBOZXN0aW5nXG4gICAgc3RhcnRCbG9jayhbcHJvZ3JhbV0pIHtcbiAgICAgICAgbGV0IGJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgICAgIHRoaXMuYmxvY2tzLnB1c2goYmxvY2spO1xuICAgIH1cbiAgICBlbmRCbG9jaygpIHtcbiAgICAgICAgbGV0IHsgdGVtcGxhdGUsIGJsb2NrcyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGJsb2NrID0gYmxvY2tzLnBvcCgpO1xuICAgICAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gICAgfVxuICAgIHN0YXJ0UHJvZ3JhbSgpIHtcbiAgICAgICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgICB9XG4gICAgZW5kUHJvZ3JhbSgpIHt9XG4gICAgLy8vIFN0YXRlbWVudHNcbiAgICB0ZXh0KGNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuVGV4dCwgY29udGVudF0pO1xuICAgIH1cbiAgICBhcHBlbmQodHJ1c3RlZCkge1xuICAgICAgICB0aGlzLnB1c2goW09wcy5BcHBlbmQsIHRoaXMucG9wVmFsdWUoKSwgdHJ1c3RlZF0pO1xuICAgIH1cbiAgICBjb21tZW50KHZhbHVlKSB7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLkNvbW1lbnQsIHZhbHVlXSk7XG4gICAgfVxuICAgIG1vZGlmaWVyKG5hbWUpIHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLk1vZGlmaWVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgICB9XG4gICAgYmxvY2sobmFtZSwgdGVtcGxhdGUsIGludmVyc2UpIHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIGxldCBibG9ja3MgPSB0aGlzLnRlbXBsYXRlLmJsb2NrLmJsb2NrcztcbiAgICAgICAgYXNzZXJ0KHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW3RlbXBsYXRlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG4gICAgICAgIGFzc2VydCh0eXBlb2YgaW52ZXJzZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW2ludmVyc2VdICE9PSBudWxsLCAnbWlzc2luZyBibG9jayBpbiB0aGUgY29tcGlsZXInKTtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuQmxvY2ssIG5hbWUsIHBhcmFtcywgaGFzaCwgYmxvY2tzW3RlbXBsYXRlXSwgYmxvY2tzW2ludmVyc2VdXSk7XG4gICAgfVxuICAgIG9wZW5FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgbGV0IHRhZyA9IGVsZW1lbnQudGFnO1xuICAgICAgICBpZiAodGFnLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDb21wb25lbnQoZWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ibG9ja1BhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IDwke2VsZW1lbnQudGFnfT4gaXMgbm90IGEgY29tcG9uZW50IGFuZCBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgcGFyYW1ldGVyc2ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlbkVsZW1lbnQsIHRhZ10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZsdXNoRWxlbWVudCgpIHtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuRmx1c2hFbGVtZW50XSk7XG4gICAgfVxuICAgIGNsb3NlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcbiAgICAgICAgaWYgKHRhZy5pbmRleE9mKCctJykgIT09IC0xKSB7XG4gICAgICAgICAgICBsZXQgW2F0dHJzLCBhcmdzLCBibG9ja10gPSB0aGlzLmVuZENvbXBvbmVudCgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoKFtPcHMuQ29tcG9uZW50LCB0YWcsIGF0dHJzLCBhcmdzLCBibG9ja10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wdXNoKFtPcHMuQ2xvc2VFbGVtZW50XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljQXR0cihuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gICAgfVxuICAgIGR5bmFtaWNBdHRyKG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gICAgfVxuICAgIHRydXN0aW5nQXR0cihuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2goW09wcy5UcnVzdGluZ0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgICB9XG4gICAgc3RhdGljQXJnKG5hbWUpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gICAgfVxuICAgIGR5bmFtaWNBcmcobmFtZSkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gICAgfVxuICAgIHlpZWxkKHRvKSB7XG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLllpZWxkLCB0bywgcGFyYW1zXSk7XG4gICAgfVxuICAgIGRlYnVnZ2VyKGV2YWxJbmZvKSB7XG4gICAgICAgIHRoaXMucHVzaChbT3BzLkRlYnVnZ2VyLCBldmFsSW5mb10pO1xuICAgICAgICB0aGlzLnRlbXBsYXRlLmJsb2NrLmhhc0V2YWwgPSB0cnVlO1xuICAgIH1cbiAgICBoYXNCbG9jayhuYW1lKSB7XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKFtPcHMuSGFzQmxvY2ssIG5hbWVdKTtcbiAgICB9XG4gICAgaGFzQmxvY2tQYXJhbXMobmFtZSkge1xuICAgICAgICB0aGlzLnB1c2hWYWx1ZShbT3BzLkhhc0Jsb2NrUGFyYW1zLCBuYW1lXSk7XG4gICAgfVxuICAgIHBhcnRpYWwoZXZhbEluZm8pIHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgdGhpcy5wdXNoKFtPcHMuUGFydGlhbCwgcGFyYW1zWzBdLCBldmFsSW5mb10pO1xuICAgICAgICB0aGlzLnRlbXBsYXRlLmJsb2NrLmhhc0V2YWwgPSB0cnVlO1xuICAgIH1cbiAgICAvLy8gRXhwcmVzc2lvbnNcbiAgICBsaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnB1c2hWYWx1ZShbT3BzLlVuZGVmaW5lZF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wdXNoVmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVua25vd24obmFtZSkge1xuICAgICAgICB0aGlzLnB1c2hWYWx1ZShbT3BzLlVua25vd24sIG5hbWVdKTtcbiAgICB9XG4gICAgZ2V0KGhlYWQsIHBhdGgpIHtcbiAgICAgICAgdGhpcy5wdXNoVmFsdWUoW09wcy5HZXQsIGhlYWQsIHBhdGhdKTtcbiAgICB9XG4gICAgbWF5YmVMb2NhbChwYXRoKSB7XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKFtPcHMuTWF5YmVMb2NhbCwgcGF0aF0pO1xuICAgIH1cbiAgICBjb25jYXQoKSB7XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKFtPcHMuQ29uY2F0LCB0aGlzLnBvcFZhbHVlKCldKTtcbiAgICB9XG4gICAgaGVscGVyKG5hbWUpIHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgICB9XG4gICAgLy8vIFN0YWNrIE1hbmFnZW1lbnQgT3Bjb2Rlc1xuICAgIHN0YXJ0Q29tcG9uZW50KGVsZW1lbnQpIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRCbG9jayhlbGVtZW50WydzeW1ib2xzJ10pO1xuICAgICAgICB0aGlzLmJsb2Nrcy5wdXNoKGNvbXBvbmVudCk7XG4gICAgfVxuICAgIGVuZENvbXBvbmVudCgpIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgICAgICBhc3NlcnQoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50QmxvY2ssIFwiQ29tcGlsZXIgYnVnOiBlbmRDb21wb25lbnQoKSBzaG91bGQgZW5kIGEgY29tcG9uZW50XCIpO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50LnRvSlNPTigpO1xuICAgIH1cbiAgICBwcmVwYXJlQXJyYXkoc2l6ZSkge1xuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHVzaFZhbHVlKHZhbHVlcyk7XG4gICAgfVxuICAgIHByZXBhcmVPYmplY3Qoc2l6ZSkge1xuICAgICAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoID49IHNpemUsIGBFeHBlY3RlZCAke3NpemV9IHZhbHVlcyBvbiB0aGUgc3RhY2ssIGZvdW5kICR7dGhpcy52YWx1ZXMubGVuZ3RofWApO1xuICAgICAgICBsZXQga2V5cyA9IG5ldyBBcnJheShzaXplKTtcbiAgICAgICAgbGV0IHZhbHVlcyA9IG5ldyBBcnJheShzaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgICAgIGtleXNbaV0gPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgICAgICB2YWx1ZXNbaV0gPSB0aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdXNoVmFsdWUoW2tleXMsIHZhbHVlc10pO1xuICAgIH1cbiAgICAvLy8gVXRpbGl0aWVzXG4gICAgcHVzaChhcmdzKSB7XG4gICAgICAgIHdoaWxlIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGFyZ3MucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50QmxvY2sucHVzaChhcmdzKTtcbiAgICB9XG4gICAgcHVzaFZhbHVlKHZhbCkge1xuICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbCk7XG4gICAgfVxuICAgIHBvcFZhbHVlKCkge1xuICAgICAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoLCBcIk5vIGV4cHJlc3Npb24gZm91bmQgb24gc3RhY2tcIik7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5wb3AoKTtcbiAgICB9XG59Il19

@@ -8,2 +8,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 { Stack, getAttrNamespace } from "@glimmer/util";
import { assert } from "@glimmer/util";
import { isLiteral } from '@glimmer/syntax';

@@ -330,2 +331,3 @@ function isTrustedValue(value) {

var param = params[i];
assert(this[param.type], "Unimplemented " + param.type + " on TemplateCompiler");
this[param.type](param);

@@ -347,2 +349,3 @@ }

assert(this[value.type], "Unimplemented " + value.type + " on TemplateCompiler");
this[value.type](value);

@@ -514,2 +517,2 @@ this.opcode('literal', null, key);

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxBQUF3QyxxQkFBTSxBQUFvQixBQUFDO0FBQzFFLE9BQU8sQUFBZ0Msd0JBQU0sQUFBdUIsQUFBQztBQUNyRSxBQUFPLFNBQUUsQUFBSyxPQUFFLEFBQWdCLEFBQUUsd0JBQU0sQUFBZSxBQUFDO0FBRXhELEFBQU8sU0FBTyxBQUFTLEFBQUUsaUJBQU0sQUFBaUIsQUFBQztBQU1qRCx3QkFBd0IsQUFBVTtBQUNoQyxBQUFNLFdBQUMsQUFBSyxNQUFDLEFBQU8sWUFBSyxBQUFTLGFBQUksQ0FBQyxBQUFLLE1BQUMsQUFBTyxBQUFDLEFBQ3ZEO0FBQUMsQUFFRCxBQUFNLEFBQUMsQUFBTzs7O0FBaUJaLDhCQUFZLEFBQTBCOzs7QUFOOUIsYUFBVSxhQUFHLEFBQUMsQUFBQztBQUNmLGFBQVcsY0FBYSxBQUFFLEFBQUM7QUFDM0IsYUFBVyxjQUFHLElBQUksQUFBSyxBQUFlLEFBQUM7QUFDdkMsYUFBTyxVQUFVLEFBQUUsQUFBQztBQUNwQixhQUFXLGNBQUcsQUFBSyxBQUFDO0FBRzFCLEFBQUksYUFBQyxBQUFPLFVBQUcsQUFBTyxXQUFJLEFBQUUsQUFBQyxBQUMvQjtBQWxCQSxBQUFNLEFBa0JMOztxQkFsQk0sQUFBTywyQkFBeUIsQUFBMEIsU0FBRSxBQUFnQjtBQUNqRixZQUFJLEFBQWUsa0JBQUcsSUFBSSxBQUFlLEFBQUUsQUFBQztBQUM1QyxBQUFlLHdCQUFDLEFBQUssTUFBQyxBQUFHLEFBQUMsQUFBQztBQUUzQixZQUFJLEFBQVEsV0FBRyxJQUFJLEFBQWdCLGlCQUFDLEFBQU8sQUFBQyxBQUFDO0FBQzdDLFlBQUksQUFBTyxVQUFHLEFBQVEsU0FBQyxBQUFPLFFBQUMsQUFBZSxnQkFBQyxBQUFPLEFBQUMsQUFBQztBQUN4RCxBQUFNLGVBQUMsQUFBa0IsbUJB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QUFDLEFBQ3JFO0FBQUMsQUFDSDtBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVmlzaXRvciwgeyBTeW1ib2xUYWJsZSwgQWN0aW9uIH0gZnJvbSBcIi4vdGVtcGxhdGUtdmlzaXRvclwiO1xuaW1wb3J0IEphdmFTY3JpcHRDb21waWxlciwgeyBUZW1wbGF0ZSB9IGZyb20gXCIuL2phdmFzY3JpcHQtY29tcGlsZXJcIjtcbmltcG9ydCB7IFN0YWNrLCBnZXRBdHRyTmFtZXNwYWNlIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gXCJAZ2xpbW1lci93aXJlLWZvcm1hdFwiO1xuaW1wb3J0IHsgQVNULCBpc0xpdGVyYWwgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgbWV0YTogVDtcbn1cblxuZnVuY3Rpb24gaXNUcnVzdGVkVmFsdWUodmFsdWU6IGFueSkge1xuICByZXR1cm4gdmFsdWUuZXNjYXBlZCAhPT0gdW5kZWZpbmVkICYmICF2YWx1ZS5lc2NhcGVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZUNvbXBpbGVyPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgc3RhdGljIGNvbXBpbGU8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4sIGFzdDogQVNULlByb2dyYW0pOiBUZW1wbGF0ZTxUPiB7XG4gICAgbGV0IHRlbXBsYXRlVmlzaXRvciA9IG5ldyBUZW1wbGF0ZVZpc2l0b3IoKTtcbiAgICB0ZW1wbGF0ZVZpc2l0b3IudmlzaXQoYXN0KTtcblxuICAgIGxldCBjb21waWxlciA9IG5ldyBUZW1wbGF0ZUNvbXBpbGVyKG9wdGlvbnMpO1xuICAgIGxldCBvcGNvZGVzID0gY29tcGlsZXIucHJvY2Vzcyh0ZW1wbGF0ZVZpc2l0b3IuYWN0aW9ucyk7XG4gICAgcmV0dXJuIEphdmFTY3JpcHRDb21waWxlci5wcm9jZXNzPFQ+KG9wY29kZXMsIGFzdFsnc3ltYm9scyddLCBvcHRpb25zLm1ldGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcHRpb25zOiBDb21waWxlT3B0aW9uczxUPjtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkID0gMDtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkczogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBzeW1ib2xTdGFjayA9IG5ldyBTdGFjazxTeW1ib2xUYWJsZT4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGluY2x1ZGVNZXRhID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB9XG5cbiAgZ2V0IHN5bWJvbHMoKTogU3ltYm9sVGFibGUge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFN0YWNrLmN1cnJlbnQ7XG4gIH1cblxuICBwcm9jZXNzKGFjdGlvbnM6IEFjdGlvbltdKTogQWN0aW9uW10ge1xuICAgIGFjdGlvbnMuZm9yRWFjaCgoW25hbWUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbbmFtZV0pIHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkICR7bmFtZX0gb24gVGVtcGxhdGVDb21waWxlcmApOyB9XG4gICAgICAodGhpc1tuYW1lXSBhcyBhbnkpKC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm9wY29kZXM7XG4gIH1cblxuICBzdGFydFByb2dyYW0ocHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydFByb2dyYW0nLCBwcm9ncmFtLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kUHJvZ3JhbScsIG51bGwpO1xuICB9XG5cbiAgc3RhcnRCbG9jayhwcm9ncmFtOiBbQVNULlByb2dyYW1dKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKHByb2dyYW1bMF1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy50ZW1wbGF0ZUlkKys7XG4gICAgdGhpcy5vcGNvZGUoJ3N0YXJ0QmxvY2snLCBwcm9ncmFtLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZEJsb2NrKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy50ZW1wbGF0ZUlkcy5wdXNoKHRoaXMudGVtcGxhdGVJZCAtIDEpO1xuICAgIHRoaXMub3Bjb2RlKCdlbmRCbG9jaycsIG51bGwpO1xuICB9XG5cbiAgdGV4dChbYWN0aW9uXTogW0FTVC5UZXh0Tm9kZV0pIHtcbiAgICB0aGlzLm9wY29kZSgndGV4dCcsIGFjdGlvbiwgYWN0aW9uLmNoYXJzKTtcbiAgfVxuXG4gIGNvbW1lbnQoW2FjdGlvbl06IFtBU1QuQ29tbWVudFN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm9wY29kZSgnY29tbWVudCcsIGFjdGlvbiwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KFthY3Rpb25dOiBbQVNULkVsZW1lbnROb2RlXSkge1xuXG4gICAgdGhpcy5vcGNvZGUoJ29wZW5FbGVtZW50JywgYWN0aW9uLCBhY3Rpb24pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlKFthY3Rpb24uYXR0cmlidXRlc1tpXV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLm1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tb2RpZmllcihbYWN0aW9uLm1vZGlmaWVyc1tpXV0pO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgnZmx1c2hFbGVtZW50JywgbnVsbCk7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKGFjdGlvblsnc3ltYm9scyddKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMub3Bjb2RlKCdjbG9zZUVsZW1lbnQnLCBudWxsLCBhY3Rpb24pO1xuICB9XG5cbiAgYXR0cmlidXRlKFthY3Rpb25dOiBbQVNULkF0dHJOb2RlXSkge1xuICAgIGxldCB7IG5hbWUsIHZhbHVlIH0gPSBhY3Rpb247XG5cbiAgICBsZXQgbmFtZXNwYWNlID0gZ2V0QXR0ck5hbWVzcGFjZShuYW1lKTtcblxuICAgIGxldCBpc1N0YXRpYyA9IHRoaXMucHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAvLyBBcmd1bWVudHNcbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaXNUcnVzdGluZyA9IGlzVHJ1c3RlZFZhbHVlKHZhbHVlKTtcblxuICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdzdGF0aWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChpc1RydXN0aW5nKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCd0cnVzdGluZ0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXR0cicsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW9kaWZpZXIoW2FjdGlvbl06IFtBU1QuRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50XSkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChhY3Rpb24ucGF0aCwgYWN0aW9uLmxvYywgJ21vZGlmaWVyJyk7XG5cbiAgICBsZXQgeyBwYXRoOiB7IHBhcnRzIH0gfSA9IGFjdGlvbjtcblxuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIHRoaXMub3Bjb2RlKCdtb2RpZmllcicsIGFjdGlvbiwgcGFydHNbMF0pO1xuICB9XG5cbiAgbXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgbGV0IHsgcGF0aCB9ID0gYWN0aW9uO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnLCBhY3Rpb24sICFhY3Rpb24uZXNjYXBlZCk7XG4gICAgfSBlbHNlIGlmIChpc1lpZWxkKHBhdGgpKSB7XG4gICAgICBsZXQgdG8gPSBhc3NlcnRWYWxpZFlpZWxkKGFjdGlvbik7XG4gICAgICB0aGlzLnlpZWxkKHRvLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNQYXJ0aWFsKHBhdGgpKSB7XG4gICAgICBsZXQgcGFyYW1zID0gYXNzZXJ0VmFsaWRQYXJ0aWFsKGFjdGlvbik7XG4gICAgICB0aGlzLnBhcnRpYWwocGFyYW1zLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNEZWJ1Z2dlcihwYXRoKSkge1xuICAgICAgYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKGFjdGlvbik7XG4gICAgICB0aGlzLmRlYnVnZ2VyKCdkZWJ1Z2dlcicsIGFjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrKFthY3Rpb24vKiwgaW5kZXgsIGNvdW50Ki9dOiBbQVNULkJsb2NrU3RhdGVtZW50XSkge1xuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIGxldCB0ZW1wbGF0ZUlkID0gdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICBsZXQgaW52ZXJzZUlkID0gYWN0aW9uLmludmVyc2UgPT09IG51bGwgPyBudWxsIDogdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnYmxvY2snLCBhY3Rpb24sIGFjdGlvbi5wYXRoLnBhcnRzWzBdLCB0ZW1wbGF0ZUlkLCBpbnZlcnNlSWQpO1xuICB9XG5cbiAgLy8vIEludGVybmFsIGFjdGlvbnMsIG5vdCBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgcHJvY2Vzc2VkIGFjdGlvbnNcblxuICBhcmcoW3BhdGhdOiBbQVNULlBhdGhFeHByZXNzaW9uXSkge1xuICAgIGxldCB7IHBhcnRzOiBbaGVhZCwgLi4ucmVzdF0gfSA9IHBhdGg7XG4gICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9scy5hbGxvY2F0ZU5hbWVkKGhlYWQpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBwYXRoLCBzeW1ib2wsIHJlc3QpO1xuICB9XG5cbiAgbXVzdGFjaGVFeHByZXNzaW9uKGV4cHI6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG5cbiAgICBpZiAoaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIGV4cHIsIHBhdGgudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaXNCdWlsdEluSGVscGVyKHBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwciBhcyBBU1QuQ2FsbCk7XG4gICAgfSBlbHNlIGlmIChpc0FyZyhwYXRoKSkge1xuICAgICAgdGhpcy5hcmcoW3BhdGhdKTtcbiAgICB9IGVsc2UgaWYgKGlzSGVscGVySW52b2NhdGlvbihleHByKSkge1xuICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2hlbHBlcicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSBpZiAocGF0aC50aGlzKSB7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc0xvY2FsKHBhdGgsIHRoaXMuc3ltYm9scykpIHtcbiAgICAgIGxldCBbaGVhZCwgLi4ucGFydHNdID0gcGF0aC5wYXJ0cztcbiAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCB0aGlzLnN5bWJvbHMuZ2V0KGhlYWQpLCBwYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc1NpbXBsZVBhdGgocGF0aCkpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCd1bmtub3duJywgZXhwciwgcGF0aC5wYXJ0c1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdtYXliZUxvY2FsJywgZXhwciwgcGF0aC5wYXJ0cyk7XG4gICAgfVxuICB9XG5cbiAgLy8vIEludGVybmFsIFN5bnRheFxuXG4gIHlpZWxkKHRvOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgIHRoaXMub3Bjb2RlKCd5aWVsZCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sodG8pKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKF9uYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5vcGNvZGUoJ2RlYnVnZ2VyJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKSk7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2snLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIGhhc0Jsb2NrUGFyYW1zKG5hbWU6IHN0cmluZywgYWN0aW9uOiBBU1QuQ2FsbCkge1xuICAgIHRoaXMub3Bjb2RlKCdoYXNCbG9ja1BhcmFtcycsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sobmFtZSkpO1xuICB9XG5cbiAgcGFydGlhbChfcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgncGFydGlhbCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgYnVpbHRJbkhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG4gICAgaWYgKGlzSGFzQmxvY2socGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrKG5hbWUsIGV4cHIpO1xuICAgIH0gZWxzZSBpZiAoaXNIYXNCbG9ja1BhcmFtcyhwYXRoKSkge1xuICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgIHRoaXMuaGFzQmxvY2tQYXJhbXMobmFtZSwgZXhwcik7XG4gICAgfVxuICB9XG5cbiAgLy8vIEV4cHJlc3Npb25zLCBpbnZva2VkIHJlY3Vyc2l2ZWx5IGZyb20gcHJlcGFyZVBhcmFtcyBhbmQgcHJlcGFyZUhhc2hcblxuICBTdWJFeHByZXNzaW9uKGV4cHI6IEFTVC5TdWJFeHByZXNzaW9uKSB7XG4gICAgaWYgKGlzQnVpbHRJbkhlbHBlcihleHByLnBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBleHByLnBhdGgucGFydHNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIFBhdGhFeHByZXNzaW9uKGV4cHI6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICAgIGlmIChleHByLmRhdGEpIHtcbiAgICAgIHRoaXMuYXJnKFtleHByXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB7IHN5bWJvbHMgfSA9IHRoaXM7XG4gICAgICBsZXQgW2hlYWRdID0gZXhwci5wYXJ0cztcblxuICAgICAgaWYgKGV4cHIudGhpcykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgZXhwci5wYXJ0cyk7XG4gICAgICB9IGVsc2UgIGlmIChzeW1ib2xzLmhhcyhoZWFkKSkge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgc3ltYm9scy5nZXQoaGVhZCksIGV4cHIucGFydHMuc2xpY2UoMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFN0cmluZ0xpdGVyYWwoYWN0aW9uOiBBU1QuU3RyaW5nTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIEJvb2xlYW5MaXRlcmFsKGFjdGlvbjogQVNULkJvb2xlYW5MaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVtYmVyTGl0ZXJhbChhY3Rpb246IEFTVC5OdW1iZXJMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVsbExpdGVyYWwoYWN0aW9uOiBBU1QuTnVsbExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBVbmRlZmluZWRMaXRlcmFsKGFjdGlvbjogQVNULlVuZGVmaW5lZExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgb3Bjb2RlKG5hbWU6IGFueSwgYWN0aW9uOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbGV0IG9wY29kZSA9IFtuYW1lLCAuLi5hcmdzXTtcbiAgICBpZiAodGhpcy5pbmNsdWRlTWV0YSAmJiBhY3Rpb24pIHtcbiAgICAgIG9wY29kZS5wdXNoKHRoaXMubWV0YShhY3Rpb24pKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMucHVzaChvcGNvZGUpO1xuICB9XG5cbiAgcHJlcGFyZUhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChleHByLnBhdGgsIGV4cHIubG9jLCAnaGVscGVyJyk7XG5cbiAgICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IGV4cHI7XG5cbiAgICB0aGlzLnByZXBhcmVIYXNoKGhhc2gpO1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgcHJlcGFyZVBhcmFtcyhwYXJhbXM6IEFTVC5FeHByZXNzaW9uW10pIHtcbiAgICBpZiAoIXBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhcmFtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcmFtID0gcGFyYW1zW2ldO1xuXG4gICAgICAodGhpc1twYXJhbS50eXBlXSBhcyBhbnkpKHBhcmFtKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZUFycmF5JywgbnVsbCwgcGFyYW1zLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlSGFzaChoYXNoOiBBU1QuSGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgICBpZiAoIXBhaXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuXG4gICAgICAodGhpc1t2YWx1ZS50eXBlXSBhcyBhbnkpKHZhbHVlKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwga2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZU9iamVjdCcsIG51bGwsIHBhaXJzLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWU6IEFTVC5BdHRyTm9kZVsndmFsdWUnXSkge1xuICAgIC8vIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBpZiB0aGUgdmFsdWUgaXMgc3RhdGljXG5cbiAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1RleHROb2RlJzpcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCB2YWx1ZSwgdmFsdWUuY2hhcnMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5wcmVwYXJlQ29uY2F0UGFydHModmFsdWUucGFydHMpO1xuICAgICAgICB0aGlzLm9wY29kZSgnY29uY2F0JywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZUNvbmNhdFBhcnRzKHBhcnRzOiBBU1QuQ29uY2F0U3RhdGVtZW50WydwYXJ0cyddKSB7XG4gICAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3BhcnRdKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgcGFydC5jaGFycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcnRzLmxlbmd0aCk7XG4gIH1cblxuICBhdHRyaWJ1dGVNdXN0YWNoZShbYWN0aW9uXTogW0FTVC5NdXN0YWNoZVN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICB9XG5cbiAgbWV0YShub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICBsZXQgbG9jID0gbm9kZS5sb2M7XG4gICAgaWYgKCFsb2MpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICBsZXQgeyBzb3VyY2UsIHN0YXJ0LCBlbmQgfSA9IGxvYztcbiAgICByZXR1cm4gWyAnbG9jJywgW3NvdXJjZSB8fCBudWxsLCBbc3RhcnQubGluZSwgc3RhcnQuY29sdW1uXSwgW2VuZC5saW5lLCBlbmQuY29sdW1uXV0gXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hlbHBlckludm9jYXRpb24obXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IG11c3RhY2hlIGlzIEFTVC5NdXN0YWNoZVN0YXRlbWVudCAmIHsgcGF0aDogQVNULlBhdGhFeHByZXNzaW9uIH0ge1xuICByZXR1cm4gKG11c3RhY2hlLnBhcmFtcyAmJiBtdXN0YWNoZS5wYXJhbXMubGVuZ3RoID4gMCkgfHxcbiAgICAobXVzdGFjaGUuaGFzaCAmJiBtdXN0YWNoZS5oYXNoLnBhaXJzLmxlbmd0aCA+IDApO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZVBhdGgoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbCh7IHBhcnRzIH06IEFTVC5QYXRoRXhwcmVzc2lvbiwgc3ltYm9sczogU3ltYm9sVGFibGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN5bWJvbHMgJiYgLyogcGFydHMubGVuZ3RoICYmICovIHN5bWJvbHMuaGFzKHBhcnRzWzBdKTtcbn1cblxuZnVuY3Rpb24gaXNZaWVsZChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICd5aWVsZCc7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdwYXJ0aWFsJztcbn1cblxuZnVuY3Rpb24gaXNEZWJ1Z2dlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdkZWJ1Z2dlcic7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2socGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrJztcbn1cblxuZnVuY3Rpb24gaXNIYXNCbG9ja1BhcmFtcyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2stcGFyYW1zJztcbn1cblxuZnVuY3Rpb24gaXNCdWlsdEluSGVscGVyKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gaXNIYXNCbG9jayhwYXRoKSB8fCBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBpc0FyZyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcGF0aFsnZGF0YSddO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc1NpbXBsZVBhdGgocGF0aDogQVNULlBhdGhFeHByZXNzaW9uLCBsb2M6IEFTVC5Tb3VyY2VMb2NhdGlvbiwgY29udGV4dDogc3RyaW5nKSB7XG4gIGlmICghaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBcXGAke3BhdGgub3JpZ2luYWx9XFxgIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgJHtjb250ZXh0fSBvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9LmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkWWllbGQoeyBoYXNoIH06IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IHN0cmluZyB7XG4gIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgaWYgKChwYWlycy5sZW5ndGggPT09IDEgJiYgcGFpcnNbMF0ua2V5ICE9PSAndG8nKSB8fCBwYWlycy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB5aWVsZCBvbmx5IHRha2VzIGEgc2luZ2xlIG5hbWVkIGFyZ3VtZW50OiAndG8nYCk7XG4gIH0gZWxzZSBpZiAocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLnZhbHVlLnR5cGUgIT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZWApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChwYWlyc1swXS52YWx1ZSBhcyBBU1QuU3RyaW5nTGl0ZXJhbCkudmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQYXJ0aWFsKHsgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBsb2MgfTogQVNULk11c3RhY2hlU3RhdGVtZW50KSAvKiA6IGV4cHIgKi8ge1xuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcnRpYWwgZm91bmQgd2l0aCBubyBhcmd1bWVudHMuIFlvdSBtdXN0IHNwZWNpZnkgYSB0ZW1wbGF0ZSBuYW1lLiAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgfSBlbHNlIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgcGFydGlhbCBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHMgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH0gZWxzZSBpZiAoIWVzY2FwZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHt7e3BhcnRpYWwgLi4ufX19IGlzIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSB1c2Uge3twYXJ0aWFsIC4uLn19IGluc3RlYWQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UodHlwZTogc3RyaW5nLCB7IHBhcmFtcywgaGFzaCwgbG9jIH06IEFTVC5DYWxsKTogc3RyaW5nIHtcbiAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R5cGV9IGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2ApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEpIHtcbiAgICBsZXQgcGFyYW0gPSBwYXJhbXNbMF07XG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgcmV0dXJuIHBhcmFtLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWUgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWREZWJ1Z2dlclVzYWdlKHsgcGFyYW1zLCBoYXNoIH06IHsgcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBoYXNoOiBBU1QuSGFzaCB9KSB7XG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZWJ1Z2dlciBkb2VzIG5vdCB0YWtlIGFueSBwb3NpdGlvbmFsIGFyZ3VtZW50c2ApO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wbGF0ZS1jb21waWxlci5qcyJdLCJuYW1lcyI6WyJUZW1wbGF0ZVZpc2l0b3IiLCJKYXZhU2NyaXB0Q29tcGlsZXIiLCJTdGFjayIsImdldEF0dHJOYW1lc3BhY2UiLCJhc3NlcnQiLCJpc0xpdGVyYWwiLCJpc1RydXN0ZWRWYWx1ZSIsInZhbHVlIiwiZXNjYXBlZCIsInVuZGVmaW5lZCIsIlRlbXBsYXRlQ29tcGlsZXIiLCJvcHRpb25zIiwidGVtcGxhdGVJZCIsInRlbXBsYXRlSWRzIiwic3ltYm9sU3RhY2siLCJvcGNvZGVzIiwiaW5jbHVkZU1ldGEiLCJjb21waWxlIiwiYXN0IiwidGVtcGxhdGVWaXNpdG9yIiwidmlzaXQiLCJjb21waWxlciIsInByb2Nlc3MiLCJhY3Rpb25zIiwibWV0YSIsImZvckVhY2giLCJuYW1lIiwiYXJncyIsIkVycm9yIiwic3RhcnRQcm9ncmFtIiwicHJvZ3JhbSIsInB1c2giLCJvcGNvZGUiLCJlbmRQcm9ncmFtIiwicG9wIiwic3RhcnRCbG9jayIsImVuZEJsb2NrIiwidGV4dCIsImFjdGlvbiIsImNoYXJzIiwiY29tbWVudCIsIm9wZW5FbGVtZW50IiwiaSIsImF0dHJpYnV0ZXMiLCJsZW5ndGgiLCJhdHRyaWJ1dGUiLCJtb2RpZmllcnMiLCJtb2RpZmllciIsImNsb3NlRWxlbWVudCIsIm5hbWVzcGFjZSIsImlzU3RhdGljIiwicHJlcGFyZUF0dHJpYnV0ZVZhbHVlIiwiY2hhckF0IiwidHlwZSIsImlzVHJ1c3RpbmciLCJhc3NlcnRJc1NpbXBsZVBhdGgiLCJwYXRoIiwibG9jIiwicGFydHMiLCJwcmVwYXJlSGVscGVyIiwibXVzdGFjaGUiLCJtdXN0YWNoZUV4cHJlc3Npb24iLCJpc1lpZWxkIiwidG8iLCJhc3NlcnRWYWxpZFlpZWxkIiwieWllbGQiLCJpc1BhcnRpYWwiLCJwYXJhbXMiLCJhc3NlcnRWYWxpZFBhcnRpYWwiLCJwYXJ0aWFsIiwiaXNEZWJ1Z2dlciIsImFzc2VydFZhbGlkRGVidWdnZXJVc2FnZSIsImRlYnVnZ2VyIiwiYmxvY2siLCJpbnZlcnNlSWQiLCJpbnZlcnNlIiwiYXJnIiwiaGVhZCIsInJlc3QiLCJzeW1ib2wiLCJzeW1ib2xzIiwiYWxsb2NhdGVOYW1lZCIsImV4cHIiLCJpc0J1aWx0SW5IZWxwZXIiLCJidWlsdEluSGVscGVyIiwiaXNBcmciLCJpc0hlbHBlckludm9jYXRpb24iLCJ0aGlzIiwiaXNMb2NhbCIsImdldCIsImlzU2ltcGxlUGF0aCIsInByZXBhcmVQYXJhbXMiLCJhbGxvY2F0ZUJsb2NrIiwiX25hbWUiLCJnZXRFdmFsSW5mbyIsImhhc0Jsb2NrIiwiaGFzQmxvY2tQYXJhbXMiLCJfcGFyYW1zIiwiaXNIYXNCbG9jayIsImFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZSIsIm9yaWdpbmFsIiwiaXNIYXNCbG9ja1BhcmFtcyIsIlN1YkV4cHJlc3Npb24iLCJQYXRoRXhwcmVzc2lvbiIsImRhdGEiLCJoYXMiLCJzbGljZSIsIlN0cmluZ0xpdGVyYWwiLCJCb29sZWFuTGl0ZXJhbCIsIk51bWJlckxpdGVyYWwiLCJOdWxsTGl0ZXJhbCIsIlVuZGVmaW5lZExpdGVyYWwiLCJoYXNoIiwicHJlcGFyZUhhc2giLCJwYXJhbSIsInBhaXJzIiwia2V5IiwiYXR0cmlidXRlTXVzdGFjaGUiLCJwcmVwYXJlQ29uY2F0UGFydHMiLCJwYXJ0Iiwibm9kZSIsInNvdXJjZSIsInN0YXJ0IiwiZW5kIiwibGluZSIsImNvbHVtbiIsImN1cnJlbnQiLCJjb250ZXh0Il0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBT0EsZUFBUCxNQUE0QixvQkFBNUI7QUFDQSxPQUFPQyxrQkFBUCxNQUErQix1QkFBL0I7QUFDQSxTQUFTQyxLQUFULEVBQWdCQyxnQkFBaEIsUUFBd0MsZUFBeEM7QUFDQSxTQUFTQyxNQUFULFFBQStCLGVBQS9CO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQixpQkFBMUI7QUFDQSxTQUFTQyxjQUFULENBQXdCQyxLQUF4QixFQUErQjtBQUMzQixXQUFPQSxNQUFNQyxPQUFO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WUFBSStDLE1BQU03RCxJQUFOLEtBQWUsZUFBbkIsRUFBb0M7QUFDaEMsbUJBQU82RCxNQUFNM0csS0FBYjtBQUNILFNBRkQsTUFFTztBQUNILGtCQUFNLElBQUlxQixLQUFKLHFEQUE0RDZCLElBQUlpRSxLQUFKLENBQVVFLElBQXRFLE9BQU47QUFDSDtBQUNKLEtBUE0sTUFPQTtBQUNILGNBQU0sSUFBSWhHLEtBQUosQ0FBYXlCLElBQWIsMERBQXNFSSxJQUFJaUUsS0FBSixDQUFVRSxJQUFoRixPQUFOO0FBQ0g7QUFDSjtBQUNELFNBQVNyRCx3QkFBVCxTQUFvRDtBQUFBLFFBQWhCSixNQUFnQixVQUFoQkEsTUFBZ0I7QUFBQSxRQUFSNkMsSUFBUSxVQUFSQSxJQUFROztBQUNoRCxRQUFJQSxRQUFRQSxLQUFLRyxLQUFMLENBQVd2RSxNQUFYLEdBQW9CLENBQWhDLEVBQW1DO0FBQy9CLGNBQU0sSUFBSWhCLEtBQUosOENBQU47QUFDSDtBQUNELFFBQUl1QyxPQUFPdkIsTUFBUCxLQUFrQixDQUF0QixFQUF5QjtBQUNyQixlQUFPLFNBQVA7QUFDSCxLQUZELE1BRU87QUFDSCxjQUFNLElBQUloQixLQUFKLG1EQUFOO0FBQ0g7QUFDSiIsImZpbGUiOiJsaWIvdGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGVtcGxhdGVWaXNpdG9yIGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIgZnJvbSBcIi4vamF2YXNjcmlwdC1jb21waWxlclwiO1xuaW1wb3J0IHsgU3RhY2ssIGdldEF0dHJOYW1lc3BhY2UgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgYXNzZXJ0LCBleHBlY3QgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgaXNMaXRlcmFsIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcbmZ1bmN0aW9uIGlzVHJ1c3RlZFZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmVzY2FwZWQgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUuZXNjYXBlZDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlQ29tcGlsZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUlkID0gMDtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUlkcyA9IFtdO1xuICAgICAgICB0aGlzLnN5bWJvbFN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIHRoaXMub3Bjb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLmluY2x1ZGVNZXRhID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIHN0YXRpYyBjb21waWxlKG9wdGlvbnMsIGFzdCkge1xuICAgICAgICBsZXQgdGVtcGxhdGVWaXNpdG9yID0gbmV3IFRlbXBsYXRlVmlzaXRvcigpO1xuICAgICAgICB0ZW1wbGF0ZVZpc2l0b3IudmlzaXQoYXN0KTtcbiAgICAgICAgbGV0IGNvbXBpbGVyID0gbmV3IFRlbXBsYXRlQ29tcGlsZXIob3B0aW9ucyk7XG4gICAgICAgIGxldCBvcGNvZGVzID0gY29tcGlsZXIucHJvY2Vzcyh0ZW1wbGF0ZVZpc2l0b3IuYWN0aW9ucyk7XG4gICAgICAgIHJldHVybiBKYXZhU2NyaXB0Q29tcGlsZXIucHJvY2VzcyhvcGNvZGVzLCBhc3RbJ3N5bWJvbHMnXSwgb3B0aW9ucy5tZXRhKTtcbiAgICB9XG4gICAgZ2V0IHN5bWJvbHMoKSB7XG4gICAgICAgIHJldHVybiBleHBlY3QodGhpcy5zeW1ib2xTdGFjay5jdXJyZW50LCAnRXhwZWN0ZWQgYSBzeW1ib2wgdGFibGUgb24gdGhlIHN0YWNrJyk7XG4gICAgfVxuICAgIHByb2Nlc3MoYWN0aW9ucykge1xuICAgICAgICBhY3Rpb25zLmZvckVhY2goKFtuYW1lLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkICR7bmFtZX0gb24gVGVtcGxhdGVDb21waWxlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpc1tuYW1lXSguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wY29kZXM7XG4gICAgfVxuICAgIHN0YXJ0UHJvZ3JhbShwcm9ncmFtKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhcnRQcm9ncmFtJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gICAgfVxuICAgIGVuZFByb2dyYW0oKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdlbmRQcm9ncmFtJywgbnVsbCk7XG4gICAgfVxuICAgIHN0YXJ0QmxvY2socHJvZ3JhbSkge1xuICAgICAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUlkKys7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gICAgfVxuICAgIGVuZEJsb2NrKCkge1xuICAgICAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlSWRzLnB1c2godGhpcy50ZW1wbGF0ZUlkIC0gMSk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdlbmRCbG9jaycsIG51bGwpO1xuICAgIH1cbiAgICB0ZXh0KFthY3Rpb25dKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCd0ZXh0JywgYWN0aW9uLCBhY3Rpb24uY2hhcnMpO1xuICAgIH1cbiAgICBjb21tZW50KFthY3Rpb25dKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdjb21tZW50JywgYWN0aW9uLCBhY3Rpb24udmFsdWUpO1xuICAgIH1cbiAgICBvcGVuRWxlbWVudChbYWN0aW9uXSkge1xuICAgICAgICB0aGlzLm9wY29kZSgnb3BlbkVsZW1lbnQnLCBhY3Rpb24sIGFjdGlvbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlKFthY3Rpb24uYXR0cmlidXRlc1tpXV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLm1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5tb2RpZmllcihbYWN0aW9uLm1vZGlmaWVyc1tpXV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3Bjb2RlKCdmbHVzaEVsZW1lbnQnLCBudWxsKTtcbiAgICAgICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKGFjdGlvblsnc3ltYm9scyddKTtcbiAgICB9XG4gICAgY2xvc2VFbGVtZW50KFthY3Rpb25dKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdjbG9zZUVsZW1lbnQnLCBudWxsLCBhY3Rpb24pO1xuICAgIH1cbiAgICBhdHRyaWJ1dGUoW2FjdGlvbl0pIHtcbiAgICAgICAgbGV0IHsgbmFtZSwgdmFsdWUgfSA9IGFjdGlvbjtcbiAgICAgICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG4gICAgICAgIGxldCBpc1N0YXRpYyA9IHRoaXMucHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSAnQCcpIHtcbiAgICAgICAgICAgIC8vIEFyZ3VtZW50c1xuICAgICAgICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaXNUcnVzdGluZyA9IGlzVHJ1c3RlZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdzdGF0aWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1RydXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ3RydXN0aW5nQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbW9kaWZpZXIoW2FjdGlvbl0pIHtcbiAgICAgICAgYXNzZXJ0SXNTaW1wbGVQYXRoKGFjdGlvbi5wYXRoLCBhY3Rpb24ubG9jLCAnbW9kaWZpZXInKTtcbiAgICAgICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG4gICAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgICAgICB0aGlzLm9wY29kZSgnbW9kaWZpZXInLCBhY3Rpb24sIHBhcnRzWzBdKTtcbiAgICB9XG4gICAgbXVzdGFjaGUoW2FjdGlvbl0pIHtcbiAgICAgICAgbGV0IHsgcGF0aCB9ID0gYWN0aW9uO1xuICAgICAgICBpZiAoaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICAgICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1lpZWxkKHBhdGgpKSB7XG4gICAgICAgICAgICBsZXQgdG8gPSBhc3NlcnRWYWxpZFlpZWxkKGFjdGlvbik7XG4gICAgICAgICAgICB0aGlzLnlpZWxkKHRvLCBhY3Rpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlYnVnZ2VyKHBhdGgpKSB7XG4gICAgICAgICAgICBhc3NlcnRWYWxpZERlYnVnZ2VyVXNhZ2UoYWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZGVidWdnZXIoJ2RlYnVnZ2VyJywgYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJsb2NrKFthY3Rpb24gLyosIGluZGV4LCBjb3VudCovXSkge1xuICAgICAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlSWQgPSB0aGlzLnRlbXBsYXRlSWRzLnBvcCgpO1xuICAgICAgICBsZXQgaW52ZXJzZUlkID0gYWN0aW9uLmludmVyc2UgPT09IG51bGwgPyBudWxsIDogdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0c1swXSwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgICB9XG4gICAgLy8vIEludGVybmFsIGFjdGlvbnMsIG5vdCBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgcHJvY2Vzc2VkIGFjdGlvbnNcbiAgICBhcmcoW3BhdGhdKSB7XG4gICAgICAgIGxldCB7IHBhcnRzOiBbaGVhZCwgLi4ucmVzdF0gfSA9IHBhdGg7XG4gICAgICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChoZWFkKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIHBhdGgsIHN5bWJvbCwgcmVzdCk7XG4gICAgfVxuICAgIG11c3RhY2hlRXhwcmVzc2lvbihleHByKSB7XG4gICAgICAgIGxldCB7IHBhdGggfSA9IGV4cHI7XG4gICAgICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgZXhwciwgcGF0aC52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCdWlsdEluSGVscGVyKHBhdGgpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNIZWxwZXJJbnZvY2F0aW9uKGV4cHIpKSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgcGF0aC5wYXJ0c1swXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGF0aC50aGlzKSB7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgMCwgcGF0aC5wYXJ0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgdGhpcy5zeW1ib2xzLmdldChoZWFkKSwgcGFydHMpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ3Vua25vd24nLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdtYXliZUxvY2FsJywgZXhwciwgcGF0aC5wYXJ0cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8vIEludGVybmFsIFN5bnRheFxuICAgIHlpZWxkKHRvLCBhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgICAgICB0aGlzLm9wY29kZSgneWllbGQnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKHRvKSk7XG4gICAgfVxuICAgIGRlYnVnZ2VyKF9uYW1lLCBhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2RlYnVnZ2VyJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKSk7XG4gICAgfVxuICAgIGhhc0Jsb2NrKG5hbWUsIGFjdGlvbikge1xuICAgICAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2snLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgICB9XG4gICAgaGFzQmxvY2tQYXJhbXMobmFtZSwgYWN0aW9uKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdoYXNCbG9ja1BhcmFtcycsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sobmFtZSkpO1xuICAgIH1cbiAgICBwYXJ0aWFsKF9wYXJhbXMsIGFjdGlvbikge1xuICAgICAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwYXJ0aWFsJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKSk7XG4gICAgfVxuICAgIGJ1aWx0SW5IZWxwZXIoZXhwcikge1xuICAgICAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgICAgICBpZiAoaXNIYXNCbG9jayhwYXRoKSkge1xuICAgICAgICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgICAgICAgIHRoaXMuaGFzQmxvY2sobmFtZSwgZXhwcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNIYXNCbG9ja1BhcmFtcyhwYXRoKSkge1xuICAgICAgICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgICAgICAgIHRoaXMuaGFzQmxvY2tQYXJhbXMobmFtZSwgZXhwcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8vIEV4cHJlc3Npb25zLCBpbnZva2VkIHJlY3Vyc2l2ZWx5IGZyb20gcHJlcGFyZVBhcmFtcyBhbmQgcHJlcGFyZUhhc2hcbiAgICBTdWJFeHByZXNzaW9uKGV4cHIpIHtcbiAgICAgICAgaWYgKGlzQnVpbHRJbkhlbHBlcihleHByLnBhdGgpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgZXhwci5wYXRoLnBhcnRzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBQYXRoRXhwcmVzc2lvbihleHByKSB7XG4gICAgICAgIGlmIChleHByLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYXJnKFtleHByXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgeyBzeW1ib2xzIH0gPSB0aGlzO1xuICAgICAgICAgICAgbGV0IFtoZWFkXSA9IGV4cHIucGFydHM7XG4gICAgICAgICAgICBpZiAoZXhwci50aGlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2xzLmhhcyhoZWFkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCBzeW1ib2xzLmdldChoZWFkKSwgZXhwci5wYXJ0cy5zbGljZSgxKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCAwLCBleHByLnBhcnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBTdHJpbmdMaXRlcmFsKGFjdGlvbikge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gICAgfVxuICAgIEJvb2xlYW5MaXRlcmFsKGFjdGlvbikge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gICAgfVxuICAgIE51bWJlckxpdGVyYWwoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgICB9XG4gICAgTnVsbExpdGVyYWwoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgICB9XG4gICAgVW5kZWZpbmVkTGl0ZXJhbChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICAgIH1cbiAgICAvLy8gVXRpbGl0aWVzXG4gICAgb3Bjb2RlKG5hbWUsIGFjdGlvbiwgLi4uYXJncykge1xuICAgICAgICBsZXQgb3Bjb2RlID0gW25hbWUsIC4uLmFyZ3NdO1xuICAgICAgICBpZiAodGhpcy5pbmNsdWRlTWV0YSAmJiBhY3Rpb24pIHtcbiAgICAgICAgICAgIG9wY29kZS5wdXNoKHRoaXMubWV0YShhY3Rpb24pKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wY29kZXMucHVzaChvcGNvZGUpO1xuICAgIH1cbiAgICBwcmVwYXJlSGVscGVyKGV4cHIpIHtcbiAgICAgICAgYXNzZXJ0SXNTaW1wbGVQYXRoKGV4cHIucGF0aCwgZXhwci5sb2MsICdoZWxwZXInKTtcbiAgICAgICAgbGV0IHsgcGFyYW1zLCBoYXNoIH0gPSBleHByO1xuICAgICAgICB0aGlzLnByZXBhcmVIYXNoKGhhc2gpO1xuICAgICAgICB0aGlzLnByZXBhcmVQYXJhbXMocGFyYW1zKTtcbiAgICB9XG4gICAgcHJlcGFyZVBhcmFtcyhwYXJhbXMpIHtcbiAgICAgICAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBwYXJhbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBwYXJhbSA9IHBhcmFtc1tpXTtcbiAgICAgICAgICAgIGFzc2VydCh0aGlzW3BhcmFtLnR5cGVdLCBgVW5pbXBsZW1lbnRlZCAke3BhcmFtLnR5cGV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTtcbiAgICAgICAgICAgIHRoaXNbcGFyYW0udHlwZV0ocGFyYW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJhbXMubGVuZ3RoKTtcbiAgICB9XG4gICAgcHJlcGFyZUhhc2goaGFzaCkge1xuICAgICAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuICAgICAgICBpZiAoIXBhaXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuICAgICAgICAgICAgYXNzZXJ0KHRoaXNbdmFsdWUudHlwZV0sIGBVbmltcGxlbWVudGVkICR7dmFsdWUudHlwZX0gb24gVGVtcGxhdGVDb21waWxlcmApO1xuICAgICAgICAgICAgdGhpc1t2YWx1ZS50eXBlXSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVPYmplY3QnLCBudWxsLCBwYWlycy5sZW5ndGgpO1xuICAgIH1cbiAgICBwcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgLy8gcmV0dXJucyB0aGUgc3RhdGljIHZhbHVlIGlmIHRoZSB2YWx1ZSBpcyBzdGF0aWNcbiAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCB2YWx1ZSwgdmFsdWUuY2hhcnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgY2FzZSAnTXVzdGFjaGVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVDb25jYXRQYXJ0cyh2YWx1ZS5wYXJ0cyk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ2NvbmNhdCcsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlcGFyZUNvbmNhdFBhcnRzKHBhcnRzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFtwYXJ0XSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgcGFydC5jaGFycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcnRzLmxlbmd0aCk7XG4gICAgfVxuICAgIGF0dHJpYnV0ZU11c3RhY2hlKFthY3Rpb25dKSB7XG4gICAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgfVxuICAgIG1ldGEobm9kZSkge1xuICAgICAgICBsZXQgbG9jID0gbm9kZS5sb2M7XG4gICAgICAgIGlmICghbG9jKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHsgc291cmNlLCBzdGFydCwgZW5kIH0gPSBsb2M7XG4gICAgICAgIHJldHVybiBbJ2xvYycsIFtzb3VyY2UgfHwgbnVsbCwgW3N0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbl0sIFtlbmQubGluZSwgZW5kLmNvbHVtbl1dXTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc0hlbHBlckludm9jYXRpb24obXVzdGFjaGUpIHtcbiAgICByZXR1cm4gbXVzdGFjaGUucGFyYW1zICYmIG11c3RhY2hlLnBhcmFtcy5sZW5ndGggPiAwIHx8IG11c3RhY2hlLmhhc2ggJiYgbXVzdGFjaGUuaGFzaC5wYWlycy5sZW5ndGggPiAwO1xufVxuZnVuY3Rpb24gaXNTaW1wbGVQYXRoKHsgcGFydHMgfSkge1xuICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDE7XG59XG5mdW5jdGlvbiBpc0xvY2FsKHsgcGFydHMgfSwgc3ltYm9scykge1xuICAgIHJldHVybiBzeW1ib2xzICYmIHN5bWJvbHMuaGFzKHBhcnRzWzBdKTtcbn1cbmZ1bmN0aW9uIGlzWWllbGQocGF0aCkge1xuICAgIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAneWllbGQnO1xufVxuZnVuY3Rpb24gaXNQYXJ0aWFsKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ3BhcnRpYWwnO1xufVxuZnVuY3Rpb24gaXNEZWJ1Z2dlcihwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdkZWJ1Z2dlcic7XG59XG5mdW5jdGlvbiBpc0hhc0Jsb2NrKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jayc7XG59XG5mdW5jdGlvbiBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jay1wYXJhbXMnO1xufVxuZnVuY3Rpb24gaXNCdWlsdEluSGVscGVyKHBhdGgpIHtcbiAgICByZXR1cm4gaXNIYXNCbG9jayhwYXRoKSB8fCBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpO1xufVxuZnVuY3Rpb24gaXNBcmcocGF0aCkge1xuICAgIHJldHVybiAhIXBhdGhbJ2RhdGEnXTtcbn1cbmZ1bmN0aW9uIGFzc2VydElzU2ltcGxlUGF0aChwYXRoLCBsb2MsIGNvbnRleHQpIHtcbiAgICBpZiAoIWlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxcYCR7cGF0aC5vcmlnaW5hbH1cXGAgaXMgbm90IGEgdmFsaWQgbmFtZSBmb3IgYSAke2NvbnRleHR9IG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0uYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRZaWVsZCh7IGhhc2ggfSkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG4gICAgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS5rZXkgIT09ICd0bycgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHlpZWxkIG9ubHkgdGFrZXMgYSBzaW5nbGUgbmFtZWQgYXJndW1lbnQ6ICd0bydgKTtcbiAgICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlYCk7XG4gICAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICdkZWZhdWx0JztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFpcnNbMF0udmFsdWUudmFsdWU7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQYXJ0aWFsKHsgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBsb2MgfSkge1xuICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcnRpYWwgZm91bmQgd2l0aCBubyBhcmd1bWVudHMuIFlvdSBtdXN0IHNwZWNpZnkgYSB0ZW1wbGF0ZSBuYW1lLiAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgICB9IGVsc2UgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcGFydGlhbCBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHMgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfSBlbHNlIGlmICghZXNjYXBlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHt7e3BhcnRpYWwgLi4ufX19IGlzIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSB1c2Uge3twYXJ0aWFsIC4uLn19IGluc3RlYWQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG59XG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UodHlwZSwgeyBwYXJhbXMsIGhhc2gsIGxvYyB9KSB7XG4gICAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICdkZWZhdWx0JztcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgbGV0IHBhcmFtID0gcGFyYW1zWzBdO1xuICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW0udmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWUgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gb25seSB0YWtlcyBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZSh7IHBhcmFtcywgaGFzaCB9KSB7XG4gICAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnZGVmYXVsdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZWJ1Z2dlciBkb2VzIG5vdCB0YWtlIGFueSBwb3NpdGlvbmFsIGFyZ3VtZW50c2ApO1xuICAgIH1cbn0iXX0=

@@ -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 } from '@glimmer/util';
import { dict, unreachable } from '@glimmer/util';
export var SymbolTable = function () {

@@ -52,3 +52,5 @@ function SymbolTable() {

ProgramSymbolTable.prototype.get = function get(_name) {};
ProgramSymbolTable.prototype.get = function get(_name) {
throw unreachable();
};

@@ -337,2 +339,5 @@ ProgramSymbolTable.prototype.getLocalsMap = function getLocalsMap() {

// Frame helpers
TemplateVisitor.prototype.getCurrentFrame = function getCurrentFrame() {

@@ -354,4 +359,2 @@ return this.frameStack[this.frameStack.length - 1];

key: 'currentFrame',
// Frame helpers
get: function () {

@@ -384,2 +387,2 @@ return this.getCurrentFrame();

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUVBLEFBQU8sU0FBZ0IsQUFBSSxBQUFFLFlBQU0sQUFBZSxBQUFDO0FBRW5ELEFBQU0sV0FDSixBQUFNOzs7OztnQkFBQyxBQUFHO0FBQ1IsQUFBTSxlQUFDLElBQUksQUFBa0IsQUFBRSxBQUFDLEFBQ2xDO0FBQUM7OzBCQVlELEFBQUssdUJBQUMsQUFBZ0I7OztBQUNwQixZQUFJLEFBQU8saUJBQVUsQUFBRztBQUFDLEFBQUksbUJBQUksQUFBSSxNQUFDLEFBQVEsU0FBQyxBQUFJLEFBQUMsQUFBQyxBQUFDO1NBQXhDLEFBQU07QUFDcEIsQUFBTSxlQUFDLElBQUksQUFBZ0IsaUJBQUMsQUFBSSxNQUFFLEFBQU0sUUFBRSxBQUFPLEFBQUMsQUFBQyxBQUNyRDtBQUFDLEFBQ0Y7Ozs7QUFFRCxBQUFNLFdBQTBCOzs7QUFBaEM7Ozs7O0FBQ1MsZUFBTyxVQUFhLEFBQUUsQUFBQztBQUV0QixlQUFJLE9BQUcsQUFBQyxBQUFDO0FBQ1QsZUFBSyxRQUFHLEFBQUksQUFBVSxBQUFDO0FBQ3ZCLGVBQU0sU0FBRyxBQUFJLEFBQVUsQUFBQyxBQXlDbEM7O0FBQUM7O2lDQXZDQyxBQUFHLG1CQUFDLEFBQWE7QUFDZixBQUFNLGVBQUMsQUFBSyxBQUFDLEFBQ2Y7QUFBQzs7aUNBRUQsQUFBRyxtQkFBQyxBQUFhLE9BQ2pCLENBQUM7O2lDQUVELEFBQVk7QUFDVixBQUFNLGVBQUMsQUFBRSxBQUFDLEFBQ1o7QUFBQzs7aUNBRUQsQUFBVztBQUNULEFBQU0sZUFBQyxBQUFFLEFBQUMsQUFDWjtBQUFDOztpQ0FFRCxBQUFhLHVDQUFDLEFBQVk7QUFDeEIsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFJLEFBQUMsQUFBQztBQUU3QixBQUFFLEFBQUMsWUFBQyxDQUFDLEFBQUssQUFBQyxPQUFDLEFBQUM7QUFDWCxBQUFLLG9CQUFHLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBSSxBQUFDLFFBQUcsQUFBSSxLQUFDLEFBQVEsQUFBQyxlQUFJLEFBQUksQUFBRSxBQUFDLEFBQUMsQUFDdkQ7QUFBQztBQUVELEFBQU0sZUFBQyxBQUFLLEFBQUMsQUFDZjtBQUFDOztpQ0FFRCxBQUFhLHVDQUFDLEFBQVk7QUFDeEIsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFJLEFBQUMsQUFBQztBQUU5QixBQUFFLEFBQUMsWUFBQyxDQUFDLEFBQUssQUFBQyxPQUFDLEFBQUM7QUFDWCxBQUFLLG9CQUFHLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBSSxBQUFDLFFBQUcsQUFBSSxLQUFDLEFBQVEsQUFBQyxlQUFJLEFBQUksQUFBRSxBQUFDLEFBQUMsQUFDeEQ7QUFBQztBQUVELEFBQU0sZUFBQyxBQUFLLEFBQUMsQUFDZjtBQUFDOztpQ0FFRCxBQUFRLDZCQUFDLEFBQWtCO0FBQ3pCLEFBQUksYUFBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLEFBQVUsQUFBQyxBQUFDO0FBQzlCLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFFLEFBQUMsQUFDckI7QUFBQyxBQUNGOzs7RUE5Q3VDLEFBQVc7QUFnRG5ELEFBQU0sV0FBd0I7OztBQUM1Qiw4QkFBb0IsQUFBbUIsUUFBUyxBQUFpQixTQUFTLEFBQWU7OztzREFDdkYsQUFBSyxBQUFFLEFBQUM7O0FBRFUsZUFBTSxTQUFOLEFBQU0sQUFBYTtBQUFTLGVBQU8sVUFBUCxBQUFPLEFBQVU7QUFBUyxlQUFLLFFBQUwsQUFBSyxBQUFVLEFBRXpGOztBQUFDOzsrQkFFRCxBQUFHLG1CQUFDLEFBQVk7QUFDZCxBQUFNLGVBQUUsQUFBSSxLQUFDLEFBQU8sUUFBQyxBQUFPLFFBQUMsQUFBSSxBQUFDLFVBQUssQ0FBQyxBQUFDLEFBQUMsQ0FBbkMsSUFBdUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFHLElBQUMsQUFBSSxBQUFDLEFBQUMsQUFDdEU7QUFBQzs7K0JBRUQsQUFBRyxtQkFBQyxBQUFZO0FBQ2QsWUFBSSxBQUFJLE9BQUcsQUFBSSxLQUFDLEFBQU8sUUFBQyxBQUFPLFFBQUMsQUFBSSxBQUFDLEFBQUM7QUFDdEMsQUFBTSxlQUFDLEFBQUksU0FBSyxDQUFDLEFBQUMsSUFBRyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUcsSUFBQyxBQUFJLEFBQUMsUUFBRyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUksQUFBQyxBQUFDLEFBQ2hFO0FBQUM7OytCQUVELEFBQVk7OztBQUNWLFlBQUksQUFBSSxPQUFHLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBWSxBQUFFLEFBQUM7QUFDdEMsQUFBSSxhQUFDLEFBQU8sUUFBQyxBQUFPO0FBQUMsQUFBTSxtQkFBSSxBQUFJLEtBQUMsQUFBTSxBQUFDLFVBQUcsQUFBSSxPQUFDLEFBQUcsSUFBQyxBQUFNLEFBQUMsQUFBQyxBQUFDOztBQUNoRSxBQUFNLGVBQUMsQUFBSSxBQUFDLEFBQ2Q7QUFBQzs7K0JBRUQsQUFBVztBQUNULFlBQUksQUFBTSxTQUFHLEFBQUksS0FBQyxBQUFZLEFBQUUsQUFBQztBQUNqQyxBQUFNLHNCQUFRLEFBQUksS0FBQyxBQUFNLEFBQUMsUUFBQyxBQUFHO0FBQUMsQUFBTSxtQkFBSSxBQUFNLE9BQUMsQUFBTSxBQUFDLEFBQUMsQUFBQyxBQUMzRDtTQURTLEFBQU07QUFDZDs7K0JBRUQsQUFBYSx1Q0FBQyxBQUFZO0FBQ3hCLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQWEsY0FBQyxBQUFJLEFBQUMsQUFBQyxBQUN6QztBQUFDOzsrQkFFRCxBQUFhLHVDQUFDLEFBQVk7QUFDeEIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBYSxjQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3pDO0FBQUM7OytCQUVELEFBQVEsNkJBQUMsQUFBa0I7QUFDekIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBUSxTQUFDLEFBQVUsQUFBQyxBQUFDLEFBQzFDO0FBQUMsQUFDRjs7O0VBcENxQyxBQUFXO0FBc0NqRCxBQWdERyxBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQUFBOzs7QUFDUyxTQUFVLGFBQW1CLEFBQUksQUFBQztBQUNsQyxTQUFRLFdBQXVCLEFBQUksQUFBQztBQUNwQyxTQUFVLGFBQW1CLEFBQUksQUFBQztBQUNsQyxTQUFVLGFBQW1CLEFBQUksQUFBQztBQUNsQyxTQUFrQixxQkFBRyxBQUFDLEFBQUM7QUFDdkIsU0FBYSxnQkFBRyxBQUFDLEFBQUM7QUFDbEIsU0FBTyxVQUFhLEFBQUUsQUFBQztBQUN2QixTQUFtQixzQkFBcUIsQUFBSSxBQUFDO0FBQzdDLFNBQU8sVUFBd0IsQUFBSSxBQUFDLEFBQzdDO0FBQUMsQUE4QkQsQUFBTSxBQUFDLEFBQU87OztBQUFkOzs7QUFDVSxhQUFVLGFBQVksQUFBRSxBQUFDO0FBQzFCLGFBQU8sVUFBYSxBQUFFLEFBQUM7QUFDdEIsYUFBWSxlQUFHLENBQUMsQUFBQyxBQUFDLEFBOEo1QjtBQUFDOzs4QkE1SkMsQUFBSyx1QkFBQyxBQUFrQjtBQUN0QixBQUFJLGFBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxNQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3hCO0FBQUM7QUFFRCxBQUFvQjs7OzhCQUVwQixBQUFPLDJCQUFDLEFBQW9COzs7QUFDMUIsQUFBSSxhQUFDLEFBQVksQUFBRSxBQUFDO0FBRXBCLFlBQUksQUFBVyxjQUFHLEFBQUksS0FBQyxBQUFlLEFBQUUsQUFBQztBQUN6QyxZQUFJLEFBQVksZUFBRyxBQUFJLEtBQUMsQUFBUyxBQUFFLEFBQUM7QUFFcEMsQUFBRSxBQUFDLFlBQUMsQ0FBQyxBQUFXLEFBQUMsYUFBQyxBQUFDO0FBQ2pCLEFBQU8sb0JBQUMsQUFBUyxBQUFDLGFBQUcsQUFBVyxZQUFDLEFBQUcsQUFBRSxBQUFDLEFBQ3pDO0FBQUMsQUFBQyxBQUFJLGVBQUMsQUFBQztBQUNOLEFBQU8sb0JBQUMsQUFBUyxBQUFDLGFBQUcsQUFBVyxZQUFDLEFBQVEsUUFBQyxBQUFLLE1BQUMsQUFBTyxRQUFDLEFBQVcsQUFBQyxBQUFDLEFBQ3ZFO0FBQUM7QUFFRCxZQUFJLEFBQVM7WUFBRSxBQUFPLEFBQUM7QUFFdkIsQUFBRSxBQUFDLFlBQUMsQUFBSSxLQUFDLEFBQVksaUJBQUssQUFBQyxBQUFDLEdBQUMsQUFBQztBQUM1QixBQUFTLHdCQUFHLEFBQWMsQUFBQztBQUMzQixBQUFPLHNCQUFHLEFBQVksQUFBQyxBQUN6QjtBQUFDLEFBQUMsQUFBSSxlQUFDLEFBQUM7QUFDTixBQUFTLHdCQUFHLEFBQVksQUFBQztBQUN6QixBQUFPLHNCQUFHLEFBQVUsQUFBQyxBQUN2QjtBQUFDO0FBRUQsQUFBWSxxQkFBQyxBQUFVLGFBQUcsQUFBTyxBQUFDO0FBQ2xDLEFBQVkscUJBQUMsQUFBUSxXQUFHLEFBQU8sUUFBQyxBQUFJLEFBQUM7QUFDckMsQUFBWSxxQkFBQyxBQUFVLGFBQUcsQUFBTyxRQUFDLEFBQUksS0FBQyxBQUFNLEFBQUM7QUFDOUMsQUFBWSxxQkFBQyxBQUFtQixzQkFBRyxBQUFFLEFBQUM7QUFDdEMsQUFBWSxxQkFBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLENBQUMsQUFBTyxTQUFFLENBQUMsQUFBTyxTQUFFLEFBQUksS0FBQyxBQUFZLEFBQUMsQUFBVyxBQUFDLEFBQUM7QUFDN0UsQUFBWSxxQkFBQyxBQUFPLFVBQUcsQUFBTyxRQUFDLEFBQVMsQUFBQyxBQUFDO0FBRTFDLEFBQUcsQUFBQyxhQUFDLElBQUksQUFBQyxJQUFHLEFBQU8sUUFBQyxBQUFJLEtBQUMsQUFBTSxTQUFHLEFBQUMsR0FBRSxBQUFDLEtBQUksQUFBQyxHQUFFLEFBQUMsQUFBRSxLQUFFLEFBQUM7QUFDbEQsQUFBWSx5QkFBQyxBQUFVLGFBQUcsQUFBQyxBQUFDO0FBQzVCLEFBQUksaUJBQUMsQUFBSyxNQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQUFBQyxBQUFDLEFBQUMsQUFBQyxBQUM5QjtBQUFDO0FBRUQsQUFBWSxxQkFBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLENBQUMsQUFBUyxXQUFFLENBQ3BDLEFBQU8sU0FBRSxBQUFZLGFBQUMsQUFBa0Isb0JBQ3hDLEFBQVksYUFBQyxBQUFtQixvQkFBQyxBQUFPLEFBQUUsQUFDM0MsQUFBVyxBQUFDLEFBQUM7QUFDZCxBQUFJLGFBQUMsQUFBUSxBQUFFLEFBQUM7QUFFaEIsQUFBSSxhQUFDLEFBQVksQUFBRSxBQUFDO0FBRXBCLEFBQTJEO0FBQzNELEFBQUUsQUFBQyxZQUFDLEFBQVcsQUFBQyxhQUFDLEFBQUM7QUFBQyxBQUFXLHdCQUFDLEFBQWtCLEFBQUUsQUFBQyxBQUFDO0FBQUM7QUFDdEQsQUFBSSx5QkFBQyxBQUFPLFNBQUMsQUFBSSxBQUFDLHFCQUFHLEFBQVksYUFBQyxBQUFPLFFBQUMsQUFBTyxBQUFFLEFBQUMsQUFBQyxBQUN2RDtBQUFDOzs4QkFFRCxBQUFXLG1DQUFDLEFBQXdCOzs7QUFDbEMsWUFBSSxBQUFXLGNBQUcsQUFBSSxLQUFDLEFBQVksQUFBQztBQUNwQyxZQUFJLEFBQVksZUFBRyxBQUFJLEtBQUMsQUFBUyxBQUFFLEFBQUM7QUFFcEMsQUFBWSxxQkFBQyxBQUFVLGFBQUcsQUFBTyxBQUFDO0FBQ2xDLEFBQVkscUJBQUMsQUFBUSxXQUFHLEFBQU8sUUFBQyxBQUFRLEFBQUM7QUFDekMsQUFBWSxxQkFBQyxBQUFVLGFBQUcsQUFBTyxRQUFDLEFBQVEsU0FBQyxBQUFNLEFBQUM7QUFDbEQsQUFBWSxxQkFBQyxBQUFhLGlCQUFJLEFBQU8sUUFBQyxBQUFTLFVBQUMsQUFBTSxBQUFDO0FBQ3ZELEFBQVkscUJBQUMsQUFBbUIsc0JBQUcsQUFBRSxBQUFDO0FBQ3RDLEFBQVkscUJBQUMsQUFBTyxVQUFHLEFBQU8sUUFBQyxBQUFTLEFBQUMsYUFBRyxBQUFXLFlBQUMsQUFBUSxRQUFDLEFBQUssTUFBQyxBQUFPLFFBQUMsQUFBVyxBQUFDLEFBQUM7QUFFNUYsWUFBSSxBQUFVLGFBQXNDLENBQ2xELEFBQU8sU0FDUCxBQUFXLFlBQUMsQUFBVyxZQUN2QixBQUFXLFlBQUMsQUFBVyxBQUN4QixBQUFDO0FBRUYsQUFBWSxxQkFBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLENBQUMsQUFBYyxnQkFBRSxBQUFVLEFBQUMsQUFBQyxBQUFDO0FBRXhELEFBQUcsQUFBQyxhQUFDLElBQUksQUFBQyxJQUFHLEFBQU8sUUFBQyxBQUFVLFdBQUMsQUFBTSxTQUFHLEFBQUMsR0FBRSxBQUFDLEtBQUksQUFBQyxHQUFFLEFBQUMsQUFBRSxLQUFFLEFBQUM7QUFDeEQsQUFBSSxpQkFBQyxBQUFLLE1BQUMsQUFBTyxRQUFDLEFBQVUsV0FBQyxBQUFDLEFBQUMsQUFBQyxBQUFDLEFBQ3BDO0FBQUM7QUFFRCxBQUFHLEFBQUMsYUFBQyxJQUFJLEFBQUMsS0FBRyxBQUFPLFFBQUMsQUFBUSxTQUFDLEFBQU0sU0FBRyxBQUFDLEdBQUUsQUFBQyxNQUFJLEFBQUMsR0FBRSxBQUFDLEFBQUUsTUFBRSxBQUFDO0FBQ3RELEFBQVkseUJBQUMsQUFBVSxhQUFHLEFBQUMsQUFBQztBQUM1QixBQUFJLGlCQUFDLEFBQUssTUFBQyxBQUFPLFFBQUMsQUFBUSxTQUFDLEFBQUMsQUFBQyxBQUFDLEFBQUMsQUFDbEM7QUFBQztBQUVELFlBQUksQUFBSSxPQUFHLENBQUMsQUFBYSxBQUFFLEFBQUMseUJBQUcsQUFBVSxhQUFFLEFBQVksYUFBQyxBQUFhLGVBQUUsQUFBWSxhQUFDLEFBQW1CLG9CQUFDLEFBQU8sQUFBRSxBQUFDLEFBQXVCLEFBQUM7QUFDMUksQUFBWSxxQkFBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDO0FBRWhDLEFBQUksYUFBQyxBQUFRLEFBQUUsQUFBQztBQUVoQixBQUEwRDtBQUMxRCxBQUFFLEFBQUMsWUFBQyxBQUFZLGFBQUMsQUFBYSxnQkFBRyxBQUFDLEFBQUMsR0FBQyxBQUFDO0FBQUMsQUFBVyx3QkFBQyxBQUFhLEFBQUUsQUFBQyxBQUFDO0FBQUM7QUFDcEUsQUFBVyxvQkFBQyxBQUFrQixzQkFBSSxBQUFZLGFBQUMsQUFBa0IsQUFBQztBQUNsRSxBQUFXLDRDQUFDLEFBQU8sU0FBQyxBQUFJLEFBQUMsaUNBQUcsQUFBWSxhQUFDLEFBQU8sQUFBQyxBQUFDLEFBQ3BEO0FBQUM7OzhCQUVELEFBQVEsNkJBQUMsQUFBa0I7QUFDekIsQUFBRSxBQUFDLFlBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFJLFNBQUssQUFBVSxBQUFDLFlBQUMsQUFBQztBQUNuQyxBQUFJLGlCQUFDLEFBQVksYUFBQyxBQUFhLEFBQUUsQUFBQyxBQUNwQztBQUFDLEFBQ0g7QUFBQyxBQUFDOzs4QkFFRixBQUFRLDZCQUFDLEFBQWtCO0FBQ3pCLFlBQUksQUFBSyxRQUFHLEFBQUksS0FBQyxBQUFZLEFBQUM7QUFDOUIsQUFBRSxBQUFDLFlBQUMsQUFBSSxLQUFDLEFBQUssVUFBSyxBQUFFLEFBQUMsSUFBQyxBQUFDO0FBQ3RCLEFBQUssa0JBQUMsQUFBb0Isb0JBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFLLE1BQUMsQUFBUyxVQUFFLEFBQUksQUFBQyxBQUFDLEFBQUMsQUFDckU7QUFBQztBQUNELEFBQUssY0FBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLENBQUMsQUFBTSxRQUFFLENBQUMsQUFBSSxNQUFFLEFBQUssTUFBQyxBQUFVLFlBQUUsQUFBSyxNQUFDLEFBQVUsQUFBQyxBQUFXLEFBQUMsQUFBQyxBQUNyRjtBQUFDLEFBQUM7OzhCQUVGLEFBQWMseUNBQUMsQUFBd0I7QUFDckMsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQVksQUFBQztBQUU5QixBQUFLLGNBQUMsQUFBYSxBQUFFLEFBQUM7QUFDdEIsQUFBSyxjQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQ0FBQyxBQUFPLFNBQUUsQ0FBQyxBQUFJLE1BQUUsQUFBSyxNQUFDLEFBQVUsWUFBRSxBQUFLLE1BQUMsQUFBVSxBQUFDLEFBQVcsQUFBQyxBQUFDO0FBRXBGLEFBQUUsQUFBQyxZQUFDLEFBQUksS0FBQyxBQUFPLEFBQUMsU0FBQyxBQUFDO0FBQUMsQUFBSSxpQkFBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQU8sQUFBQyxBQUFDLEFBQUM7QUFBQztBQUMvQyxBQUFFLEFBQUMsWUFBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLFNBQUMsQUFBQztBQUFDLEFBQUksaUJBQUMsQUFBSyxNQUFDLEFBQUksS0FBQyxBQUFPLEFBQUMsQUFBQyxBQUFDO0FBQUMsQUFDakQ7QUFBQyxBQUFDOzs4QkFFRixBQUFnQiw2Q0FBQyxBQUEwQjtBQUN6QyxZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBWSxBQUFDO0FBQzlCLEFBQUssY0FBQyxBQUFhLEFBQUUsQUFBQztBQUN0QixBQUFLLGNBQUMsQUFBTyxRQUFDLEFBQUksS0FBQyxDQUFDLEFBQVUsWUFBRSxDQUFDLEFBQUksTUFBRSxBQUFLLE1BQUMsQUFBVSxZQUFFLEFBQUssTUFBQyxBQUFVLEFBQUMsQUFBVyxBQUFDLEFBQUMsQUFDekY7QUFBQyxBQUFDOzs4QkFFRixBQUFnQiw2Q0FBQyxBQUEwQjtBQUN6QyxZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBWSxBQUFDO0FBQzlCLEFBQUssY0FBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLENBQUMsQUFBUyxXQUFFLENBQUMsQUFBSSxNQUFFLEFBQUssTUFBQyxBQUFVLFlBQUUsQUFBSyxNQUFDLEFBQVUsQUFBQyxBQUFXLEFBQUMsQUFBQyxBQUN4RjtBQUFDLEFBQUM7OzhCQUVGLEFBQXdCO0FBQ3RCLEFBQW1FLEFBQ3JFO0FBQUMsQUFBQzs7OEJBRUYsQUFBaUIsK0NBQUMsQUFBK0I7QUFDL0MsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQVksQUFBQztBQUM5QixBQUFLLGNBQUMsQUFBYSxBQUFFLEFBQUM7QUFDdEIsQUFBSyxjQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQ0FBQyxBQUFVLFlBQUUsQ0FBQyxBQUFRLFVBQUUsQUFBSyxNQUFDLEFBQVUsWUFBRSxBQUFLLE1BQUMsQUFBVSxBQUFDLEFBQVcsQUFBQyxBQUFDLEFBQzdGO0FBQUMsQUFBQzs7OEJBUU0sQUFBZTtBQUNyQixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFJLEtBQUMsQUFBVSxXQUFDLEFBQU0sU0FBRyxBQUFDLEFBQUMsQUFBQyxBQUNyRDtBQUFDOzs4QkFFTyxBQUFTO0FBQ2YsWUFBSSxBQUFLLFFBQUcsSUFBSSxBQUFLLEFBQUUsQUFBQztBQUN4QixBQUFJLGFBQUMsQUFBVSxXQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQztBQUM1QixBQUFNLGVBQUMsQUFBSyxBQUFDLEFBQ2Y7QUFBQzs7OEJBRU8sQUFBUTtBQUNkLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBVSxXQUFDLEFBQUcsQUFBRSxBQUFDLEFBQy9CO0FBQUMsQUFDRjs7Ozs7QUFuQkMsQUFBZ0IsQUFFaEIsQUFBWSxBQUFZOztBQUN0QixBQUFNLG1CQUFDLEFBQUksS0FBQyxBQUFlLEFBQUUsQUFBQyxBQUNoQztBQUFDOzs7OztBQWlCSCxBQUFnRTtBQUNoRSxBQUFtRDs7OztBQUNuRCxvQkFBb0IsQUFBaUIsT0FBRSxBQUF1QztBQUM1RSxRQUFJLEFBQUssUUFBRyxDQUFDLEFBQUMsQUFBQztBQUVmLEFBQUcsQUFBQyxTQUFDLElBQUksQUFBQyxJQUFHLEFBQUMsR0FBRSxBQUFDLElBQUcsQUFBSyxNQUFDLEFBQU0sUUFBRSxBQUFDLEFBQUUsS0FBRSxBQUFDO0FBQ3RDLFlBQUksQUFBSSxPQUFHLEFBQUssTUFBQyxBQUFDLEFBQUMsQUFBQztBQUVwQixBQUFFLEFBQUMsWUFBQyxBQUFJLEtBQUMsQUFBSSxTQUFLLEFBQVUsY0FBSSxBQUFJLEtBQUMsQUFBSSxTQUFLLEFBQWEsQUFBQyxlQUFDLEFBQUM7QUFDNUQsQUFBUSxBQUFDLEFBQ1g7QUFBQyxBQUFDLEFBQUksZUFBQyxBQUFDO0FBQ04sQUFBSyxBQUFFLEFBQUMsQUFDVjtBQUFDO0FBRUQsQUFBRSxBQUFDLFlBQUMsQUFBSSxTQUFLLEFBQU8sQUFBQyxTQUFDLEFBQUM7QUFDckIsQUFBTSxtQkFBQyxBQUFLLEFBQUMsQUFDZjtBQUFDLEFBQ0g7QUFBQztBQUVELEFBQU0sV0FBQyxDQUFDLEFBQUMsQUFBQyxBQUNaO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQ29yZSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IERpY3QsIE9wdGlvbiwgZGljdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3ltYm9sVGFibGUge1xuICBzdGF0aWMgdG9wKCk6IFByb2dyYW1TeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9ncmFtU3ltYm9sVGFibGUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj47XG4gIGFic3RyYWN0IGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm87XG5cbiAgYWJzdHJhY3QgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgY2hpbGQobG9jYWxzOiBzdHJpbmdbXSk6IEJsb2NrU3ltYm9sVGFibGUge1xuICAgIGxldCBzeW1ib2xzID0gbG9jYWxzLm1hcChuYW1lID0+IHRoaXMuYWxsb2NhdGUobmFtZSkpO1xuICAgIHJldHVybiBuZXcgQmxvY2tTeW1ib2xUYWJsZSh0aGlzLCBsb2NhbHMsIHN5bWJvbHMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc2l6ZSA9IDE7XG4gIHByaXZhdGUgbmFtZWQgPSBkaWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBkaWN0PG51bWJlcj4oKTtcblxuICBoYXMoX25hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldChfbmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV07XG5cbiAgICBpZiAoIW5hbWVkKSB7XG4gICAgICBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGBAJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBuYW1lZDtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXTtcblxuICAgIGlmICghYmxvY2spIHtcbiAgICAgIGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGAmJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBibG9jaztcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdGhpcy5zeW1ib2xzLnB1c2goaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSsrO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbG9ja1N5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU3ltYm9sVGFibGUsIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSwgcHVibGljIHNsb3RzOiBudW1iZXJbXSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHx8IHRoaXMucGFyZW50LmhhcyhuYW1lKTtcbiAgfVxuXG4gIGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBzbG90ID0gdGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSk7XG4gICAgcmV0dXJuIHNsb3QgPT09IC0xID8gdGhpcy5wYXJlbnQuZ2V0KG5hbWUpIDogdGhpcy5zbG90c1tzbG90XTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIGxldCBkaWN0ID0gdGhpcy5wYXJlbnQuZ2V0TG9jYWxzTWFwKCk7XG4gICAgdGhpcy5zeW1ib2xzLmZvckVhY2goc3ltYm9sID0+IGRpY3Rbc3ltYm9sXSA9IHRoaXMuZ2V0KHN5bWJvbCkpO1xuICAgIHJldHVybiBkaWN0O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgbGV0IGxvY2FscyA9IHRoaXMuZ2V0TG9jYWxzTWFwKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxvY2FscykubWFwKHN5bWJvbCA9PiBsb2NhbHNbc3ltYm9sXSk7XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlTmFtZWQobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlQmxvY2sobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZShpZGVudGlmaWVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGluIGFuIEFTVCBhbmQgb3V0cHV0cyBhIGxpc3Qgb2YgYWN0aW9ucyB0byBiZSBjb25zdW1lZFxuICogYnkgYSBjb21waWxlci4gRm9yIGV4YW1wbGUsIHRoZSB0ZW1wbGF0ZVxuICpcbiAqICAgICBmb297e2Jhcn19PGRpdj5iYXo8L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAzXV0sXG4gKiAgICAgIFsnbXVzdGFjaGUnLCBbbXVzdGFjaGVOb2RlLCAxLCAzXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDMsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhpcyB2aXNpdG9yIHdhbGtzIHRoZSBBU1QgZGVwdGggZmlyc3QgYW5kIGJhY2t3YXJkcy4gQXNcbiAqIGEgcmVzdWx0IHRoZSBib3R0b20tbW9zdCBjaGlsZCB0ZW1wbGF0ZSB3aWxsIGFwcGVhciBhdCB0aGVcbiAqIHRvcCBvZiB0aGUgYWN0aW9ucyBsaXN0IHdoZXJlYXMgdGhlIHJvb3QgdGVtcGxhdGUgd2lsbCBhcHBlYXJcbiAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QuIEZvciBleGFtcGxlLFxuICpcbiAqICAgICA8ZGl2Pnt7I2lmfX1mb297e2Vsc2V9fWJhcjxiPjwvYj57ey9pZn19PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMiwgMF1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyLCAwXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAyXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDEsIDFdXSxcbiAqICAgICAgWydibG9jaycsIFtibG9ja05vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgaXMgbWFpbnRhaW5lZCBieSBhIHN0YWNrIG9mIGZyYW1lcy5cbiAqIFdoZW5ldmVyIGEgbm9kZSB3aXRoIGNoaWxkcmVuIGlzIGVudGVyZWQgKGVpdGhlciBhIFByb2dyYW1Ob2RlXG4gKiBvciBhbiBFbGVtZW50Tm9kZSkgYSBmcmFtZSBpcyBwdXNoZWQgb250byB0aGUgc3RhY2suIFRoZSBmcmFtZVxuICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgb2YgdGhhdFxuICogbm9kZS4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAtIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoaWxkIG5vZGUgYmVpbmcgdmlzaXRlZFxuICogICAtIHRoZSBudW1iZXIgb2YgbXVzdGFjaGVzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGNoaWxkIG5vZGVzXG4gKiAgIC0gdGhlIGxpc3Qgb2YgYWN0aW9ucyBnZW5lcmF0ZWQgYnkgaXRzIGNoaWxkIG5vZGVzXG4gKi9cblxuY2xhc3MgRnJhbWUge1xuICBwdWJsaWMgcGFyZW50Tm9kZTogT3B0aW9uPE9iamVjdD4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRyZW46IE9wdGlvbjxBU1QuTm9kZVtdPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZEluZGV4OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZENvdW50OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZFRlbXBsYXRlQ291bnQgPSAwO1xuICBwdWJsaWMgbXVzdGFjaGVDb3VudCA9IDA7XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgYmxhbmtDaGlsZFRleHROb2RlczogT3B0aW9uPG51bWJlcltdPiA9IG51bGw7XG4gIHB1YmxpYyBzeW1ib2xzOiBPcHRpb248U3ltYm9sVGFibGU+ID0gbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb24ge1xuICBleHBvcnQgdHlwZSBTdGFydFByb2dyYW0gPSBbJ3N0YXJ0UHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRQcm9ncmFtID0gWydlbmRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgU3RhcnRCbG9jayA9IFsnc3RhcnRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRCbG9jayA9IFsnZW5kQmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBCbG9jayA9IFsnYmxvY2snLCBbQVNULkJsb2NrU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBNdXN0YWNoZSA9IFsnbXVzdGFjaGUnLCBbQVNULk11c3RhY2hlU3RhdGVtZW50IHwgQVNULlBhcnRpYWxTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE9wZW5FbGVtZW50ID0gWydvcGVuRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIENsb3NlRWxlbWVudCA9IFsnY2xvc2VFbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgVGV4dCA9IFsndGV4dCcsIFtBU1QuVGV4dE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIENvbW1lbnQgPSBbJ2NvbW1lbnQnLCBbQVNULkNvbW1lbnRTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uID1cbiAgICAgIFN0YXJ0UHJvZ3JhbVxuICAgIHwgRW5kUHJvZ3JhbVxuICAgIHwgU3RhcnRCbG9ja1xuICAgIHwgRW5kQmxvY2tcbiAgICB8IEJsb2NrXG4gICAgfCBNdXN0YWNoZVxuICAgIHwgT3BlbkVsZW1lbnRcbiAgICB8IENsb3NlRWxlbWVudFxuICAgIHwgVGV4dFxuICAgIHwgQ29tbWVudFxuICAgIDtcbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uID0gQWN0aW9uLkFjdGlvbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVWaXNpdG9yIHtcbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBGcmFtZVtdID0gW107XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIHByb2dyYW1EZXB0aCA9IC0xO1xuXG4gIHZpc2l0KG5vZGU6IEFTVC5CYXNlTm9kZSkge1xuICAgIHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgfVxuXG4gIC8vIFRyYXZlcnNhbCBtZXRob2RzXG5cbiAgUHJvZ3JhbShwcm9ncmFtOiBBU1QuUHJvZ3JhbSkge1xuICAgIHRoaXMucHJvZ3JhbURlcHRoKys7XG5cbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmdldEN1cnJlbnRGcmFtZSgpO1xuICAgIGxldCBwcm9ncmFtRnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgaWYgKCFwYXJlbnRGcmFtZSkge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gU3ltYm9sVGFibGUudG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKHByb2dyYW0uYmxvY2tQYXJhbXMpO1xuICAgIH1cblxuICAgIGxldCBzdGFydFR5cGUsIGVuZFR5cGU7XG5cbiAgICBpZiAodGhpcy5wcm9ncmFtRGVwdGggPT09IDApIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydFByb2dyYW0nO1xuICAgICAgZW5kVHlwZSA9ICdlbmRQcm9ncmFtJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0QmxvY2snO1xuICAgICAgZW5kVHlwZSA9ICdlbmRCbG9jayc7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLnBhcmVudE5vZGUgPSBwcm9ncmFtO1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZHJlbiA9IHByb2dyYW0uYm9keTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRDb3VudCA9IHByb2dyYW0uYm9keS5sZW5ndGg7XG4gICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtlbmRUeXBlLCBbcHJvZ3JhbSwgdGhpcy5wcm9ncmFtRGVwdGhdXSBhcyBBY3Rpb24pO1xuICAgIHByb2dyYW1GcmFtZS5zeW1ib2xzID0gcHJvZ3JhbVsnc3ltYm9scyddO1xuXG4gICAgZm9yIChsZXQgaSA9IHByb2dyYW0uYm9keS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgcHJvZ3JhbUZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChwcm9ncmFtLmJvZHlbaV0pO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW3N0YXJ0VHlwZSwgW1xuICAgICAgcHJvZ3JhbSwgcHJvZ3JhbUZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCxcbiAgICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKVxuICAgIF1dIGFzIEFjdGlvbik7XG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgdGhpcy5wcm9ncmFtRGVwdGgtLTtcblxuICAgIC8vIFB1c2ggdGhlIGNvbXBsZXRlZCB0ZW1wbGF0ZSBpbnRvIHRoZSBnbG9iYWwgYWN0aW9ucyBsaXN0XG4gICAgaWYgKHBhcmVudEZyYW1lKSB7IHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCsrOyB9XG4gICAgdGhpcy5hY3Rpb25zLnB1c2goLi4ucHJvZ3JhbUZyYW1lLmFjdGlvbnMucmV2ZXJzZSgpKTtcbiAgfVxuXG4gIEVsZW1lbnROb2RlKGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGxldCBlbGVtZW50RnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgZWxlbWVudEZyYW1lLnBhcmVudE5vZGUgPSBlbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkQ291bnQgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCArPSBlbGVtZW50Lm1vZGlmaWVycy5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBlbGVtZW50RnJhbWUuc3ltYm9scyA9IGVsZW1lbnRbJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKGVsZW1lbnQuYmxvY2tQYXJhbXMpO1xuXG4gICAgbGV0IGFjdGlvbkFyZ3M6IFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZEluZGV4ISxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkQ291bnQhXG4gICAgXTtcblxuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2goWydjbG9zZUVsZW1lbnQnLCBhY3Rpb25BcmdzXSk7XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuYXR0cmlidXRlc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGVsZW1lbnRGcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5jaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgbGV0IG9wZW4gPSBbJ29wZW5FbGVtZW50JywgWy4uLmFjdGlvbkFyZ3MsIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50LCBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKCldXSBhcyBBY3Rpb24uT3BlbkVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChvcGVuKTtcblxuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSB0aGUgZWxlbWVudCdzIGZyYW1lIHN0YXRlIHRvIHRoZSBwYXJlbnQgZnJhbWVcbiAgICBpZiAoZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgPiAwKSB7IHBhcmVudEZyYW1lLm11c3RhY2hlQ291bnQrKzsgfVxuICAgIHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCArPSBlbGVtZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50O1xuICAgIHBhcmVudEZyYW1lLmFjdGlvbnMucHVzaCguLi5lbGVtZW50RnJhbWUuYWN0aW9ucyk7XG4gIH1cblxuICBBdHRyTm9kZShhdHRyOiBBU1QuQXR0ck5vZGUpIHtcbiAgICBpZiAoYXR0ci52YWx1ZS50eXBlICE9PSAnVGV4dE5vZGUnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgfVxuICB9O1xuXG4gIFRleHROb2RlKHRleHQ6IEFTVC5UZXh0Tm9kZSkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGlmICh0ZXh0LmNoYXJzID09PSAnJykge1xuICAgICAgZnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyEucHVzaChkb21JbmRleE9mKGZyYW1lLmNoaWxkcmVuISwgdGV4dCkpO1xuICAgIH1cbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWyd0ZXh0JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIEJsb2NrU3RhdGVtZW50KG5vZGU6IEFTVC5CbG9ja1N0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2Jsb2NrJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuXG4gICAgaWYgKG5vZGUuaW52ZXJzZSkgeyB0aGlzLnZpc2l0KG5vZGUuaW52ZXJzZSk7IH1cbiAgICBpZiAobm9kZS5wcm9ncmFtKSB7IHRoaXMudmlzaXQobm9kZS5wcm9ncmFtKTsgfVxuICB9O1xuXG4gIFBhcnRpYWxTdGF0ZW1lbnQobm9kZTogQVNULlBhcnRpYWxTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQ29tbWVudFN0YXRlbWVudCh0ZXh0OiBBU1QuQ29tbWVudFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2NvbW1lbnQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgTXVzdGFjaGVDb21tZW50U3RhdGVtZW50KCkge1xuICAgIC8vIEludGVudGlvbmFsIGVtcHR5OiBIYW5kbGViYXJzIGNvbW1lbnRzIHNob3VsZCBub3QgYWZmZWN0IG91dHB1dC5cbiAgfTtcblxuICBNdXN0YWNoZVN0YXRlbWVudChtdXN0YWNoZTogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW211c3RhY2hlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICAvLyBGcmFtZSBoZWxwZXJzXG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudEZyYW1lKCk6IEZyYW1lIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZyYW1lKCk6IE9wdGlvbjxGcmFtZT4ge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2tbdGhpcy5mcmFtZVN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoRnJhbWUoKSB7XG4gICAgbGV0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5mcmFtZVN0YWNrLnB1c2goZnJhbWUpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wRnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBgZG9tTm9kZWAgaW4gdGhlIGBub2Rlc2AgYXJyYXksIHNraXBwaW5nXG4vLyBvdmVyIGFueSBub2RlcyB3aGljaCBkbyBub3QgcmVwcmVzZW50IERPTSBub2Rlcy5cbmZ1bmN0aW9uIGRvbUluZGV4T2Yobm9kZXM6IEFTVC5Ob2RlW10sIGRvbU5vZGU6IEFTVC5UZXh0Tm9kZSB8IEFTVC5FbGVtZW50Tm9kZSkge1xuICBsZXQgaW5kZXggPSAtMTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcblxuICAgIGlmIChub2RlLnR5cGUgIT09ICdUZXh0Tm9kZScgJiYgbm9kZS50eXBlICE9PSAnRWxlbWVudE5vZGUnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gZG9tTm9kZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wbGF0ZS12aXNpdG9yLmpzIl0sIm5hbWVzIjpbImRpY3QiLCJ1bnJlYWNoYWJsZSIsIlN5bWJvbFRhYmxlIiwidG9wIiwiUHJvZ3JhbVN5bWJvbFRhYmxlIiwiY2hpbGQiLCJsb2NhbHMiLCJzeW1ib2xzIiwibWFwIiwiYWxsb2NhdGUiLCJuYW1lIiwiQmxvY2tTeW1ib2xUYWJsZSIsImFyZ3VtZW50cyIsInNpemUiLCJuYW1lZCIsImJsb2NrcyIsImhhcyIsIl9uYW1lIiwiZ2V0IiwiZ2V0TG9jYWxzTWFwIiwiZ2V0RXZhbEluZm8iLCJhbGxvY2F0ZU5hbWVkIiwiYWxsb2NhdGVCbG9jayIsImJsb2NrIiwiaWRlbnRpZmllciIsInB1c2giLCJwYXJlbnQiLCJzbG90cyIsImluZGV4T2YiLCJzbG90IiwiZm9yRWFjaCIsInN5bWJvbCIsIk9iamVjdCIsImtleXMiLCJGcmFtZSIsInBhcmVudE5vZGUiLCJjaGlsZHJlbiIsImNoaWxkSW5kZXgiLCJjaGlsZENvdW50IiwiY2hpbGRUZW1wbGF0ZUNvdW50IiwibXVzdGFjaGVDb3VudCIsImFjdGlvbnMiLCJibGFua0NoaWxkVGV4dE5vZGVzIiwiVGVtcGxhdGVWaXNpdG9yIiwiZnJhbWVTdGFjayIsInByb2dyYW1EZXB0aCIsInZpc2l0Iiwibm9kZSIsInR5cGUiLCJQcm9ncmFtIiwicHJvZ3JhbSIsInBhcmVudEZyYW1lIiwiZ2V0Q3VycmVudEZyYW1lIiwicHJvZ3JhbUZyYW1lIiwicHVzaEZyYW1lIiwiYmxvY2tQYXJhbXMiLCJzdGFydFR5cGUiLCJlbmRUeXBlIiwiYm9keSIsImxlbmd0aCIsImkiLCJyZXZlcnNlIiwicG9wRnJhbWUiLCJFbGVtZW50Tm9kZSIsImVsZW1lbnQiLCJjdXJyZW50RnJhbWUiLCJlbGVtZW50RnJhbWUiLCJtb2RpZmllcnMiLCJhY3Rpb25BcmdzIiwiYXR0cmlidXRlcyIsIm9wZW4iLCJBdHRyTm9kZSIsImF0dHIiLCJ2YWx1ZSIsIlRleHROb2RlIiwidGV4dCIsImZyYW1lIiwiY2hhcnMiLCJkb21JbmRleE9mIiwiQmxvY2tTdGF0ZW1lbnQiLCJpbnZlcnNlIiwiUGFydGlhbFN0YXRlbWVudCIsIkNvbW1lbnRTdGF0ZW1lbnQiLCJNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQiLCJNdXN0YWNoZVN0YXRlbWVudCIsIm11c3RhY2hlIiwicG9wIiwibm9kZXMiLCJkb21Ob2RlIiwiaW5kZXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxTQUFTQSxJQUFULEVBQWVDLFdBQWYsUUFBMEMsZUFBMUM7QUFDQSxXQUFhQyxXQUFiO0FBQUE7QUFBQTtBQUFBOztBQUFBLGdCQUNXQyxHQURYLGtCQUNpQjtBQUNULGVBQU8sSUFBSUMsa0JBQUosRUFBUDtBQUNILEtBSEw7O0FBQUEsMEJBSUlDLEtBSkosa0JBSVVDLE1BSlYsRUFJa0I7QUFBQTs7QUFDVixZQUFJQyxVQUFVRCxPQUFPRSxHQUFQLENBQVc7QUFBQSxtQkFBUSxNQUFLQyxRQUFMLENBQWNDLElBQWQsQ0FBUjtBQUFBLFNBQVgsQ0FBZDtBQUNBLGVBQU8sSUFBSUMsZ0JBQUosQ0FBcUIsSUFBckIsRUFBMkJMLE1BQTNCLEVBQW1DQyxPQUFuQyxDQUFQO0FBQ0gsS0FQTDs7QUFBQTtBQUFBO0FBU0EsV0FBYUgsa0JBQWI7QUFBQTs7QUFDSSxrQ0FBYztBQUFBOztBQUFBLHNEQUNWLHlCQUFTUSxTQUFULENBRFU7O0FBRVYsZUFBS0wsT0FBTCxHQUFlLEVBQWY7QUFDQSxlQUFLTSxJQUFMLEdBQVksQ0FBWjtBQUNBLGVBQUtDLEtBQUwsR0FBYWQsTUFBYjtBQUNBLGVBQUtlLE1BQUwsR0FBY2YsTUFBZDtBQUxVO0FBTWI7O0FBUEwsaUNBUUlnQixHQVJKLGdCQVFRQyxLQVJSLEVBUWU7QUFDUCxlQUFPLEtBQVA7QUFDSCxLQVZMOztBQUFBLGlDQVdJQyxHQVhKLGdCQVdRRCxLQVhSLEVBV2U7QUFDUCxjQUFNaEIsYUFBTjtBQUNILEtBYkw7O0FBQUEsaUNBY0lrQixZQWRKLDJCQWNtQjtBQUNYLGVBQU8sRUFB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TCxDQUFnQmUsTUFBaEIsR0FBeUIsQ0FBekMsQ0FBUDtBQUNILEs7OzhCQUNETCxTLHdCQUFZO0FBQ1IsWUFBSXNCLFFBQVEsSUFBSTFDLEtBQUosRUFBWjtBQUNBLGFBQUtVLFVBQUwsQ0FBZ0JuQixJQUFoQixDQUFxQm1ELEtBQXJCO0FBQ0EsZUFBT0EsS0FBUDtBQUNILEs7OzhCQUNEZCxRLHVCQUFXO0FBQ1AsZUFBTyxLQUFLbEIsVUFBTCxDQUFnQjBDLEdBQWhCLEVBQVA7QUFDSCxLOzs7O3lCQWJrQjtBQUNmLG1CQUFjLEtBQUtsQyxlQUFMLEVBQWQ7QUFDSDs7Ozs7QUFhTDtBQUNBOzs7ZUExSXFCVCxlO0FBMklyQixTQUFTbUMsVUFBVCxDQUFvQlMsS0FBcEIsRUFBMkJDLE9BQTNCLEVBQW9DO0FBQ2hDLFFBQUlDLFFBQVEsQ0FBQyxDQUFiO0FBQ0EsU0FBSyxJQUFJN0IsSUFBSSxDQUFiLEVBQWdCQSxJQUFJMkIsTUFBTTVCLE1BQTFCLEVBQWtDQyxHQUFsQyxFQUF1QztBQUNuQyxZQUFJYixPQUFPd0MsTUFBTTNCLENBQU4sQ0FBWDtBQUNBLFlBQUliLEtBQUtDLElBQUwsS0FBYyxVQUFkLElBQTRCRCxLQUFLQyxJQUFMLEtBQWMsYUFBOUMsRUFBNkQ7QUFDekQ7QUFDSCxTQUZELE1BRU87QUFDSHlDO0FBQ0g7QUFDRCxZQUFJMUMsU0FBU3lDLE9BQWIsRUFBc0I7QUFDbEIsbUJBQU9DLEtBQVA7QUFDSDtBQUNKO0FBQ0QsV0FBTyxDQUFDLENBQVI7QUFDSCIsImZpbGUiOiJsaWIvdGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpY3QsIHVucmVhY2hhYmxlLCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmV4cG9ydCBjbGFzcyBTeW1ib2xUYWJsZSB7XG4gICAgc3RhdGljIHRvcCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9ncmFtU3ltYm9sVGFibGUoKTtcbiAgICB9XG4gICAgY2hpbGQobG9jYWxzKSB7XG4gICAgICAgIGxldCBzeW1ib2xzID0gbG9jYWxzLm1hcChuYW1lID0+IHRoaXMuYWxsb2NhdGUobmFtZSkpO1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrU3ltYm9sVGFibGUodGhpcywgbG9jYWxzLCBzeW1ib2xzKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUHJvZ3JhbVN5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnN5bWJvbHMgPSBbXTtcbiAgICAgICAgdGhpcy5zaXplID0gMTtcbiAgICAgICAgdGhpcy5uYW1lZCA9IGRpY3QoKTtcbiAgICAgICAgdGhpcy5ibG9ja3MgPSBkaWN0KCk7XG4gICAgfVxuICAgIGhhcyhfbmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldChfbmFtZSkge1xuICAgICAgICB0aHJvdyB1bnJlYWNoYWJsZSgpO1xuICAgIH1cbiAgICBnZXRMb2NhbHNNYXAoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgZ2V0RXZhbEluZm8oKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgYWxsb2NhdGVOYW1lZChuYW1lKSB7XG4gICAgICAgIGxldCBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV07XG4gICAgICAgIGlmICghbmFtZWQpIHtcbiAgICAgICAgICAgIG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYEAke25hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWVkO1xuICAgIH1cbiAgICBhbGxvY2F0ZUJsb2NrKG5hbWUpIHtcbiAgICAgICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV07XG4gICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgIGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGAmJHtuYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibG9jaztcbiAgICB9XG4gICAgYWxsb2NhdGUoaWRlbnRpZmllcikge1xuICAgICAgICB0aGlzLnN5bWJvbHMucHVzaChpZGVudGlmaWVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZSsrO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBCbG9ja1N5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCwgc3ltYm9scywgc2xvdHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IHN5bWJvbHM7XG4gICAgICAgIHRoaXMuc2xvdHMgPSBzbG90cztcbiAgICB9XG4gICAgaGFzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpICE9PSAtMSB8fCB0aGlzLnBhcmVudC5oYXMobmFtZSk7XG4gICAgfVxuICAgIGdldChuYW1lKSB7XG4gICAgICAgIGxldCBzbG90ID0gdGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSk7XG4gICAgICAgIHJldHVybiBzbG90ID09PSAtMSA/IHRoaXMucGFyZW50LmdldChuYW1lKSA6IHRoaXMuc2xvdHNbc2xvdF07XG4gICAgfVxuICAgIGdldExvY2Fsc01hcCgpIHtcbiAgICAgICAgbGV0IGRpY3QgPSB0aGlzLnBhcmVudC5nZXRMb2NhbHNNYXAoKTtcbiAgICAgICAgdGhpcy5zeW1ib2xzLmZvckVhY2goc3ltYm9sID0+IGRpY3Rbc3ltYm9sXSA9IHRoaXMuZ2V0KHN5bWJvbCkpO1xuICAgICAgICByZXR1cm4gZGljdDtcbiAgICB9XG4gICAgZ2V0RXZhbEluZm8oKSB7XG4gICAgICAgIGxldCBsb2NhbHMgPSB0aGlzLmdldExvY2Fsc01hcCgpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobG9jYWxzKS5tYXAoc3ltYm9sID0+IGxvY2Fsc1tzeW1ib2xdKTtcbiAgICB9XG4gICAgYWxsb2NhdGVOYW1lZChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZU5hbWVkKG5hbWUpO1xuICAgIH1cbiAgICBhbGxvY2F0ZUJsb2NrKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlQmxvY2sobmFtZSk7XG4gICAgfVxuICAgIGFsbG9jYXRlKGlkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlKGlkZW50aWZpZXIpO1xuICAgIH1cbn1cbi8qKlxuICogVGFrZXMgaW4gYW4gQVNUIGFuZCBvdXRwdXRzIGEgbGlzdCBvZiBhY3Rpb25zIHRvIGJlIGNvbnN1bWVkXG4gKiBieSBhIGNvbXBpbGVyLiBGb3IgZXhhbXBsZSwgdGhlIHRlbXBsYXRlXG4gKlxuICogICAgIGZvb3t7YmFyfX08ZGl2PmJhejwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDNdXSxcbiAqICAgICAgWydtdXN0YWNoZScsIFttdXN0YWNoZU5vZGUsIDEsIDNdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgMywgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDNdLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGlzIHZpc2l0b3Igd2Fsa3MgdGhlIEFTVCBkZXB0aCBmaXJzdCBhbmQgYmFja3dhcmRzLiBBc1xuICogYSByZXN1bHQgdGhlIGJvdHRvbS1tb3N0IGNoaWxkIHRlbXBsYXRlIHdpbGwgYXBwZWFyIGF0IHRoZVxuICogdG9wIG9mIHRoZSBhY3Rpb25zIGxpc3Qgd2hlcmVhcyB0aGUgcm9vdCB0ZW1wbGF0ZSB3aWxsIGFwcGVhclxuICogYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdC4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAgIDxkaXY+e3sjaWZ9fWZvb3t7ZWxzZX19YmFyPGI+PC9iPnt7L2lmfX08L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAyLCAwXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDIsIDBdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDJdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDJdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMSwgMV1dLFxuICogICAgICBbJ2Jsb2NrJywgW2Jsb2NrTm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBpcyBtYWludGFpbmVkIGJ5IGEgc3RhY2sgb2YgZnJhbWVzLlxuICogV2hlbmV2ZXIgYSBub2RlIHdpdGggY2hpbGRyZW4gaXMgZW50ZXJlZCAoZWl0aGVyIGEgUHJvZ3JhbU5vZGVcbiAqIG9yIGFuIEVsZW1lbnROb2RlKSBhIGZyYW1lIGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFjay4gVGhlIGZyYW1lXG4gKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBvZiB0aGF0XG4gKiBub2RlLiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgIC0gaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hpbGQgbm9kZSBiZWluZyB2aXNpdGVkXG4gKiAgIC0gdGhlIG51bWJlciBvZiBtdXN0YWNoZXMgY29udGFpbmVkIHdpdGhpbiBpdHMgY2hpbGQgbm9kZXNcbiAqICAgLSB0aGUgbGlzdCBvZiBhY3Rpb25zIGdlbmVyYXRlZCBieSBpdHMgY2hpbGQgbm9kZXNcbiAqL1xuY2xhc3MgRnJhbWUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnBhcmVudE5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbiAgICAgICAgdGhpcy5jaGlsZEluZGV4ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jaGlsZENvdW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jaGlsZFRlbXBsYXRlQ291bnQgPSAwO1xuICAgICAgICB0aGlzLm11c3RhY2hlQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5ibGFua0NoaWxkVGV4dE5vZGVzID0gbnVsbDtcbiAgICAgICAgdGhpcy5zeW1ib2xzID0gbnVsbDtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZVZpc2l0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmZyYW1lU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIHRoaXMucHJvZ3JhbURlcHRoID0gLTE7XG4gICAgfVxuICAgIHZpc2l0KG5vZGUpIHtcbiAgICAgICAgdGhpc1tub2RlLnR5cGVdKG5vZGUpO1xuICAgIH1cbiAgICAvLyBUcmF2ZXJzYWwgbWV0aG9kc1xuICAgIFByb2dyYW0ocHJvZ3JhbSkge1xuICAgICAgICB0aGlzLnByb2dyYW1EZXB0aCsrO1xuICAgICAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmdldEN1cnJlbnRGcmFtZSgpO1xuICAgICAgICBsZXQgcHJvZ3JhbUZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcbiAgICAgICAgaWYgKCFwYXJlbnRGcmFtZSkge1xuICAgICAgICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gU3ltYm9sVGFibGUudG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzLmNoaWxkKHByb2dyYW0uYmxvY2tQYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydFR5cGUsIGVuZFR5cGU7XG4gICAgICAgIGlmICh0aGlzLnByb2dyYW1EZXB0aCA9PT0gMCkge1xuICAgICAgICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0UHJvZ3JhbSc7XG4gICAgICAgICAgICBlbmRUeXBlID0gJ2VuZFByb2dyYW0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0QmxvY2snO1xuICAgICAgICAgICAgZW5kVHlwZSA9ICdlbmRCbG9jayc7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZ3JhbUZyYW1lLnBhcmVudE5vZGUgPSBwcm9ncmFtO1xuICAgICAgICBwcm9ncmFtRnJhbWUuY2hpbGRyZW4gPSBwcm9ncmFtLmJvZHk7XG4gICAgICAgIHByb2dyYW1GcmFtZS5jaGlsZENvdW50ID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aDtcbiAgICAgICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICAgICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbZW5kVHlwZSwgW3Byb2dyYW0sIHRoaXMucHJvZ3JhbURlcHRoXV0pO1xuICAgICAgICBwcm9ncmFtRnJhbWUuc3ltYm9scyA9IHByb2dyYW1bJ3N5bWJvbHMnXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHByb2dyYW0uYm9keS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgcHJvZ3JhbUZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgICAgICAgdGhpcy52aXNpdChwcm9ncmFtLmJvZHlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW3N0YXJ0VHlwZSwgW3Byb2dyYW0sIHByb2dyYW1GcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQsIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKV1dKTtcbiAgICAgICAgdGhpcy5wb3BGcmFtZSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1EZXB0aC0tO1xuICAgICAgICAvLyBQdXNoIHRoZSBjb21wbGV0ZWQgdGVtcGxhdGUgaW50byB0aGUgZ2xvYmFsIGFjdGlvbnMgbGlzdFxuICAgICAgICBpZiAocGFyZW50RnJhbWUpIHtcbiAgICAgICAgICAgIHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLnByb2dyYW1GcmFtZS5hY3Rpb25zLnJldmVyc2UoKSk7XG4gICAgfVxuICAgIEVsZW1lbnROb2RlKGVsZW1lbnQpIHtcbiAgICAgICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgICAgIGxldCBlbGVtZW50RnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuICAgICAgICBlbGVtZW50RnJhbWUucGFyZW50Tm9kZSA9IGVsZW1lbnQ7XG4gICAgICAgIGVsZW1lbnRGcmFtZS5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGVsZW1lbnRGcmFtZS5jaGlsZENvdW50ID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ICs9IGVsZW1lbnQubW9kaWZpZXJzLmxlbmd0aDtcbiAgICAgICAgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICAgICAgZWxlbWVudEZyYW1lLnN5bWJvbHMgPSBlbGVtZW50WydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzLmNoaWxkKGVsZW1lbnQuYmxvY2tQYXJhbXMpO1xuICAgICAgICBsZXQgYWN0aW9uQXJncyA9IFtlbGVtZW50LCBwYXJlbnRGcmFtZS5jaGlsZEluZGV4LCBwYXJlbnRGcmFtZS5jaGlsZENvdW50XTtcbiAgICAgICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChbJ2Nsb3NlRWxlbWVudCcsIGFjdGlvbkFyZ3NdKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdChlbGVtZW50LmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBlbGVtZW50RnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuY2hpbGRyZW5baV0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvcGVuID0gWydvcGVuRWxlbWVudCcsIFsuLi5hY3Rpb25BcmdzLCBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCwgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXV07XG4gICAgICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2gob3Blbik7XG4gICAgICAgIHRoaXMucG9wRnJhbWUoKTtcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRoZSBlbGVtZW50J3MgZnJhbWUgc3RhdGUgdG8gdGhlIHBhcmVudCBmcmFtZVxuICAgICAgICBpZiAoZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICBwYXJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50ICs9IGVsZW1lbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQ7XG4gICAgICAgIHBhcmVudEZyYW1lLmFjdGlvbnMucHVzaCguLi5lbGVtZW50RnJhbWUuYWN0aW9ucyk7XG4gICAgfVxuICAgIEF0dHJOb2RlKGF0dHIpIHtcbiAgICAgICAgaWYgKGF0dHIudmFsdWUudHlwZSAhPT0gJ1RleHROb2RlJykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgVGV4dE5vZGUodGV4dCkge1xuICAgICAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICAgICAgaWYgKHRleHQuY2hhcnMgPT09ICcnKSB7XG4gICAgICAgICAgICBmcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnB1c2goZG9tSW5kZXhPZihmcmFtZS5jaGlsZHJlbiwgdGV4dCkpO1xuICAgICAgICB9XG4gICAgICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ3RleHQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dKTtcbiAgICB9XG5cbiAgICBCbG9ja1N0YXRlbWVudChub2RlKSB7XG4gICAgICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgICAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2Jsb2NrJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSk7XG4gICAgICAgIGlmIChub2RlLmludmVyc2UpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXQobm9kZS5pbnZlcnNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5wcm9ncmFtKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0KG5vZGUucHJvZ3JhbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBQYXJ0aWFsU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICAgICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dKTtcbiAgICB9XG5cbiAgICBDb21tZW50U3RhdGVtZW50KHRleHQpIHtcbiAgICAgICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2NvbW1lbnQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dKTtcbiAgICB9XG5cbiAgICBNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQoKSB7XG4gICAgICAgIC8vIEludGVudGlvbmFsIGVtcHR5OiBIYW5kbGViYXJzIGNvbW1lbnRzIHNob3VsZCBub3QgYWZmZWN0IG91dHB1dC5cbiAgICB9XG5cbiAgICBNdXN0YWNoZVN0YXRlbWVudChtdXN0YWNoZSkge1xuICAgICAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICAgICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgICAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFttdXN0YWNoZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dKTtcbiAgICB9XG5cbiAgICAvLyBGcmFtZSBoZWxwZXJzXG4gICAgZ2V0IGN1cnJlbnRGcmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdCh0aGlzLmdldEN1cnJlbnRGcmFtZSgpLCBcIkV4cGVjdGVkIGEgY3VycmVudCBmcmFtZVwiKTtcbiAgICB9XG4gICAgZ2V0Q3VycmVudEZyYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcHVzaEZyYW1lKCkge1xuICAgICAgICBsZXQgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICAgICAgdGhpcy5mcmFtZVN0YWNrLnB1c2goZnJhbWUpO1xuICAgICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICAgIHBvcEZyYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrLnBvcCgpO1xuICAgIH1cbn1cbi8vIFJldHVybnMgdGhlIGluZGV4IG9mIGBkb21Ob2RlYCBpbiB0aGUgYG5vZGVzYCBhcnJheSwgc2tpcHBpbmdcbi8vIG92ZXIgYW55IG5vZGVzIHdoaWNoIGRvIG5vdCByZXByZXNlbnQgRE9NIG5vZGVzLlxuZnVuY3Rpb24gZG9tSW5kZXhPZihub2RlcywgZG9tTm9kZSkge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYgKG5vZGUudHlwZSAhPT0gJ1RleHROb2RlJyAmJiBub2RlLnR5cGUgIT09ICdFbGVtZW50Tm9kZScpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZSA9PT0gZG9tTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn0iXX0=

@@ -12,2 +12,2 @@ export function processOpcodes(compiler, opcodes) {

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFNLCtCQUF5QixBQUFhLFVBQUUsQUFBWTtBQUN4RCxBQUFHLEFBQUMsU0FBQyxJQUFJLEFBQUMsSUFBQyxBQUFDLEdBQUUsQUFBQyxJQUFDLEFBQU8sUUFBQyxBQUFNLFFBQUUsQUFBQyxJQUFDLEFBQUMsR0FBRSxBQUFDLEFBQUUsS0FBRSxBQUFDO0FBQ3pDLFlBQUksQUFBTSxTQUFHLEFBQU8sUUFBQyxBQUFDLEFBQUMsR0FBQyxBQUFDLEFBQUMsQUFBQztBQUMzQixZQUFJLEFBQU0sU0FBRyxBQUFPLFFBQUMsQUFBQyxBQUFDLEdBQUMsQUFBQyxBQUFDLEFBQUM7QUFDM0IsQUFBRSxBQUFDLFlBQUMsQUFBTSxBQUFDLFFBQUMsQUFBQztBQUNYLEFBQVEscUJBQUMsQUFBTSxBQUFDLFFBQUMsQUFBSyxNQUFDLEFBQVEsVUFBRSxBQUFNLEFBQUMsQUFBQyxBQUMzQztBQUFDLEFBQUMsQUFBSSxlQUFDLEFBQUM7QUFDTixBQUFRLHFCQUFDLEFBQU0sQUFBQyxRQUFDLEFBQUksS0FBQyxBQUFRLEFBQUMsQUFBQyxBQUNsQztBQUFDLEFBQ0g7QUFBQyxBQUNIO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcHJvY2Vzc09wY29kZXMoY29tcGlsZXI6IGFueSwgb3Bjb2RlczogYW55KSB7XG4gIGZvciAobGV0IGk9MCwgbD1vcGNvZGVzLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICBsZXQgbWV0aG9kID0gb3Bjb2Rlc1tpXVswXTtcbiAgICBsZXQgcGFyYW1zID0gb3Bjb2Rlc1tpXVsxXTtcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICBjb21waWxlclttZXRob2RdLmFwcGx5KGNvbXBpbGVyLCBwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21waWxlclttZXRob2RdLmNhbGwoY29tcGlsZXIpO1xuICAgIH1cbiAgfVxufSJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJwcm9jZXNzT3Bjb2RlcyIsImNvbXBpbGVyIiwib3Bjb2RlcyIsImkiLCJsIiwibGVuZ3RoIiwibWV0aG9kIiwicGFyYW1zIiwiYXBwbHkiLCJjYWxsIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVNBLGNBQVQsQ0FBd0JDLFFBQXhCLEVBQWtDQyxPQUFsQyxFQUEyQztBQUM5QyxTQUFLLElBQUlDLElBQUksQ0FBUixFQUFXQyxJQUFJRixRQUFRRyxNQUE1QixFQUFvQ0YsSUFBSUMsQ0FBeEMsRUFBMkNELEdBQTNDLEVBQWdEO0FBQzVDLFlBQUlHLFNBQVNKLFFBQVFDLENBQVIsRUFBVyxDQUFYLENBQWI7QUFDQSxZQUFJSSxTQUFTTCxRQUFRQyxDQUFSLEVBQVcsQ0FBWCxDQUFiO0FBQ0EsWUFBSUksTUFBSixFQUFZO0FBQ1JOLHFCQUFTSyxNQUFULEVBQWlCRSxLQUFqQixDQUF1QlAsUUFBdkIsRUFBaUNNLE1BQWpDO0FBQ0gsU0FGRCxNQUVPO0FBQ0hOLHFCQUFTSyxNQUFULEVBQWlCRyxJQUFqQixDQUFzQlIsUUFBdEI7QUFDSDtBQUNKO0FBQ0oiLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NPcGNvZGVzKGNvbXBpbGVyLCBvcGNvZGVzKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBvcGNvZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBsZXQgbWV0aG9kID0gb3Bjb2Rlc1tpXVswXTtcbiAgICAgICAgbGV0IHBhcmFtcyA9IG9wY29kZXNbaV1bMV07XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbXBpbGVyW21ldGhvZF0uYXBwbHkoY29tcGlsZXIsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21waWxlclttZXRob2RdLmNhbGwoY29tcGlsZXIpO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==
{
"name": "@glimmer/compiler",
"version": "0.23.0-alpha.11",
"repository": "https://github.com/tildeio/glimmer/tree/master/packages/@glimmer/compiler",
"version": "0.23.0-alpha.14",
"repository": "https://github.com/glimmerjs/glimmer-vm/tree/master/packages/@glimmer/compiler",
"dependencies": {
"@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",
"@glimmer/syntax": "^0.23.0-alpha.14",
"@glimmer/util": "^0.23.0-alpha.14",
"@glimmer/wire-format": "^0.23.0-alpha.14",
"@glimmer/interfaces": "^0.23.0-alpha.14",
"simple-html-tokenizer": "^0.3.0"

@@ -18,3 +18,4 @@ },

"module": "dist/modules/es5/index.js",
"typings": "dist/types/index.d.ts"
"typings": "dist/types/index.d.ts",
"license": "MIT"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc