UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

164 lines (162 loc) 28.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../../../constants"); const TypedHelper_1 = require("../TypedHelper"); class ToNumberHelper extends TypedHelper_1.TypedHelper { emit(sb, node, optionsIn) { const throwTypeError = (options) => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, options, sb.helpers.throwTypeError); }; const convertNull = () => { sb.emitOp(node, 'DROP'); sb.emitPushInt(node, 0); }; const convertBoolean = (options) => { sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitHelper(node, options, sb.helpers.unwrapBoolean); }, whenTrue: () => { sb.emitPushInt(node, 1); }, whenFalse: () => { sb.emitPushInt(node, 0); }, })); }; const convertArray = (options) => { sb.emitHelper(node, options, sb.helpers.toPrimitive({ type: this.type, knownType: constants_1.Types.Array, preferredType: 'number' })); doConvert(options, false); }; const convertNumber = (options) => { sb.emitHelper(node, options, sb.helpers.unwrapNumber); }; const convertString = (options) => { const n = sb.scope.addUnique(); const remain = sb.scope.addUnique(); const accum = sb.scope.addUnique(); sb.emitHelper(node, options, sb.helpers.unwrapString); sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitOp(node, 'DUP'); sb.emitPushString(node, ''); sb.emitOp(node, 'EQUAL'); }, whenTrue: () => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, options, sb.helpers.throwTypeError); }, whenFalse: () => { sb.scope.set(sb, node, options, remain); sb.emitPushInt(node, 1); sb.scope.set(sb, node, options, n); sb.emitPushInt(node, 0); sb.scope.set(sb, node, options, accum); sb.emitHelper(node, options, sb.helpers.forLoop({ condition: () => { sb.scope.get(sb, node, options, remain); sb.emitPushString(node, ''); sb.emitOp(node, 'EQUAL'); sb.emitOp(node, 'NOT'); }, each: (innerOptions) => { sb.scope.get(sb, node, innerOptions, remain); sb.emitOp(node, 'DUP'); sb.emitOp(node, 'DUP'); sb.emitOp(node, 'SIZE'); sb.emitOp(node, 'DEC'); sb.emitOp(node, 'LEFT'); sb.scope.set(sb, node, innerOptions, remain); sb.emitPushInt(node, 1); sb.emitOp(node, 'RIGHT'); sb.emitPushInt(node, 0x30); sb.emitOp(node, 'SUB'); sb.emitHelper(node, innerOptions, sb.helpers.if({ condition: () => { sb.emitOp(node, 'DUP'); sb.emitPushInt(node, 9); sb.emitOp(node, 'GT'); }, whenTrue: () => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, options, sb.helpers.throwTypeError); }, whenFalse: () => { sb.emitHelper(node, innerOptions, sb.helpers.if({ condition: () => { sb.emitOp(node, 'DUP'); sb.emitPushInt(node, 0); sb.emitOp(node, 'LT'); }, whenTrue: () => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, options, sb.helpers.throwTypeError); }, })); }, })); sb.scope.get(sb, node, innerOptions, n); sb.emitOp(node, 'DUP'); sb.emitPushInt(node, 10); sb.emitOp(node, 'MUL'); sb.scope.set(sb, node, innerOptions, n); sb.emitOp(node, 'MUL'); sb.scope.get(sb, node, innerOptions, accum); sb.emitOp(node, 'ADD'); sb.scope.set(sb, node, innerOptions, accum); }, cleanup: () => { }, })); sb.scope.get(sb, node, options, accum); }, })); }; const convertObject = (options) => { sb.emitHelper(node, options, sb.helpers.toPrimitive({ type: this.type, knownType: constants_1.Types.Object, preferredType: 'number' })); doConvert(options, false); }; const doConvert = (options, initial = true) => { sb.emitHelper(node, options, sb.helpers.forBuiltinType({ type: initial ? this.type : undefined, knownType: initial ? this.knownType : undefined, array: initial ? convertArray : throwTypeError, arrayStorage: throwTypeError, boolean: convertBoolean, buffer: throwTypeError, null: convertNull, number: convertNumber, object: initial ? convertObject : throwTypeError, string: convertString, symbol: throwTypeError, undefined: throwTypeError, map: throwTypeError, mapStorage: throwTypeError, set: throwTypeError, setStorage: throwTypeError, error: throwTypeError, forwardValue: throwTypeError, iteratorResult: throwTypeError, iterable: throwTypeError, iterableIterator: throwTypeError, transaction: throwTypeError, output: throwTypeError, attribute: throwTypeError, input: throwTypeError, account: throwTypeError, asset: throwTypeError, contract: throwTypeError, header: throwTypeError, block: throwTypeError, })); }; doConvert(sb.pushValueOptions(optionsIn), true); if (!optionsIn.pushValue) { sb.emitOp(node, 'DROP'); return; } } } exports.ToNumberHelper = ToNumberHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRvTnVtYmVySGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0Esa0RBQTJDO0FBRzNDLGdEQUE2QztBQUk3QyxNQUFhLGNBQWUsU0FBUSx5QkFBVztJQUN0QyxJQUFJLENBQUMsRUFBaUIsRUFBRSxJQUFhLEVBQUUsU0FBdUI7UUFDbkUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7WUFDL0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDeEIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFO1lBRXZCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO1lBQy9DLEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWixTQUFTLEVBQUUsR0FBRyxFQUFFO29CQUNkLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBRWIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLENBQUM7Z0JBQ0QsU0FBUyxFQUFFLEdBQUcsRUFBRTtvQkFFZCxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUIsQ0FBQzthQUNGLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7WUFFN0MsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGlCQUFLLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUM3RixDQUFDO1lBRUYsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtZQUU5QyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtZQUM5QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUduQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0RCxFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1osU0FBUyxFQUFFLEdBQUcsRUFBRTtvQkFFZCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFFdkIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBRTVCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBRWIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBR3hCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO2dCQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7b0JBRWQsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBRXhDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUV4QixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFFbkMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBRXhCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUN2QyxFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7d0JBQ2pCLFNBQVMsRUFBRSxHQUFHLEVBQUU7NEJBRWQsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBRXhDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUU1QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs0QkFFekIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3pCLENBQUM7d0JBQ0QsSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7NEJBRXJCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDOzRCQUU3QyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs0QkFFdkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBRXZCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDOzRCQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs0QkFFdkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBRXhCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDOzRCQUU3QyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7NEJBRXpCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOzRCQUUzQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs0QkFFdkIsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osWUFBWSxFQUNaLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dDQUNaLFNBQVMsRUFBRSxHQUFHLEVBQUU7b0NBRWQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7b0NBRXZCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO29DQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQ0FDeEIsQ0FBQztnQ0FDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO29DQUViLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29DQUV4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQ0FDMUQsQ0FBQztnQ0FDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO29DQUNkLEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLFlBQVksRUFDWixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3Q0FDWixTQUFTLEVBQUUsR0FBRyxFQUFFOzRDQUVkLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOzRDQUV2QixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs0Q0FFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7d0NBQ3hCLENBQUM7d0NBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTs0Q0FFYixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzs0Q0FFeEIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7d0NBQzFELENBQUM7cUNBQ0YsQ0FBQyxDQUNILENBQUM7Z0NBQ0osQ0FBQzs2QkFDRixDQUFDLENBQ0gsQ0FBQzs0QkFFRixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFFeEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBRXZCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUV6QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs0QkFFdkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBRXhDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOzRCQUV2QixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzs0QkFFNUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBRXZCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUM5QyxDQUFDO3dCQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7d0JBRWQsQ0FBQztxQkFDRixDQUFDLENBQ0gsQ0FBQztvQkFFRixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekMsQ0FBQzthQUNGLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFxQixFQUFRLEVBQUU7WUFFcEQsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGlCQUFLLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUM5RixDQUFDO1lBRUYsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQXFCLEVBQUUsT0FBTyxHQUFHLElBQUksRUFBRSxFQUFFO1lBQzFELEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDckMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDL0MsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxjQUFjO2dCQUM5QyxZQUFZLEVBQUUsY0FBYztnQkFDNUIsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixJQUFJLEVBQUUsV0FBVztnQkFDakIsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYztnQkFDaEQsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixTQUFTLEVBQUUsY0FBYztnQkFDekIsR0FBRyxFQUFFLGNBQWM7Z0JBQ25CLFVBQVUsRUFBRSxjQUFjO2dCQUMxQixHQUFHLEVBQUUsY0FBYztnQkFDbkIsVUFBVSxFQUFFLGNBQWM7Z0JBQzFCLEtBQUssRUFBRSxjQUFjO2dCQUNyQixZQUFZLEVBQUUsY0FBYztnQkFDNUIsY0FBYyxFQUFFLGNBQWM7Z0JBQzlCLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixnQkFBZ0IsRUFBRSxjQUFjO2dCQUNoQyxXQUFXLEVBQUUsY0FBYztnQkFDM0IsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixLQUFLLEVBQUUsY0FBYztnQkFDckIsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLEtBQUssRUFBRSxjQUFjO2dCQUNyQixRQUFRLEVBQUUsY0FBYztnQkFDeEIsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLEtBQUssRUFBRSxjQUFjO2FBQ3RCLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsU0FBUyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUd4QixPQUFPO1NBQ1I7SUFDSCxDQUFDO0NBQ0Y7QUFsUUQsd0NBa1FDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvaGVscGVyL3R5cGVzL251bWJlci9Ub051bWJlckhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBUeXBlZEhlbHBlciB9IGZyb20gJy4uL1R5cGVkSGVscGVyJztcblxuLy8gSW5wdXQ6IFt2YWxdXG4vLyBPdXRwdXQ6IFtudW1iZXJdXG5leHBvcnQgY2xhc3MgVG9OdW1iZXJIZWxwZXIgZXh0ZW5kcyBUeXBlZEhlbHBlciB7XG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHRocm93VHlwZUVycm9yID0gKG9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMudGhyb3dUeXBlRXJyb3IpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb252ZXJ0TnVsbCA9ICgpID0+IHtcbiAgICAgIC8vIFtdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIC8vIFswXVxuICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnZlcnRCb29sZWFuID0gKG9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwQm9vbGVhbik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gWzFdXG4gICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAxKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gWzBdXG4gICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAwKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnZlcnRBcnJheSA9IChvcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgIC8vIFtwcmltaXRpdmVdXG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICBub2RlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBzYi5oZWxwZXJzLnRvUHJpbWl0aXZlKHsgdHlwZTogdGhpcy50eXBlLCBrbm93blR5cGU6IFR5cGVzLkFycmF5LCBwcmVmZXJyZWRUeXBlOiAnbnVtYmVyJyB9KSxcbiAgICAgICk7XG4gICAgICAvLyBbc3RyaW5nXVxuICAgICAgZG9Db252ZXJ0KG9wdGlvbnMsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29udmVydE51bWJlciA9IChvcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgIC8vIFt2YWx1ZV1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy51bndyYXBOdW1iZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb252ZXJ0U3RyaW5nID0gKG9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgbiA9IHNiLnNjb3BlLmFkZFVuaXF1ZSgpO1xuICAgICAgY29uc3QgcmVtYWluID0gc2Iuc2NvcGUuYWRkVW5pcXVlKCk7XG4gICAgICBjb25zdCBhY2N1bSA9IHNiLnNjb3BlLmFkZFVuaXF1ZSgpO1xuXG4gICAgICAvLyBbc3RyaW5nXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcFN0cmluZyk7XG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICBub2RlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFtzdHJpbmcsIHN0cmluZ11cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgICAvLyBbJycsIHN0cmluZywgc3RyaW5nXVxuICAgICAgICAgICAgc2IuZW1pdFB1c2hTdHJpbmcobm9kZSwgJycpO1xuICAgICAgICAgICAgLy8gW3N0cmluZyA9PT0gJycsIHN0cmluZ11cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRVFVQUwnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdoZW5UcnVlOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBbXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IE5hTlxuICAgICAgICAgICAgLy8gW11cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy50aHJvd1R5cGVFcnJvcik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICBzYi5zY29wZS5zZXQoc2IsIG5vZGUsIG9wdGlvbnMsIHJlbWFpbik7XG4gICAgICAgICAgICAvLyBbMV1cbiAgICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDEpO1xuICAgICAgICAgICAgLy8gW11cbiAgICAgICAgICAgIHNiLnNjb3BlLnNldChzYiwgbm9kZSwgb3B0aW9ucywgbik7XG4gICAgICAgICAgICAvLyBbbnVtYmVyXVxuICAgICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMCk7XG4gICAgICAgICAgICAvLyBbXVxuICAgICAgICAgICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCBhY2N1bSk7XG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICBzYi5oZWxwZXJzLmZvckxvb3Aoe1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gW3JlbWFpbl1cbiAgICAgICAgICAgICAgICAgIHNiLnNjb3BlLmdldChzYiwgbm9kZSwgb3B0aW9ucywgcmVtYWluKTtcbiAgICAgICAgICAgICAgICAgIC8vIFsnJywgcmVtYWluXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdFB1c2hTdHJpbmcobm9kZSwgJycpO1xuICAgICAgICAgICAgICAgICAgLy8gW3JlbWFpbiA9PT0gJyddXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0VRVUFMJyk7XG4gICAgICAgICAgICAgICAgICAvLyBbYm9vbGVhbl1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTk9UJyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlYWNoOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBbcmVtYWluXVxuICAgICAgICAgICAgICAgICAgc2Iuc2NvcGUuZ2V0KHNiLCBub2RlLCBpbm5lck9wdGlvbnMsIHJlbWFpbik7XG4gICAgICAgICAgICAgICAgICAvLyBbcmVtYWluLCByZW1haW5dXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgICAgICAgICAgLy8gW3JlbWFpbiwgcmVtYWluLCByZW1haW5dXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgICAgICAgICAgLy8gW251bWJlciwgcmVtYWluLCByZW1haW5dXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NJWkUnKTtcbiAgICAgICAgICAgICAgICAgIC8vIFtudW1iZXIsIHJlbWFpbiwgcmVtYWluXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdERUMnKTtcbiAgICAgICAgICAgICAgICAgIC8vIFtuZXh0UmVtYWluLCByZW1haW5dXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0xFRlQnKTtcbiAgICAgICAgICAgICAgICAgIC8vIFtyZW1haW5dXG4gICAgICAgICAgICAgICAgICBzYi5zY29wZS5zZXQoc2IsIG5vZGUsIGlubmVyT3B0aW9ucywgcmVtYWluKTtcbiAgICAgICAgICAgICAgICAgIC8vIFsxLCByZW1haW5dXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAxKTtcbiAgICAgICAgICAgICAgICAgIC8vIFtjaGFyXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdSSUdIVCcpO1xuICAgICAgICAgICAgICAgICAgLy8gWzB4MzAsIGNoYXJdXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAweDMwKTtcbiAgICAgICAgICAgICAgICAgIC8vIFtjaGFyIC0gMHgzMF1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1VCJyk7XG4gICAgICAgICAgICAgICAgICAvLyBbbnVtYmVyXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFtudW1iZXIsIG51bWJlcl1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBbOSwgbnVtYmVyLCBudW1iZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCA5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFtudW1iZXIgPiA5LCBudW1iZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0dUJyk7XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gW11cbiAgICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gW11cbiAgICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy50aHJvd1R5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbbnVtYmVyLCBudW1iZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWzAsIG51bWJlciwgbnVtYmVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbbnVtYmVyID4gMCwgbnVtYmVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdMVCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMudGhyb3dUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAvLyBbbiwgbnVtYmVyXVxuICAgICAgICAgICAgICAgICAgc2Iuc2NvcGUuZ2V0KHNiLCBub2RlLCBpbm5lck9wdGlvbnMsIG4pO1xuICAgICAgICAgICAgICAgICAgLy8gW24sIG4sIG51bWJlcl1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgICAgICAgICAvLyBbbnVtYmVyLCBuLCBuLCBudW1iZXJdXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAxMCk7XG4gICAgICAgICAgICAgICAgICAvLyBbbnVtYmVyLCBuIG51bWJlcl1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTVVMJyk7XG4gICAgICAgICAgICAgICAgICAvLyBbbiwgbnVtYmVyXVxuICAgICAgICAgICAgICAgICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBpbm5lck9wdGlvbnMsIG4pO1xuICAgICAgICAgICAgICAgICAgLy8gW251bWJlcl1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTVVMJyk7XG4gICAgICAgICAgICAgICAgICAvLyBbYWNjdW0sIG51bWJlcl1cbiAgICAgICAgICAgICAgICAgIHNiLnNjb3BlLmdldChzYiwgbm9kZSwgaW5uZXJPcHRpb25zLCBhY2N1bSk7XG4gICAgICAgICAgICAgICAgICAvLyBbbnVtYmVyXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdBREQnKTtcbiAgICAgICAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICAgICAgICBzYi5zY29wZS5zZXQoc2IsIG5vZGUsIGlubmVyT3B0aW9ucywgYWNjdW0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xlYW51cDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vIFtudW1iZXJdXG4gICAgICAgICAgICBzYi5zY29wZS5nZXQoc2IsIG5vZGUsIG9wdGlvbnMsIGFjY3VtKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnZlcnRPYmplY3QgPSAob3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZCA9PiB7XG4gICAgICAvLyBbcHJpbWl0aXZlXVxuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy50b1ByaW1pdGl2ZSh7IHR5cGU6IHRoaXMudHlwZSwga25vd25UeXBlOiBUeXBlcy5PYmplY3QsIHByZWZlcnJlZFR5cGU6ICdudW1iZXInIH0pLFxuICAgICAgKTtcbiAgICAgIC8vIFtzdHJpbmddXG4gICAgICBkb0NvbnZlcnQob3B0aW9ucywgZmFsc2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBkb0NvbnZlcnQgPSAob3B0aW9uczogVmlzaXRPcHRpb25zLCBpbml0aWFsID0gdHJ1ZSkgPT4ge1xuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgICAgdHlwZTogaW5pdGlhbCA/IHRoaXMudHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBrbm93blR5cGU6IGluaXRpYWwgPyB0aGlzLmtub3duVHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhcnJheTogaW5pdGlhbCA/IGNvbnZlcnRBcnJheSA6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgIGFycmF5U3RvcmFnZTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgYm9vbGVhbjogY29udmVydEJvb2xlYW4sXG4gICAgICAgICAgYnVmZmVyOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICBudWxsOiBjb252ZXJ0TnVsbCxcbiAgICAgICAgICBudW1iZXI6IGNvbnZlcnROdW1iZXIsXG4gICAgICAgICAgb2JqZWN0OiBpbml0aWFsID8gY29udmVydE9iamVjdCA6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgIHN0cmluZzogY29udmVydFN0cmluZyxcbiAgICAgICAgICBzeW1ib2w6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgIHVuZGVmaW5lZDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgbWFwOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICBtYXBTdG9yYWdlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICBzZXQ6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgIHNldFN0b3JhZ2U6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgIGVycm9yOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICBmb3J3YXJkVmFsdWU6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICBpdGVyYWJsZTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgaXRlcmFibGVJdGVyYXRvcjogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgdHJhbnNhY3Rpb246IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgIG91dHB1dDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgYXR0cmlidXRlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICBpbnB1dDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgYWNjb3VudDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgYXNzZXQ6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgIGNvbnRyYWN0OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICBoZWFkZXI6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgIGJsb2NrOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH07XG5cbiAgICBkb0NvbnZlcnQoc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pLCB0cnVlKTtcblxuICAgIGlmICghb3B0aW9uc0luLnB1c2hWYWx1ZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuIl19