@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
197 lines (195 loc) • 28.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../../constants");
const Helper_1 = require("../Helper");
class EqualsEqualsEqualsHelper extends Helper_1.Helper {
constructor(options) {
super();
this.leftType = options.leftType;
this.leftKnownType = options.leftKnownType;
this.rightType = options.rightType;
this.rightKnownType = options.rightKnownType;
}
emit(sb, node, options) {
if (!options.pushValue) {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
return;
}
const pushFalse = () => {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
sb.emitPushBoolean(node, false);
};
const pushTrue = () => {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
sb.emitPushBoolean(node, true);
};
const compare = (type) => (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapVal({ type }));
sb.emitOp(node, 'SWAP');
sb.emitHelper(node, innerOptions, sb.helpers.unwrapVal({ type }));
sb.emitOp(node, 'EQUAL');
};
const compareStorageValue = () => {
sb.emitPushInt(node, 1);
sb.emitOp(node, 'PICKITEM');
sb.emitOp(node, 'SWAP');
sb.emitPushInt(node, 1);
sb.emitOp(node, 'PICKITEM');
sb.emitOp(node, 'EQUAL');
};
const compareNumber = (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapNumber);
sb.emitOp(node, 'SWAP');
sb.emitHelper(node, innerOptions, sb.helpers.unwrapNumber);
sb.emitOp(node, 'NUMEQUAL');
};
const createProcess = (value, type, compareValue = compare(type)) => (innerOptions) => {
sb.emitOp(node, 'SWAP');
sb.emitHelper(node, innerOptions, sb.helpers.forBuiltinType({
type: this.leftType,
knownType: this.leftKnownType,
array: pushFalse,
arrayStorage: pushFalse,
boolean: pushFalse,
buffer: pushFalse,
null: pushFalse,
number: pushFalse,
object: pushFalse,
string: pushFalse,
symbol: pushFalse,
undefined: pushFalse,
map: pushFalse,
mapStorage: pushFalse,
set: pushFalse,
setStorage: pushFalse,
error: pushFalse,
forwardValue: pushFalse,
iteratorResult: pushFalse,
iterable: pushFalse,
iterableIterator: pushFalse,
transaction: pushFalse,
output: pushFalse,
attribute: pushFalse,
input: pushFalse,
account: pushFalse,
asset: pushFalse,
contract: pushFalse,
header: pushFalse,
block: pushFalse,
[value]: compareValue,
}));
};
const createProcessStorage = (value) => (innerOptions) => {
sb.emitOp(node, 'SWAP');
sb.emitHelper(node, innerOptions, sb.helpers.forBuiltinType({
type: this.leftType,
knownType: this.leftKnownType,
array: pushFalse,
arrayStorage: pushFalse,
boolean: pushFalse,
buffer: pushFalse,
null: pushFalse,
number: pushFalse,
object: pushFalse,
string: pushFalse,
symbol: pushFalse,
undefined: pushFalse,
map: pushFalse,
mapStorage: pushFalse,
set: pushFalse,
setStorage: pushFalse,
error: pushFalse,
forwardValue: pushFalse,
iteratorResult: pushFalse,
iterable: pushFalse,
iterableIterator: pushFalse,
transaction: pushFalse,
output: pushFalse,
attribute: pushFalse,
input: pushFalse,
account: pushFalse,
asset: pushFalse,
contract: pushFalse,
header: pushFalse,
block: pushFalse,
[value]: compareStorageValue,
}));
};
const createProcessNullOrUndefined = (value) => (innerOptions) => {
sb.emitOp(node, 'SWAP');
sb.emitHelper(node, innerOptions, sb.helpers.forBuiltinType({
type: this.leftType,
knownType: this.leftKnownType,
array: pushFalse,
arrayStorage: pushFalse,
boolean: pushFalse,
buffer: pushFalse,
null: pushFalse,
number: pushFalse,
object: pushFalse,
string: pushFalse,
symbol: pushFalse,
undefined: pushFalse,
map: pushFalse,
mapStorage: pushFalse,
set: pushFalse,
setStorage: pushFalse,
error: pushFalse,
forwardValue: pushFalse,
iteratorResult: pushFalse,
iterable: pushFalse,
iterableIterator: pushFalse,
transaction: pushFalse,
output: pushFalse,
attribute: pushFalse,
input: pushFalse,
account: pushFalse,
asset: pushFalse,
contract: pushFalse,
header: pushFalse,
block: pushFalse,
[value]: pushTrue,
}));
};
const createProcessIterable = () => (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);
};
sb.emitHelper(node, options, sb.helpers.forBuiltinType({
type: this.rightType,
knownType: this.rightKnownType,
array: createProcess('array', constants_1.Types.Array),
arrayStorage: createProcessStorage('arrayStorage'),
boolean: createProcess('boolean', constants_1.Types.Boolean),
buffer: createProcess('buffer', constants_1.Types.Buffer),
null: createProcessNullOrUndefined('null'),
number: createProcess('number', constants_1.Types.Number, compareNumber),
object: createProcess('object', constants_1.Types.Object),
string: createProcess('string', constants_1.Types.String),
symbol: createProcess('symbol', constants_1.Types.Symbol),
undefined: createProcessNullOrUndefined('undefined'),
map: createProcess('map', constants_1.Types.Map),
mapStorage: createProcessStorage('mapStorage'),
set: createProcess('set', constants_1.Types.Set),
setStorage: createProcessStorage('setStorage'),
error: createProcess('error', constants_1.Types.Error),
forwardValue: createProcess('error', constants_1.Types.ForwardValue),
iteratorResult: createProcess('iteratorResult', constants_1.Types.IteratorResult),
iterable: createProcessIterable(),
iterableIterator: createProcess('iterableIterator', constants_1.Types.IterableIterator),
transaction: createProcess('transaction', constants_1.Types.Transaction),
output: createProcess('output', constants_1.Types.Output),
attribute: createProcess('attribute', constants_1.Types.Attribute),
input: createProcess('input', constants_1.Types.Input),
account: createProcess('account', constants_1.Types.Account),
asset: createProcess('asset', constants_1.Types.Asset),
contract: createProcess('contract', constants_1.Types.Contract),
header: createProcess('header', constants_1.Types.Header),
block: createProcess('block', constants_1.Types.Block),
}));
}
}
exports.EqualsEqualsEqualsHelper = EqualsEqualsEqualsHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkVxdWFsc0VxdWFsc0VxdWFsc0hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLCtDQUF1RDtBQUd2RCxzQ0FBbUM7QUFZbkMsTUFBYSx3QkFBeUIsU0FBUSxlQUFNO0lBTWxELFlBQW1CLE9BQXdDO1FBQ3pELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0lBQy9DLENBQUM7SUFFTSxJQUFJLENBQUMsRUFBaUIsRUFBRSxJQUFhLEVBQUUsT0FBcUI7UUFDakUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFeEIsT0FBTztTQUNSO1FBRUQsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBRXJCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtZQUVwQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixF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U0FBUyxFQUFFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsaUJBQUssQ0FBQyxTQUFTLENBQUM7WUFDdEQsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsaUJBQUssQ0FBQyxLQUFLLENBQUM7WUFDMUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxTQUFTLEVBQUUsaUJBQUssQ0FBQyxPQUFPLENBQUM7WUFDaEQsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsaUJBQUssQ0FBQyxLQUFLLENBQUM7WUFDMUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxVQUFVLEVBQUUsaUJBQUssQ0FBQyxRQUFRLENBQUM7WUFDbkQsTUFBTSxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsaUJBQUssQ0FBQyxNQUFNLENBQUM7WUFDN0MsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsaUJBQUssQ0FBQyxLQUFLLENBQUM7U0FDM0MsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF2T0QsNERBdU9DIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvaGVscGVyL3JlbGF0aW9uYWwvRXF1YWxzRXF1YWxzRXF1YWxzSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgVHlwZXMsIFdyYXBwYWJsZVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL0hlbHBlcic7XG5pbXBvcnQgeyBGb3JCdWlsdGluVHlwZUhlbHBlck9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXF1YWxzRXF1YWxzRXF1YWxzSGVscGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGxlZnRUeXBlOiB0cy5UeXBlIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBsZWZ0S25vd25UeXBlPzogVHlwZXM7XG4gIHJlYWRvbmx5IHJpZ2h0VHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcmlnaHRLbm93blR5cGU/OiBUeXBlcztcbn1cblxuLy8gSW5wdXQ6IFtyaWdodCwgbGVmdF1cbi8vIE91dHB1dDogW2Jvb2xlYW5dXG5leHBvcnQgY2xhc3MgRXF1YWxzRXF1YWxzRXF1YWxzSGVscGVyIGV4dGVuZHMgSGVscGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBsZWZ0VHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBsZWZ0S25vd25UeXBlPzogVHlwZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmlnaHRUeXBlOiB0cy5UeXBlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IHJpZ2h0S25vd25UeXBlPzogVHlwZXM7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVxdWFsc0VxdWFsc0VxdWFsc0hlbHBlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGVmdFR5cGUgPSBvcHRpb25zLmxlZnRUeXBlO1xuICAgIHRoaXMubGVmdEtub3duVHlwZSA9IG9wdGlvbnMubGVmdEtub3duVHlwZTtcbiAgICB0aGlzLnJpZ2h0VHlwZSA9IG9wdGlvbnMucmlnaHRUeXBlO1xuICAgIHRoaXMucmlnaHRLbm93blR5cGUgPSBvcHRpb25zLnJpZ2h0S25vd25UeXBlO1xuICB9XG5cbiAgcHVibGljIGVtaXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucy5wdXNoVmFsdWUpIHtcbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwdXNoRmFsc2UgPSAoKSA9PiB7XG4gICAgICAvLyBbcmlnaHRdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIC8vIFtdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIC8vIFtib29sZWFuXVxuICAgICAgc2IuZW1pdFB1c2hCb29sZWFuKG5vZGUsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHVzaFRydWUgPSAoKSA9PiB7XG4gICAgICAvLyBbcmlnaHRdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIC8vIFtdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIC8vIFtib29sZWFuXVxuICAgICAgc2IuZW1pdFB1c2hCb29sZWFuKG5vZGUsIHRydWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb21wYXJlID0gKHR5cGU6IFdyYXBwYWJsZVR5cGUpID0+IChpbm5lck9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwVmFsKHsgdHlwZSB9KSk7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcFZhbCh7IHR5cGUgfSkpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdFUVVBTCcpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb21wYXJlU3RvcmFnZVZhbHVlID0gKCkgPT4ge1xuICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMSk7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0tJVEVNJyk7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDEpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdQSUNLSVRFTScpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdFUVVBTCcpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb21wYXJlTnVtYmVyID0gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBOdW1iZXIpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBOdW1iZXIpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdOVU1FUVVBTCcpO1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVQcm9jZXNzID0gKFxuICAgICAgdmFsdWU6IGtleW9mIEZvckJ1aWx0aW5UeXBlSGVscGVyT3B0aW9ucyxcbiAgICAgIHR5cGU6IFdyYXBwYWJsZVR5cGUsXG4gICAgICBjb21wYXJlVmFsdWUgPSBjb21wYXJlKHR5cGUpLFxuICAgICkgPT4gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5sZWZ0VHlwZSxcbiAgICAgICAgICBrbm93blR5cGU6IHRoaXMubGVmdEtub3duVHlwZSxcbiAgICAgICAgICBhcnJheTogcHVzaEZhbHNlLFxuICAgICAgICAgIGFycmF5U3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGJvb2xlYW46IHB1c2hGYWxzZSxcbiAgICAgICAgICBidWZmZXI6IHB1c2hGYWxzZSxcbiAgICAgICAgICBudWxsOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbnVtYmVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgb2JqZWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3RyaW5nOiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3ltYm9sOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdW5kZWZpbmVkOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwU3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldDogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldFN0b3JhZ2U6IHB1c2hGYWxzZSxcbiAgICAgICAgICBlcnJvcjogcHVzaEZhbHNlLFxuICAgICAgICAgIGZvcndhcmRWYWx1ZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaXRlcmFibGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdHJhbnNhY3Rpb246IHB1c2hGYWxzZSxcbiAgICAgICAgICBvdXRwdXQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpbnB1dDogcHVzaEZhbHNlLFxuICAgICAgICAgIGFjY291bnQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhc3NldDogcHVzaEZhbHNlLFxuICAgICAgICAgIGNvbnRyYWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaGVhZGVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgYmxvY2s6IHB1c2hGYWxzZSxcbiAgICAgICAgICBbdmFsdWVdOiBjb21wYXJlVmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlUHJvY2Vzc1N0b3JhZ2UgPSAodmFsdWU6IGtleW9mIEZvckJ1aWx0aW5UeXBlSGVscGVyT3B0aW9ucykgPT4gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5sZWZ0VHlwZSxcbiAgICAgICAgICBrbm93blR5cGU6IHRoaXMubGVmdEtub3duVHlwZSxcbiAgICAgICAgICBhcnJheTogcHVzaEZhbHNlLFxuICAgICAgICAgIGFycmF5U3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGJvb2xlYW46IHB1c2hGYWxzZSxcbiAgICAgICAgICBidWZmZXI6IHB1c2hGYWxzZSxcbiAgICAgICAgICBudWxsOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbnVtYmVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgb2JqZWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3RyaW5nOiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3ltYm9sOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdW5kZWZpbmVkOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwU3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldDogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldFN0b3JhZ2U6IHB1c2hGYWxzZSxcbiAgICAgICAgICBlcnJvcjogcHVzaEZhbHNlLFxuICAgICAgICAgIGZvcndhcmRWYWx1ZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaXRlcmFibGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdHJhbnNhY3Rpb246IHB1c2hGYWxzZSxcbiAgICAgICAgICBvdXRwdXQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpbnB1dDogcHVzaEZhbHNlLFxuICAgICAgICAgIGFjY291bnQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhc3NldDogcHVzaEZhbHNlLFxuICAgICAgICAgIGNvbnRyYWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaGVhZGVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgYmxvY2s6IHB1c2hGYWxzZSxcbiAgICAgICAgICBbdmFsdWVdOiBjb21wYXJlU3RvcmFnZVZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZVByb2Nlc3NOdWxsT3JVbmRlZmluZWQgPSAodmFsdWU6IGtleW9mIEZvckJ1aWx0aW5UeXBlSGVscGVyT3B0aW9ucykgPT4gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5sZWZ0VHlwZSxcbiAgICAgICAgICBrbm93blR5cGU6IHRoaXMubGVmdEtub3duVHlwZSxcbiAgICAgICAgICBhcnJheTogcHVzaEZhbHNlLFxuICAgICAgICAgIGFycmF5U3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGJvb2xlYW46IHB1c2hGYWxzZSxcbiAgICAgICAgICBidWZmZXI6IHB1c2hGYWxzZSxcbiAgICAgICAgICBudWxsOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbnVtYmVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgb2JqZWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3RyaW5nOiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3ltYm9sOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdW5kZWZpbmVkOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwU3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldDogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldFN0b3JhZ2U6IHB1c2hGYWxzZSxcbiAgICAgICAgICBlcnJvcjogcHVzaEZhbHNlLFxuICAgICAgICAgIGZvcndhcmRWYWx1ZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaXRlcmFibGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdHJhbnNhY3Rpb246IHB1c2hGYWxzZSxcbiAgICAgICAgICBvdXRwdXQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpbnB1dDogcHVzaEZhbHNlLFxuICAgICAgICAgIGFjY291bnQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhc3NldDogcHVzaEZhbHNlLFxuICAgICAgICAgIGNvbnRyYWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaGVhZGVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgYmxvY2s6IHB1c2hGYWxzZSxcbiAgICAgICAgICBbdmFsdWVdOiBwdXNoVHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVQcm9jZXNzSXRlcmFibGUgPSAoKSA9PiAoaW5uZXJPcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnRocm93VHlwZUVycm9yKTtcbiAgICB9O1xuXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgIHR5cGU6IHRoaXMucmlnaHRUeXBlLFxuICAgICAgICBrbm93blR5cGU6IHRoaXMucmlnaHRLbm93blR5cGUsXG4gICAgICAgIGFycmF5OiBjcmVhdGVQcm9jZXNzKCdhcnJheScsIFR5cGVzLkFycmF5KSxcbiAgICAgICAgYXJyYXlTdG9yYWdlOiBjcmVhdGVQcm9jZXNzU3RvcmFnZSgnYXJyYXlTdG9yYWdlJyksXG4gICAgICAgIGJvb2xlYW46IGNyZWF0ZVByb2Nlc3MoJ2Jvb2xlYW4nLCBUeXBlcy5Cb29sZWFuKSxcbiAgICAgICAgYnVmZmVyOiBjcmVhdGVQcm9jZXNzKCdidWZmZXInLCBUeXBlcy5CdWZmZXIpLFxuICAgICAgICBudWxsOiBjcmVhdGVQcm9jZXNzTnVsbE9yVW5kZWZpbmVkKCdudWxsJyksXG4gICAgICAgIG51bWJlcjogY3JlYXRlUHJvY2VzcygnbnVtYmVyJywgVHlwZXMuTnVtYmVyLCBjb21wYXJlTnVtYmVyKSxcbiAgICAgICAgb2JqZWN0OiBjcmVhdGVQcm9jZXNzKCdvYmplY3QnLCBUeXBlcy5PYmplY3QpLFxuICAgICAgICBzdHJpbmc6IGNyZWF0ZVByb2Nlc3MoJ3N0cmluZycsIFR5cGVzLlN0cmluZyksXG4gICAgICAgIHN5bWJvbDogY3JlYXRlUHJvY2Vzcygnc3ltYm9sJywgVHlwZXMuU3ltYm9sKSxcbiAgICAgICAgdW5kZWZpbmVkOiBjcmVhdGVQcm9jZXNzTnVsbE9yVW5kZWZpbmVkKCd1bmRlZmluZWQnKSxcbiAgICAgICAgbWFwOiBjcmVhdGVQcm9jZXNzKCdtYXAnLCBUeXBlcy5NYXApLFxuICAgICAgICBtYXBTdG9yYWdlOiBjcmVhdGVQcm9jZXNzU3RvcmFnZSgnbWFwU3RvcmFnZScpLFxuICAgICAgICBzZXQ6IGNyZWF0ZVByb2Nlc3MoJ3NldCcsIFR5cGVzLlNldCksXG4gICAgICAgIHNldFN0b3JhZ2U6IGNyZWF0ZVByb2Nlc3NTdG9yYWdlKCdzZXRTdG9yYWdlJyksXG4gICAgICAgIGVycm9yOiBjcmVhdGVQcm9jZXNzKCdlcnJvcicsIFR5cGVzLkVycm9yKSxcbiAgICAgICAgZm9yd2FyZFZhbHVlOiBjcmVhdGVQcm9jZXNzKCdlcnJvcicsIFR5cGVzLkZvcndhcmRWYWx1ZSksXG4gICAgICAgIGl0ZXJhdG9yUmVzdWx0OiBjcmVhdGVQcm9jZXNzKCdpdGVyYXRvclJlc3VsdCcsIFR5cGVzLkl0ZXJhdG9yUmVzdWx0KSxcbiAgICAgICAgaXRlcmFibGU6IGNyZWF0ZVByb2Nlc3NJdGVyYWJsZSgpLFxuICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBjcmVhdGVQcm9jZXNzKCdpdGVyYWJsZUl0ZXJhdG9yJywgVHlwZXMuSXRlcmFibGVJdGVyYXRvciksXG4gICAgICAgIHRyYW5zYWN0aW9uOiBjcmVhdGVQcm9jZXNzKCd0cmFuc2FjdGlvbicsIFR5cGVzLlRyYW5zYWN0aW9uKSxcbiAgICAgICAgb3V0cHV0OiBjcmVhdGVQcm9jZXNzKCdvdXRwdXQnLCBUeXBlcy5PdXRwdXQpLFxuICAgICAgICBhdHRyaWJ1dGU6IGNyZWF0ZVByb2Nlc3MoJ2F0dHJpYnV0ZScsIFR5cGVzLkF0dHJpYnV0ZSksXG4gICAgICAgIGlucHV0OiBjcmVhdGVQcm9jZXNzKCdpbnB1dCcsIFR5cGVzLklucHV0KSxcbiAgICAgICAgYWNjb3VudDogY3JlYXRlUHJvY2VzcygnYWNjb3VudCcsIFR5cGVzLkFjY291bnQpLFxuICAgICAgICBhc3NldDogY3JlYXRlUHJvY2VzcygnYXNzZXQnLCBUeXBlcy5Bc3NldCksXG4gICAgICAgIGNvbnRyYWN0OiBjcmVhdGVQcm9jZXNzKCdjb250cmFjdCcsIFR5cGVzLkNvbnRyYWN0KSxcbiAgICAgICAgaGVhZGVyOiBjcmVhdGVQcm9jZXNzKCdoZWFkZXInLCBUeXBlcy5IZWFkZXIpLFxuICAgICAgICBibG9jazogY3JlYXRlUHJvY2VzcygnYmxvY2snLCBUeXBlcy5CbG9jayksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=