UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

190 lines (188 loc) 30.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../../constants"); const Helper_1 = require("../Helper"); class ToPrimitiveHelper extends Helper_1.Helper { constructor({ type, knownType, preferredType = 'default' }) { super(); this.type = type; this.knownType = knownType; this.preferredType = preferredType; } emit(sb, node, optionsIn) { if (!optionsIn.pushValue) { sb.emitOp(node, 'DROP'); return; } const throwTypeError = (options) => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, options, sb.helpers.throwTypeError); }; const throwInnerTypeError = (options) => { sb.emitOp(node, 'DROP'); throwTypeError(options); }; const convertPrimitive = () => { }; const convertBuffer = (options) => { sb.emitHelper(node, options, sb.helpers.unwrapBuffer); sb.emitHelper(node, options, sb.helpers.wrapString); }; const convertObject = (options) => { const convertObjectDone = () => { sb.emitOp(node, 'NIP'); }; const tryConvert = () => { const methods = this.preferredType === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; const convert = (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.getPropertyObjectProperty); sb.emitHelper(node, innerOptions, sb.helpers.if({ condition: () => { sb.emitOp(node, 'DUP'); sb.emitHelper(node, innerOptions, sb.helpers.isUndefined); }, whenTrue: () => { sb.emitOp(node, 'DROP'); }, whenFalse: () => { sb.emitHelper(node, innerOptions, sb.helpers.invokeCall({ bindThis: true, noArgs: true })); }, })); }; const nextConvertObject = (innerOptions) => { sb.emitOp(node, 'DROP'); sb.emitOp(node, 'DUP'); sb.emitPushString(node, methods[1]); convert(innerOptions); sb.emitHelper(node, optionsIn, sb.helpers.forBuiltinType({ type: undefined, knownType: undefined, array: throwTypeError, arrayStorage: throwTypeError, boolean: convertPrimitive, buffer: throwTypeError, null: convertPrimitive, number: convertPrimitive, object: throwTypeError, string: convertPrimitive, symbol: convertPrimitive, undefined: convertPrimitive, 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, })); }; sb.emitOp(node, 'DUP'); sb.emitOp(node, 'DUP'); sb.emitPushString(node, methods[0]); convert(optionsIn); sb.emitHelper(node, optionsIn, sb.helpers.forBuiltinType({ type: undefined, knownType: undefined, array: nextConvertObject, arrayStorage: throwInnerTypeError, boolean: convertObjectDone, buffer: nextConvertObject, null: convertObjectDone, number: convertObjectDone, object: nextConvertObject, string: convertObjectDone, symbol: convertObjectDone, undefined: convertObjectDone, map: throwInnerTypeError, mapStorage: throwInnerTypeError, set: throwInnerTypeError, setStorage: throwInnerTypeError, error: throwInnerTypeError, forwardValue: throwInnerTypeError, iteratorResult: throwInnerTypeError, iterable: throwInnerTypeError, iterableIterator: throwInnerTypeError, transaction: throwInnerTypeError, output: throwInnerTypeError, attribute: throwInnerTypeError, input: throwInnerTypeError, account: throwInnerTypeError, asset: throwInnerTypeError, contract: throwInnerTypeError, header: throwInnerTypeError, block: throwInnerTypeError, })); }; sb.emitOp(node, 'DUP'); sb.emitPushString(node, constants_1.WellKnownSymbol.toPrimitive); sb.emitHelper(node, options, sb.helpers.getSymbolObjectProperty); sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitOp(node, 'DUP'); sb.emitHelper(node, options, sb.helpers.isUndefined); }, whenTrue: () => { sb.emitOp(node, 'DROP'); tryConvert(); }, whenFalse: () => { sb.emitPushString(node, this.preferredType); sb.emitPushInt(node, 1); sb.emitOp(node, 'PACK'); sb.emitOp(node, 'ROT'); sb.emitOp(node, 'ROT'); sb.emitHelper(node, options, sb.helpers.invokeCall({ bindThis: true })); }, })); }; const toString = (knownType) => (options) => { sb.emitHelper(node, options, sb.helpers.toString({ type: this.type, knownType })); sb.emitHelper(node, options, sb.helpers.wrapString); }; sb.emitHelper(node, optionsIn, sb.helpers.forBuiltinType({ type: this.type, knownType: this.knownType, array: toString(constants_1.Types.Array), arrayStorage: toString(constants_1.Types.Array), boolean: convertPrimitive, buffer: convertBuffer, null: convertPrimitive, number: convertPrimitive, object: convertObject, string: convertPrimitive, symbol: convertPrimitive, undefined: convertPrimitive, map: toString(constants_1.Types.Array), mapStorage: toString(constants_1.Types.Array), set: toString(constants_1.Types.Array), setStorage: toString(constants_1.Types.Array), error: toString(constants_1.Types.Error), forwardValue: toString(constants_1.Types.ForwardValue), iteratorResult: toString(constants_1.Types.IteratorResult), iterable: toString(constants_1.Types.Iterable), iterableIterator: toString(constants_1.Types.IterableIterator), transaction: toString(constants_1.Types.Transaction), output: toString(constants_1.Types.Output), attribute: toString(constants_1.Types.Attribute), input: toString(constants_1.Types.Input), account: toString(constants_1.Types.Account), asset: toString(constants_1.Types.Asset), contract: toString(constants_1.Types.Contract), header: toString(constants_1.Types.Header), block: toString(constants_1.Types.Block), })); } } exports.ToPrimitiveHelper = ToPrimitiveHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,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VyxDQUFDO1lBQ3hDLE1BQU0sRUFBRSxRQUFRLENBQUMsaUJBQUssQ0FBQyxNQUFNLENBQUM7WUFDOUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxpQkFBSyxDQUFDLFNBQVMsQ0FBQztZQUNwQyxLQUFLLEVBQUUsUUFBUSxDQUFDLGlCQUFLLENBQUMsS0FBSyxDQUFDO1lBQzVCLE9BQU8sRUFBRSxRQUFRLENBQUMsaUJBQUssQ0FBQyxPQUFPLENBQUM7WUFDaEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxpQkFBSyxDQUFDLEtBQUssQ0FBQztZQUM1QixRQUFRLEVBQUUsUUFBUSxDQUFDLGlCQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2xDLE1BQU0sRUFBRSxRQUFRLENBQUMsaUJBQUssQ0FBQyxNQUFNLENBQUM7WUFDOUIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxpQkFBSyxDQUFDLEtBQUssQ0FBQztTQUM3QixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTVQRCw4Q0E0UEMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvdHlwZXMvVG9QcmltaXRpdmVIZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBUeXBlcywgV2VsbEtub3duU3ltYm9sIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9IZWxwZXInO1xuXG5leHBvcnQgdHlwZSBQcmVmZXJyZWRUeXBlID0gJ2RlZmF1bHQnIHwgJ3N0cmluZycgfCAnbnVtYmVyJztcbmV4cG9ydCBpbnRlcmZhY2UgVG9QcmltaXRpdmVIZWxwZXJPcHRpb25zIHtcbiAgcmVhZG9ubHkgdHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkga25vd25UeXBlPzogVHlwZXM7XG4gIHJlYWRvbmx5IHByZWZlcnJlZFR5cGU/OiBQcmVmZXJyZWRUeXBlO1xufVxuXG4vLyBOT1RFOiBVbmxpa2UgdGhlIG90aGVyIFRvKiBtZXRob2RzLCB0aGlzIHJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuLy8gSW5wdXQ6IFt2YWxdXG4vLyBPdXRwdXQ6IFt2YWxdXG5leHBvcnQgY2xhc3MgVG9QcmltaXRpdmVIZWxwZXIgZXh0ZW5kcyBIZWxwZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHR5cGU6IHRzLlR5cGUgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkga25vd25UeXBlOiBUeXBlcyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVmZXJyZWRUeXBlOiBQcmVmZXJyZWRUeXBlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IHR5cGUsIGtub3duVHlwZSwgcHJlZmVycmVkVHlwZSA9ICdkZWZhdWx0JyB9OiBUb1ByaW1pdGl2ZUhlbHBlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5rbm93blR5cGUgPSBrbm93blR5cGU7XG4gICAgdGhpcy5wcmVmZXJyZWRUeXBlID0gcHJlZmVycmVkVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9uc0luLnB1c2hWYWx1ZSkge1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aHJvd1R5cGVFcnJvciA9IChvcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLnRocm93VHlwZUVycm9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdGhyb3dJbm5lclR5cGVFcnJvciA9IChvcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgdGhyb3dUeXBlRXJyb3Iob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnZlcnRQcmltaXRpdmUgPSAoKSA9PiB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnZlcnRCdWZmZXIgPSAob3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICAvLyBbYnVmZmVyXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcEJ1ZmZlcik7XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLndyYXBTdHJpbmcpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb252ZXJ0T2JqZWN0ID0gKG9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgY29udmVydE9iamVjdERvbmUgPSAoKSA9PiB7XG4gICAgICAgIC8vIFt2YWxdXG4gICAgICAgIHNiLmVtaXRPcChub2RlLCAnTklQJyk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0cnlDb252ZXJ0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBtZXRob2RzID0gdGhpcy5wcmVmZXJyZWRUeXBlID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSAoaW5uZXJPcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAvLyBbZnVuYywgdmFsdWVdXG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuZ2V0UHJvcGVydHlPYmplY3RQcm9wZXJ0eSk7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBpbm5lck9wdGlvbnMsXG4gICAgICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW2Z1bmMsIGZ1bmMsIHZhbHVlXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgICAgICAgLy8gW2lzVW5kZWZpbmVkLCBmdW5jLCB2YWx1ZV1cbiAgICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5pc1VuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHdoZW5UcnVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW3ZhbHVlXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5pbnZva2VDYWxsKHsgYmluZFRoaXM6IHRydWUsIG5vQXJnczogdHJ1ZSB9KSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG5leHRDb252ZXJ0T2JqZWN0ID0gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgLy8gW3ZhbF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAvLyBbdmFsLCB2YWxdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgICAgICAvLyBbbWV0aG9kLCB2YWwsIHZhbF1cbiAgICAgICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCBtZXRob2RzWzFdKTtcbiAgICAgICAgICAvLyBbY29udmVydGVkVmFsXVxuICAgICAgICAgIGNvbnZlcnQoaW5uZXJPcHRpb25zKTtcblxuICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgb3B0aW9uc0luLFxuICAgICAgICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgICAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAga25vd25UeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGFycmF5OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgYXJyYXlTdG9yYWdlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgYm9vbGVhbjogY29udmVydFByaW1pdGl2ZSxcbiAgICAgICAgICAgICAgYnVmZmVyOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgbnVsbDogY29udmVydFByaW1pdGl2ZSxcbiAgICAgICAgICAgICAgbnVtYmVyOiBjb252ZXJ0UHJpbWl0aXZlLFxuICAgICAgICAgICAgICBvYmplY3Q6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgICAgICBzdHJpbmc6IGNvbnZlcnRQcmltaXRpdmUsXG4gICAgICAgICAgICAgIHN5bWJvbDogY29udmVydFByaW1pdGl2ZSxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkOiBjb252ZXJ0UHJpbWl0aXZlLFxuICAgICAgICAgICAgICBtYXA6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgICAgICBtYXBTdG9yYWdlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgc2V0OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgc2V0U3RvcmFnZTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIGVycm9yOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgZm9yd2FyZFZhbHVlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgaXRlcmF0b3JSZXN1bHQ6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgICAgICBpdGVyYWJsZTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIGl0ZXJhYmxlSXRlcmF0b3I6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbjogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIG91dHB1dDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIGlucHV0OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgYWNjb3VudDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIGFzc2V0OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgY29udHJhY3Q6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgICAgICBoZWFkZXI6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgICAgICBibG9jazogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFt2YWwsIHZhbF1cbiAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgICAgLy8gW3ZhbCwgdmFsLCB2YWxdXG4gICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgIC8vIFttZXRob2QsIHZhbCwgdmFsXVxuICAgICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCBtZXRob2RzWzBdKTtcbiAgICAgICAgLy8gW2NvbnZlcnRlZFZhbCwgdmFsXVxuICAgICAgICBjb252ZXJ0KG9wdGlvbnNJbik7XG5cbiAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG9wdGlvbnNJbixcbiAgICAgICAgICBzYi5oZWxwZXJzLmZvckJ1aWx0aW5UeXBlKHtcbiAgICAgICAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGtub3duVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJyYXk6IG5leHRDb252ZXJ0T2JqZWN0LFxuICAgICAgICAgICAgYXJyYXlTdG9yYWdlOiB0aHJvd0lubmVyVHlwZUVycm9yLFxuICAgICAgICAgICAgYm9vbGVhbjogY29udmVydE9iamVjdERvbmUsXG4gICAgICAgICAgICBidWZmZXI6IG5leHRDb252ZXJ0T2JqZWN0LFxuICAgICAgICAgICAgbnVsbDogY29udmVydE9iamVjdERvbmUsXG4gICAgICAgICAgICBudW1iZXI6IGNvbnZlcnRPYmplY3REb25lLFxuICAgICAgICAgICAgb2JqZWN0OiBuZXh0Q29udmVydE9iamVjdCxcbiAgICAgICAgICAgIHN0cmluZzogY29udmVydE9iamVjdERvbmUsXG4gICAgICAgICAgICBzeW1ib2w6IGNvbnZlcnRPYmplY3REb25lLFxuICAgICAgICAgICAgdW5kZWZpbmVkOiBjb252ZXJ0T2JqZWN0RG9uZSxcbiAgICAgICAgICAgIG1hcDogdGhyb3dJbm5lclR5cGVFcnJvcixcbiAgICAgICAgICAgIG1hcFN0b3JhZ2U6IHRocm93SW5uZXJUeXBlRXJyb3IsXG4gICAgICAgICAgICBzZXQ6IHRocm93SW5uZXJUeXBlRXJyb3IsXG4gICAgICAgICAgICBzZXRTdG9yYWdlOiB0aHJvd0lubmVyVHlwZUVycm9yLFxuICAgICAgICAgICAgZXJyb3I6IHRocm93SW5uZXJUeXBlRXJyb3IsXG4gICAgICAgICAgICBmb3J3YXJkVmFsdWU6IHRocm93SW5uZXJUeXBlRXJyb3IsXG4gICAgICAgICAgICBpdGVyYXRvclJlc3VsdDogdGhyb3dJbm5lclR5cGVFcnJvcixcbiAgICAgICAgICAgIGl0ZXJhYmxlOiB0aHJvd0lubmVyVHlwZUVycm9yLFxuICAgICAgICAgICAgaXRlcmFibGVJdGVyYXRvcjogdGhyb3dJbm5lclR5cGVFcnJvcixcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uOiB0aHJvd0lubmVyVHlwZUVycm9yLFxuICAgICAgICAgICAgb3V0cHV0OiB0aHJvd0lubmVyVHlwZUVycm9yLFxuICAgICAgICAgICAgYXR0cmlidXRlOiB0aHJvd0lubmVyVHlwZUVycm9yLFxuICAgICAgICAgICAgaW5wdXQ6IHRocm93SW5uZXJUeXBlRXJyb3IsXG4gICAgICAgICAgICBhY2NvdW50OiB0aHJvd0lubmVyVHlwZUVycm9yLFxuICAgICAgICAgICAgYXNzZXQ6IHRocm93SW5uZXJUeXBlRXJyb3IsXG4gICAgICAgICAgICBjb250cmFjdDogdGhyb3dJbm5lclR5cGVFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcjogdGhyb3dJbm5lclR5cGVFcnJvcixcbiAgICAgICAgICAgIGJsb2NrOiB0aHJvd0lubmVyVHlwZUVycm9yLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgLy8gW3ZhbHVlLCB2YWx1ZV1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAvLyBbc3ltYm9sLCB2YWx1ZSwgdmFsdWVdXG4gICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCBXZWxsS25vd25TeW1ib2wudG9QcmltaXRpdmUpO1xuICAgICAgLy8gW3RvUHJpbWl0aXZlLCB2YWx1ZV1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5nZXRTeW1ib2xPYmplY3RQcm9wZXJ0eSk7XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBbdG9QcmltaXRpdmUsIHRvUHJpbWl0aXZlLCB2YWx1ZV1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgICAvLyBbaXNVbmRlZmluZWQsIHRvUHJpbWl0aXZlLCB2YWx1ZV1cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5pc1VuZGVmaW5lZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW3ZhbHVlXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgICAvLyBbdmFsdWVdXG4gICAgICAgICAgICB0cnlDb252ZXJ0KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFtwcmVmZXJyZWRUeXBlLCB0b1ByaW1pdGl2ZVZhbCwgdmFsXVxuICAgICAgICAgICAgc2IuZW1pdFB1c2hTdHJpbmcobm9kZSwgdGhpcy5wcmVmZXJyZWRUeXBlKTtcbiAgICAgICAgICAgIC8vIFsxLCBwcmVmZXJyZWRUeXBlLCB0b1ByaW1pdGl2ZVZhbCwgdmFsXVxuICAgICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMSk7XG4gICAgICAgICAgICAvLyBbYXJncywgdG9QcmltaXRpdmVWYWwsIHZhbF1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUEFDSycpO1xuICAgICAgICAgICAgLy8gW3ZhbCwgYXJncywgdG9QcmltaXRpdmVWYWxdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1JPVCcpO1xuICAgICAgICAgICAgLy8gW3RvUHJpbWl0aXZlVmFsLCB2YWwsIGFyZ3NdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1JPVCcpO1xuICAgICAgICAgICAgLy8gW3ZhbF1cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5pbnZva2VDYWxsKHsgYmluZFRoaXM6IHRydWUgfSkpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdG9TdHJpbmcgPSAoa25vd25UeXBlOiBUeXBlcykgPT4gKG9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgLy8gW3N0cmluZ11cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy50b1N0cmluZyh7IHR5cGU6IHRoaXMudHlwZSwga25vd25UeXBlIH0pKTtcbiAgICAgIC8vIFt2YWxdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcFN0cmluZyk7XG4gICAgfTtcblxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9uc0luLFxuICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAga25vd25UeXBlOiB0aGlzLmtub3duVHlwZSxcbiAgICAgICAgYXJyYXk6IHRvU3RyaW5nKFR5cGVzLkFycmF5KSxcbiAgICAgICAgYXJyYXlTdG9yYWdlOiB0b1N0cmluZyhUeXBlcy5BcnJheSksXG4gICAgICAgIGJvb2xlYW46IGNvbnZlcnRQcmltaXRpdmUsXG4gICAgICAgIGJ1ZmZlcjogY29udmVydEJ1ZmZlcixcbiAgICAgICAgbnVsbDogY29udmVydFByaW1pdGl2ZSxcbiAgICAgICAgbnVtYmVyOiBjb252ZXJ0UHJpbWl0aXZlLFxuICAgICAgICBvYmplY3Q6IGNvbnZlcnRPYmplY3QsXG4gICAgICAgIHN0cmluZzogY29udmVydFByaW1pdGl2ZSxcbiAgICAgICAgc3ltYm9sOiBjb252ZXJ0UHJpbWl0aXZlLFxuICAgICAgICB1bmRlZmluZWQ6IGNvbnZlcnRQcmltaXRpdmUsXG4gICAgICAgIG1hcDogdG9TdHJpbmcoVHlwZXMuQXJyYXkpLFxuICAgICAgICBtYXBTdG9yYWdlOiB0b1N0cmluZyhUeXBlcy5BcnJheSksXG4gICAgICAgIHNldDogdG9TdHJpbmcoVHlwZXMuQXJyYXkpLFxuICAgICAgICBzZXRTdG9yYWdlOiB0b1N0cmluZyhUeXBlcy5BcnJheSksXG4gICAgICAgIGVycm9yOiB0b1N0cmluZyhUeXBlcy5FcnJvciksXG4gICAgICAgIGZvcndhcmRWYWx1ZTogdG9TdHJpbmcoVHlwZXMuRm9yd2FyZFZhbHVlKSxcbiAgICAgICAgaXRlcmF0b3JSZXN1bHQ6IHRvU3RyaW5nKFR5cGVzLkl0ZXJhdG9yUmVzdWx0KSxcbiAgICAgICAgaXRlcmFibGU6IHRvU3RyaW5nKFR5cGVzLkl0ZXJhYmxlKSxcbiAgICAgICAgaXRlcmFibGVJdGVyYXRvcjogdG9TdHJpbmcoVHlwZXMuSXRlcmFibGVJdGVyYXRvciksXG4gICAgICAgIHRyYW5zYWN0aW9uOiB0b1N0cmluZyhUeXBlcy5UcmFuc2FjdGlvbiksXG4gICAgICAgIG91dHB1dDogdG9TdHJpbmcoVHlwZXMuT3V0cHV0KSxcbiAgICAgICAgYXR0cmlidXRlOiB0b1N0cmluZyhUeXBlcy5BdHRyaWJ1dGUpLFxuICAgICAgICBpbnB1dDogdG9TdHJpbmcoVHlwZXMuSW5wdXQpLFxuICAgICAgICBhY2NvdW50OiB0b1N0cmluZyhUeXBlcy5BY2NvdW50KSxcbiAgICAgICAgYXNzZXQ6IHRvU3RyaW5nKFR5cGVzLkFzc2V0KSxcbiAgICAgICAgY29udHJhY3Q6IHRvU3RyaW5nKFR5cGVzLkNvbnRyYWN0KSxcbiAgICAgICAgaGVhZGVyOiB0b1N0cmluZyhUeXBlcy5IZWFkZXIpLFxuICAgICAgICBibG9jazogdG9TdHJpbmcoVHlwZXMuQmxvY2spLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIl19