faastjs
Version:
Serverless batch computing made simple.
305 lines • 26.1 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getEnv = exports.returnSize = exports.allocate = exports.returnsError = exports.customError = exports.processExit = exports.consoleInfo = exports.consoleError = exports.consoleWarn = exports.consoleLog = exports.optionalArg = exports.infiniteLoop = exports.spin = exports.timer = exports.rejected = exports.emptyReject = exports.path = exports.async = exports.delayReject = exports.sleep = exports.noargs = exports.error = exports.concat = exports.fact = exports.hello = exports.asyncArrow = exports.arrow = exports.identitySet = exports.identityMap = exports.identityBigUint64 = exports.identityBigInt64 = exports.identityFloat64 = exports.identityFloat32 = exports.identityUint32 = exports.identityInt32 = exports.identityUint16 = exports.identityInt16 = exports.identityUint8Clamped = exports.identityUint8 = exports.identityInt8 = exports.identityArrayString = exports.identityArrayNum = exports.identityObject = exports.identityNull = exports.identityUndefined = exports.identityBool = exports.identityNum = exports.identityString = exports.empty = exports.test = void 0;
exports.classReturn = exports.identityClass = exports.Cls = exports.identityDate = exports.identityBuffer = exports.functionReturn = exports.identityFunction = exports.promiseArg = exports.asyncGeneratorError = exports.asyncGeneratorDelay = exports.generateThenInfiniteLoop = exports.asyncGenerator = exports.generator = exports.monteCarloPI = void 0;
function test() {
return "Successfully called test function.";
}
exports.test = test;
function empty() { }
exports.empty = empty;
function identityString(name) {
return name;
}
exports.identityString = identityString;
function identityNum(n) {
return n;
}
exports.identityNum = identityNum;
function identityBool(b) {
return b;
}
exports.identityBool = identityBool;
function identityUndefined(u) {
return u;
}
exports.identityUndefined = identityUndefined;
function identityNull(n) {
return n;
}
exports.identityNull = identityNull;
function identityObject(o) {
return o;
}
exports.identityObject = identityObject;
function identityArrayNum(n) {
return n;
}
exports.identityArrayNum = identityArrayNum;
function identityArrayString(s) {
return s;
}
exports.identityArrayString = identityArrayString;
function identityInt8(a) {
return a;
}
exports.identityInt8 = identityInt8;
function identityUint8(a) {
return a;
}
exports.identityUint8 = identityUint8;
function identityUint8Clamped(a) {
return a;
}
exports.identityUint8Clamped = identityUint8Clamped;
function identityInt16(a) {
return a;
}
exports.identityInt16 = identityInt16;
function identityUint16(a) {
return a;
}
exports.identityUint16 = identityUint16;
function identityInt32(a) {
return a;
}
exports.identityInt32 = identityInt32;
function identityUint32(a) {
return a;
}
exports.identityUint32 = identityUint32;
function identityFloat32(a) {
return a;
}
exports.identityFloat32 = identityFloat32;
function identityFloat64(a) {
return a;
}
exports.identityFloat64 = identityFloat64;
function identityBigInt64(a) {
return a;
}
exports.identityBigInt64 = identityBigInt64;
function identityBigUint64(a) {
return a;
}
exports.identityBigUint64 = identityBigUint64;
function identityMap(m) {
return m;
}
exports.identityMap = identityMap;
function identitySet(s) {
return s;
}
exports.identitySet = identitySet;
const arrow = (str) => str;
exports.arrow = arrow;
const asyncArrow = async (str) => str;
exports.asyncArrow = asyncArrow;
function hello(name) {
return `Hello ${name}!`;
}
exports.hello = hello;
function fact(n) {
return n <= 1 ? 1 : n * fact(n - 1);
}
exports.fact = fact;
function concat(a, b) {
return a + b;
}
exports.concat = concat;
function error(a) {
throw new Error(`Expected error. Arg: ${a}`);
}
exports.error = error;
function noargs() {
return "called function with no args.";
}
exports.noargs = noargs;
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
exports.sleep = sleep;
function delayReject(ms) {
return new Promise((_, reject) => setTimeout(reject, ms));
}
exports.delayReject = delayReject;
async function async() {
await sleep(200);
return "async function: success";
}
exports.async = async;
function path() {
return sleep(200).then(() => process.env.PATH || "no PATH variable");
}
exports.path = path;
function emptyReject() {
return Promise.reject();
}
exports.emptyReject = emptyReject;
function rejected() {
return Promise.reject("intentionally rejected");
}
exports.rejected = rejected;
async function timer(delayMs) {
const start = Date.now();
await sleep(delayMs);
const end = Date.now();
return { start, end };
}
exports.timer = timer;
function spin(ms) {
const start = Date.now();
while (true) {
if (Date.now() - start >= ms) {
break;
}
}
const end = Date.now();
return { start, end };
}
exports.spin = spin;
function infiniteLoop() {
while (true) { }
}
exports.infiniteLoop = infiniteLoop;
function optionalArg(arg) {
return arg ? arg : "No arg";
}
exports.optionalArg = optionalArg;
function consoleLog(str) {
console.log(str);
}
exports.consoleLog = consoleLog;
function consoleWarn(str) {
console.warn(str);
}
exports.consoleWarn = consoleWarn;
function consoleError(str) {
console.error(str);
}
exports.consoleError = consoleError;
function consoleInfo(str) {
console.info(str);
}
exports.consoleInfo = consoleInfo;
function processExit(code) {
process.exit(code);
}
exports.processExit = processExit;
class CustomError extends Error {
constructor(message, custom) {
super(message);
this.custom = custom;
}
}
function customError() {
throw new CustomError("custom error message", "custom value");
}
exports.customError = customError;
function returnsError() {
return new Error("a returned non-thrown error");
}
exports.returnsError = returnsError;
async function allocate(bytes) {
const array = new Array(bytes / 8);
const elems = array.length;
for (let i = 0; i < elems; i++) {
array[i] = i;
}
console.log(`allocated: %O`, { bytes, elems });
console.log(`post allocate memory usage: %O`, process.memoryUsage());
await sleep(1000);
console.log(`Returning from allocate`);
return { bytes, elems };
}
exports.allocate = allocate;
function returnSize(size) {
// return a string of size characters
const str = "a".repeat(size);
return str;
}
exports.returnSize = returnSize;
function getEnv(key) {
return process.env[key];
}
exports.getEnv = getEnv;
function monteCarloPI(samples) {
let inside = 0;
for (let n = 0; n < samples; n++) {
const [x, y] = [Math.random(), Math.random()];
if (x ** 2 + y ** 2 <= 1) {
inside++;
}
}
return {
inside,
samples
};
}
exports.monteCarloPI = monteCarloPI;
function* generator(args) {
yield* args;
}
exports.generator = generator;
async function* asyncGenerator(args) {
yield* args;
}
exports.asyncGenerator = asyncGenerator;
async function* generateThenInfiniteLoop(arg) {
yield arg;
while (true) { }
}
exports.generateThenInfiniteLoop = generateThenInfiniteLoop;
async function* asyncGeneratorDelay(args, delay) {
for (const arg of args) {
await sleep(delay);
yield arg;
}
}
exports.asyncGeneratorDelay = asyncGeneratorDelay;
async function* asyncGeneratorError(msg) {
yield 1;
throw new Error(msg);
}
exports.asyncGeneratorError = asyncGeneratorError;
/**
* Not supported.
* @remarks
* Examples of functions arguments or return values that are not supported.
*/
function promiseArg(promise) {
return promise;
}
exports.promiseArg = promiseArg;
function identityFunction(fn) {
return fn;
}
exports.identityFunction = identityFunction;
function functionReturn() {
return () => {
console.log("returned a function");
};
}
exports.functionReturn = functionReturn;
function identityBuffer(buf) {
return buf;
}
exports.identityBuffer = identityBuffer;
function identityDate(arg) {
return arg;
}
exports.identityDate = identityDate;
class Cls {
constructor() { }
}
exports.Cls = Cls;
function identityClass(arg) {
return arg;
}
exports.identityClass = identityClass;
function classReturn() {
return new Cls();
}
exports.classReturn = classReturn;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9maXh0dXJlcy9mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBQWdCLElBQUk7SUFDaEIsT0FBTyxvQ0FBb0MsQ0FBQztBQUNoRCxDQUFDO0FBRkQsb0JBRUM7QUFFRCxTQUFnQixLQUFLLEtBQUksQ0FBQztBQUExQixzQkFBMEI7QUFFMUIsU0FBZ0IsY0FBYyxDQUFDLElBQVk7SUFDdkMsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUZELHdDQUVDO0FBQ0QsU0FBZ0IsV0FBVyxDQUFDLENBQVM7SUFDakMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBRkQsa0NBRUM7QUFDRCxTQUFnQixZQUFZLENBQUMsQ0FBVTtJQUNuQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFGRCxvQ0FFQztBQUNELFNBQWdCLGlCQUFpQixDQUFDLENBQVk7SUFDMUMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBRkQsOENBRUM7QUFDRCxTQUFnQixZQUFZLENBQUMsQ0FBTztJQUNoQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFGRCxvQ0FFQztBQUNELFNBQWdCLGNBQWMsQ0FBQyxDQUFTO0lBQ3BDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUZELHdDQUVDO0FBQ0QsU0FBZ0IsZ0JBQWdCLENBQUMsQ0FBVztJQUN4QyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFGRCw0Q0FFQztBQUNELFNBQWdCLG1CQUFtQixDQUFDLENBQVc7SUFDM0MsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBRkQsa0RBRUM7QUFDRCxTQUFnQixZQUFZLENBQUMsQ0FBWTtJQUNyQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFGRCxvQ0FFQztBQUNELFNBQWdCLGFBQWEsQ0FBQyxDQUFhO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDO0FBQ2Is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QztBQUZELGdDQUVDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQUMsRUFBYztJQUMzQyxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFGRCw0Q0FFQztBQUVELFNBQWdCLGNBQWM7SUFDMUIsT0FBTyxHQUFHLEVBQUU7UUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUpELHdDQUlDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLEdBQVc7SUFDdEMsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBRkQsd0NBRUM7QUFFRCxTQUFnQixZQUFZLENBQUMsR0FBUztJQUNsQyxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFGRCxvQ0FFQztBQUVELE1BQWEsR0FBRztJQUNaLGdCQUFlLENBQUM7Q0FDbkI7QUFGRCxrQkFFQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxHQUFRO0lBQ2xDLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUZELHNDQUVDO0FBRUQsU0FBZ0IsV0FBVztJQUN2QixPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7QUFDckIsQ0FBQztBQUZELGtDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHRlc3QoKSB7XG4gICAgcmV0dXJuIFwiU3VjY2Vzc2Z1bGx5IGNhbGxlZCB0ZXN0IGZ1bmN0aW9uLlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHkoKSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlTdHJpbmcobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5hbWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlOdW0objogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG47XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlCb29sKGI6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gYjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVVuZGVmaW5lZCh1OiB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eU51bGwobjogbnVsbCkge1xuICAgIHJldHVybiBuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5T2JqZWN0KG86IG9iamVjdCkge1xuICAgIHJldHVybiBvO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5QXJyYXlOdW0objogbnVtYmVyW10pIHtcbiAgICByZXR1cm4gbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUFycmF5U3RyaW5nKHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHM7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlJbnQ4KGE6IEludDhBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5VWludDgoYTogVWludDhBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5VWludDhDbGFtcGVkKGE6IFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlJbnQxNihhOiBJbnQxNkFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlVaW50MTYoYTogVWludDE2QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUludDMyKGE6IEludDMyQXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVVpbnQzMihhOiBVaW50MzJBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RmxvYXQzMihhOiBGbG9hdDMyQXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUZsb2F0NjQoYTogRmxvYXQ2NEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlCaWdJbnQ2NChhOiBCaWdJbnQ2NEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlCaWdVaW50NjQoYTogQmlnVWludDY0QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eU1hcChtOiBNYXA8bnVtYmVyLCBudW1iZXI+KSB7XG4gICAgcmV0dXJuIG07XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlTZXQoczogU2V0PG51bWJlcj4pIHtcbiAgICByZXR1cm4gcztcbn1cblxuZXhwb3J0IGNvbnN0IGFycm93ID0gKHN0cjogc3RyaW5nKSA9PiBzdHI7XG5cbmV4cG9ydCBjb25zdCBhc3luY0Fycm93ID0gYXN5bmMgKHN0cjogc3RyaW5nKSA9PiBzdHI7XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWxsbyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYEhlbGxvICR7bmFtZX0hYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhY3QobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbiA8PSAxID8gMSA6IG4gKiBmYWN0KG4gLSAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdChhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuICAgIHJldHVybiBhICsgYjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yKGE6IHN0cmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXJyb3IuIEFyZzogJHthfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9hcmdzKCkge1xuICAgIHJldHVybiBcImNhbGxlZCBmdW5jdGlvbiB3aXRoIG5vIGFyZ3MuXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsYXlSZWplY3QobXM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiBzZXRUaW1lb3V0KHJlamVjdCwgbXMpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jKCkge1xuICAgIGF3YWl0IHNsZWVwKDIwMCk7XG4gICAgcmV0dXJuIFwiYXN5bmMgZnVuY3Rpb246IHN1Y2Nlc3NcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gc2xlZXAoMjAwKS50aGVuKCgpID0+IHByb2Nlc3MuZW52LlBBVEggfHwgXCJubyBQQVRIIHZhcmlhYmxlXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlSZWplY3QoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWplY3RlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJpbnRlbnRpb25hbGx5IHJlamVjdGVkXCIpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWluZyB7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICBlbmQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVyKGRlbGF5TXM6IG51bWJlcik6IFByb21pc2U8VGltaW5nPiB7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGF3YWl0IHNsZWVwKGRlbGF5TXMpO1xuICAgIGNvbnN0IGVuZCA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BpbihtczogbnVtYmVyKTogVGltaW5nIHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydCA+PSBtcykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZW5kID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZUxvb3AoKSB7XG4gICAgd2hpbGUgKHRydWUpIHt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbEFyZyhhcmc/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXJnID8gYXJnIDogXCJObyBhcmdcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVMb2coc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZyhzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc29sZVdhcm4oc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLndhcm4oc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVFcnJvcihzdHI6IHN0cmluZykge1xuICAgIGNvbnNvbGUuZXJyb3Ioc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVJbmZvKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc29sZS5pbmZvKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRXhpdChjb2RlPzogbnVtYmVyKSB7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5jbGFzcyBDdXN0b21FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBjdXN0b206IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21FcnJvcigpIHtcbiAgICB0aHJvdyBuZXcgQ3VzdG9tRXJyb3IoXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiLCBcImN1c3RvbSB2YWx1ZVwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybnNFcnJvcigpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKFwiYSByZXR1cm5lZCBub24tdGhyb3duIGVycm9yXCIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWxsb2NhdGUoYnl0ZXM6IG51bWJlcikge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IEFycmF5KGJ5dGVzIC8gOCk7XG4gICAgY29uc3QgZWxlbXMgPSBhcnJheS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtczsgaSsrKSB7XG4gICAgICAgIGFycmF5W2ldID0gaTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYGFsbG9jYXRlZDogJU9gLCB7IGJ5dGVzLCBlbGVtcyB9KTtcbiAgICBjb25zb2xlLmxvZyhgcG9zdCBhbGxvY2F0ZSBtZW1vcnkgdXNhZ2U6ICVPYCwgcHJvY2Vzcy5tZW1vcnlVc2FnZSgpKTtcbiAgICBhd2FpdCBzbGVlcCgxMDAwKTtcbiAgICBjb25zb2xlLmxvZyhgUmV0dXJuaW5nIGZyb20gYWxsb2NhdGVgKTtcbiAgICByZXR1cm4geyBieXRlcywgZWxlbXMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblNpemUoc2l6ZTogbnVtYmVyKSB7XG4gICAgLy8gcmV0dXJuIGEgc3RyaW5nIG9mIHNpemUgY2hhcmFjdGVyc1xuICAgIGNvbnN0IHN0ciA9IFwiYVwiLnJlcGVhdChzaXplKTtcbiAgICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W2tleV07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9udGVDYXJsb1JldHVybiB7XG4gICAgaW5zaWRlOiBudW1iZXI7XG4gICAgc2FtcGxlczogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9udGVDYXJsb1BJKHNhbXBsZXM6IG51bWJlcik6IE1vbnRlQ2FybG9SZXR1cm4ge1xuICAgIGxldCBpbnNpZGUgPSAwO1xuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgc2FtcGxlczsgbisrKSB7XG4gICAgICAgIGNvbnN0IFt4LCB5XSA9IFtNYXRoLnJhbmRvbSgpLCBNYXRoLnJhbmRvbSgpXTtcbiAgICAgICAgaWYgKHggKiogMiArIHkgKiogMiA8PSAxKSB7XG4gICAgICAgICAgICBpbnNpZGUrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpbnNpZGUsXG4gICAgICAgIHNhbXBsZXNcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24qIGdlbmVyYXRvcihhcmdzOiBzdHJpbmdbXSkge1xuICAgIHlpZWxkKiBhcmdzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGFzeW5jR2VuZXJhdG9yKGFyZ3M6IHN0cmluZ1tdKSB7XG4gICAgeWllbGQqIGFyZ3M7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZ2VuZXJhdGVUaGVuSW5maW5pdGVMb29wKGFyZzogc3RyaW5nKSB7XG4gICAgeWllbGQgYXJnO1xuICAgIHdoaWxlICh0cnVlKSB7fVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGFzeW5jR2VuZXJhdG9yRGVsYXkoYXJnczogc3RyaW5nW10sIGRlbGF5OiBudW1iZXIpIHtcbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgIGF3YWl0IHNsZWVwKGRlbGF5KTtcbiAgICAgICAgeWllbGQgYXJnO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBhc3luY0dlbmVyYXRvckVycm9yKG1zZzogc3RyaW5nKSB7XG4gICAgeWllbGQgMTtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cblxuLyoqXG4gKiBOb3Qgc3VwcG9ydGVkLlxuICogQHJlbWFya3NcbiAqIEV4YW1wbGVzIG9mIGZ1bmN0aW9ucyBhcmd1bWVudHMgb3IgcmV0dXJuIHZhbHVlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUFyZyhwcm9taXNlOiBQcm9taXNlPGFueT4pIHtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RnVuY3Rpb24oZm46ICgpID0+IHZvaWQpIHtcbiAgICByZXR1cm4gZm47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvblJldHVybigpIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInJldHVybmVkIGEgZnVuY3Rpb25cIik7XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5QnVmZmVyKGJ1ZjogQnVmZmVyKSB7XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RGF0ZShhcmc6IERhdGUpIHtcbiAgICByZXR1cm4gYXJnO1xufVxuXG5leHBvcnQgY2xhc3MgQ2xzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUNsYXNzKGFyZzogQ2xzKSB7XG4gICAgcmV0dXJuIGFyZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzUmV0dXJuKCkge1xuICAgIHJldHVybiBuZXcgQ2xzKCk7XG59XG4iXX0=
;