@northscaler/config-custom-environment-variables-generator
Version:
Generator of config/custom-environment-variables.json File for config-Based Projects
122 lines (107 loc) • 12.2 kB
JavaScript
#!/usr/bin/env node
'use strict';
const stdio = require('stdio');
const eol = require('os').EOL;
const fs = require('fs');
const os = require('os');
const generator = require('./generator');
const {
parseFormats
} = require('./cli-support');
const DEFAULT_PRETTY = 2;
const DEFAULT_VERBOSE = false;
const errln = function (text) {
process.stderr.write(text + eol);
};
const opts = stdio.getopt({
separator: {
key: 's',
description: 'Separator.',
args: 1,
mandatory: false,
default: generator.DEFAULT_SEPARATOR
},
prefix: {
key: 'p',
description: 'Prefix; use an at-sign (\'@\') for your application\'s name.',
args: 1,
mandatory: false,
default: generator.DEFAULT_PREFIX
},
noprefix: {
key: 'n',
description: 'Do not use a prefix; supercedes --prefix.',
args: 0,
mandatory: false,
default: generator.DEFAULT_NO_PREFIX
},
casing: {
key: 'c',
args: 1,
description: 'Casing: "' + generator.CASING_UPPER + '", "' + generator.CASING_LOWER + '", or "' + generator.CASING_UNCHANGED + '".',
mandatory: false,
default: generator.DEFAULT_CASING
},
pretty: {
key: 'f',
args: 1,
description: 'Format prettily with given number of spaces for indentation.',
mandatory: false,
default: DEFAULT_PRETTY
},
empties: {
key: 'e',
args: 0,
description: 'If present, preserves sections that wouldn\'t have any environment variables. Functions are always skipped.',
mandatory: false,
default: generator.DEFAULT_EMPTIES
},
verbose: {
key: 'v',
args: 0,
description: 'Be verbose.',
mandatory: false,
default: DEFAULT_VERBOSE
},
'format-key': {
key: 'k',
description: '(multiple allowed) give in the form "path.to.key=format", where format is one of the allowed config __format values',
args: '*',
multiple: true,
required: false
},
_meta_: {
minArgs: 0,
maxArgs: 1,
description: 'File to write to; omit for stdout.'
}
});
if (opts.verbose) {
errln('Options: ' + JSON.stringify(opts, null, 2));
}
let formats = opts['format-key'] || [];
if (!Array.isArray(formats)) formats = [formats];
const vars = generator.generate(require('config'), {
noPrefix: opts.noprefix,
prefix: opts.prefix,
separator: opts.separator,
casing: opts.casing,
empties: opts.empties,
formats: parseFormats(formats)
});
let indentation = parseInt(opts.pretty);
if (isNaN(indentation)) {
process.stderr.write(`WARN: could not parse '--pretty ${opts.pretty}'; reverting to ${DEFAULT_PRETTY}${os.EOL}`);
indentation = DEFAULT_PRETTY;
}
const json = JSON.stringify(vars, null, indentation);
let file = '';
if (opts.args) {
file = opts.args[0].trim();
}
if (file) {
fs.writeFileSync(file, json);
} else {
process.stdout.write(json);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jbGkuanMiXSwibmFtZXMiOlsic3RkaW8iLCJyZXF1aXJlIiwiZW9sIiwiRU9MIiwiZnMiLCJvcyIsImdlbmVyYXRvciIsInBhcnNlRm9ybWF0cyIsIkRFRkFVTFRfUFJFVFRZIiwiREVGQVVMVF9WRVJCT1NFIiwiZXJybG4iLCJ0ZXh0IiwicHJvY2VzcyIsInN0ZGVyciIsIndyaXRlIiwib3B0cyIsImdldG9wdCIsInNlcGFyYXRvciIsImtleSIsImRlc2NyaXB0aW9uIiwiYXJncyIsIm1hbmRhdG9yeSIsImRlZmF1bHQiLCJERUZBVUxUX1NFUEFSQVRPUiIsInByZWZpeCIsIkRFRkFVTFRfUFJFRklYIiwibm9wcmVmaXgiLCJERUZBVUxUX05PX1BSRUZJWCIsImNhc2luZyIsIkNBU0lOR19VUFBFUiIsIkNBU0lOR19MT1dFUiIsIkNBU0lOR19VTkNIQU5HRUQiLCJERUZBVUxUX0NBU0lORyIsInByZXR0eSIsImVtcHRpZXMiLCJERUZBVUxUX0VNUFRJRVMiLCJ2ZXJib3NlIiwibXVsdGlwbGUiLCJyZXF1aXJlZCIsIl9tZXRhXyIsIm1pbkFyZ3MiLCJtYXhBcmdzIiwiSlNPTiIsInN0cmluZ2lmeSIsImZvcm1hdHMiLCJBcnJheSIsImlzQXJyYXkiLCJ2YXJzIiwiZ2VuZXJhdGUiLCJub1ByZWZpeCIsImluZGVudGF0aW9uIiwicGFyc2VJbnQiLCJpc05hTiIsImpzb24iLCJmaWxlIiwidHJpbSIsIndyaXRlRmlsZVN5bmMiLCJzdGRvdXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUEsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsT0FBRCxDQUFyQjs7QUFDQSxNQUFNQyxHQUFHLEdBQUdELE9BQU8sQ0FBQyxJQUFELENBQVAsQ0FBY0UsR0FBMUI7O0FBQ0EsTUFBTUMsRUFBRSxHQUFHSCxPQUFPLENBQUMsSUFBRCxDQUFsQjs7QUFDQSxNQUFNSSxFQUFFLEdBQUdKLE9BQU8sQ0FBQyxJQUFELENBQWxCOztBQUNBLE1BQU1LLFNBQVMsR0FBR0wsT0FBTyxDQUFDLGFBQUQsQ0FBekI7O0FBQ0EsTUFBTTtBQUFFTSxFQUFBQTtBQUFGLElBQW1CTixPQUFPLENBQUMsZUFBRCxDQUFoQzs7QUFFQSxNQUFNTyxjQUFjLEdBQUcsQ0FBdkI7QUFDQSxNQUFNQyxlQUFlLEdBQUcsS0FBeEI7O0FBRUEsTUFBTUMsS0FBSyxHQUFHLFVBQVVDLElBQVYsRUFBZ0I7QUFDNUJDLEVBQUFBLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxLQUFmLENBQXFCSCxJQUFJLEdBQUdULEdBQTVCO0FBQ0QsQ0FGRDs7QUFJQSxNQUFNYSxJQUFJLEdBQUdmLEtBQUssQ0FBQ2dCLE1BQU4sQ0FBYTtBQUN4QkMsRUFBQUEsU0FBUyxFQUFFO0FBQ1RDLElBQUFBLEdBQUcsRUFBRSxHQURJO0FBRVRDLElBQUFBLFdBQVcsRUFBRSxZQUZKO0FBR1RDLElBQUFBLElBQUksRUFBRSxDQUhHO0FBSVRDLElBQUFBLFNBQVMsRUFBRSxLQUpGO0FBS1RDLElBQUFBLE9BQU8sRUFBRWhCLFNBQVMsQ0FBQ2lCO0FBTFYsR0FEYTtBQVF4QkMsRUFBQUEsTUFBTSxFQUFFO0FBQ05OLElBQUFBLEdBQUcsRUFBRSxHQURDO0FBRU5DLElBQUFBLFdBQVcsRUFBRSw4REFGUDtBQUdOQyxJQUFBQSxJQUFJLEVBQUUsQ0FIQTtBQUlOQyxJQUFBQSxTQUFTLEVBQUUsS0FKTDtBQUtOQyxJQUFBQSxPQUFPLEVBQUVoQixTQUFTLENBQUNtQjtBQUxiLEdBUmdCO0FBZXhCQyxFQUFBQSxRQUFRLEVBQUU7QUFDUlIsSUFBQUEsR0FBRyxFQUFFLEdBREc7QUFFUkMsSUFBQUEsV0FBVyxFQUFFLDJDQUZMO0FBR1JDLElBQUFBLElBQUksRUFBRSxDQUhFO0FBSVJDLElBQUFBLFNBQVMsRUFBRSxLQUpIO0FBS1JDLElBQUFBLE9BQU8sRUFBRWhCLFNBQVMsQ0FBQ3FCO0FBTFgsR0FmYztBQXNCeEJDLEVBQUFBLE1BQU0sRUFBRTtBQUNOVixJQUFBQSxHQUFHLEVBQUUsR0FEQztBQUVORSxJQUFBQSxJQUFJLEVBQUUsQ0FGQTtBQUdORCxJQUFBQSxXQUFXLEVBQUUsY0FBY2IsU0FBUyxDQUFDdUIsWUFBeEIsR0FBdUMsTUFBdkMsR0FBZ0R2QixTQUFTLENBQUN3QixZQUExRCxHQUF5RSxTQUF6RSxHQUFxRnhCLFNBQVMsQ0FBQ3lCLGdCQUEvRixHQUFrSCxJQUh6SDtBQUlOVixJQUFBQSxTQUFTLEVBQUUsS0FKTDtBQUtOQyxJQUFBQSxPQUFPLEVBQUVoQixTQUFTLENBQUMwQjtBQUxiLEdBdEJnQjtBQTZCeEJDLEVBQUFBLE1BQU0sRUFBRTtBQUNOZixJQUFBQSxHQUFHLEVBQUUsR0FEQztBQUVORSxJQUFBQSxJQUFJLEVBQUUsQ0FGQTtBQUdORCxJQUFBQSxXQUFXLEVBQUUsOERBSFA7QUFJTkUsSUFBQUEsU0FBUyxFQUFFLEtBSkw7QUFLTkMsSUFBQUEsT0FBTyxFQUFFZDtBQUxILEdBN0JnQjtBQW9DeEIwQixFQUFBQSxPQUFPLEVBQUU7QUFDUGhCLElBQUFBLEdBQUcsRUFBRSxHQURFO0FBRVBFLElBQUFBLElBQUksRUFBRSxDQUZDO0FBR1BELElBQUFBLFdBQVcsRUFBRSw4R0FITjtBQUlQRSxJQUFBQSxTQUFTLEVBQUUsS0FKSjtBQUtQQyxJQUFBQSxPQUFPLEVBQUVoQixTQUFTLENBQUM2QjtBQUxaLEdBcENlO0FBMkN4QkMsRUFBQUEsT0FBTyxFQUFFO0FBQ1BsQixJQUFBQSxHQUFHLEVBQUUsR0FERTtBQUVQRSxJQUFBQSxJQUFJLEVBQUUsQ0FGQztBQUdQRCxJQUFBQSxXQUFXLEVBQUUsYUFITjtBQUlQRSxJQUFBQSxTQUFTLEVBQUUsS0FKSjtBQUtQQyxJQUFBQSxPQUFPLEVBQUViO0FBTEYsR0EzQ2U7QUFrRHhCLGdCQUFjO0FBQ1pTLElBQUFBLEdBQUcsRUFBRSxHQURPO0FBRVpDLElBQUFBLFdBQVcsRUFBRSxxSEFGRDtBQUdaQyxJQUFBQSxJQUFJLEVBQUUsR0FITTtBQUlaaUIsSUFBQUEsUUFBUSxFQUFFLElBSkU7QUFLWkMsSUFBQUEsUUFBUSxFQUFFO0FBTEUsR0FsRFU7QUF5RHhCQyxFQUFBQSxNQUFNLEVBQUU7QUFDTkMsSUFBQUEsT0FBTyxFQUFFLENBREg7QUFFTkMsSUFBQUEsT0FBTyxFQUFFLENBRkg7QUFHTnRCLElBQUFBLFdBQVcsRUFBRTtBQUhQO0FBekRnQixDQUFiLENBQWI7O0FBZ0VBLElBQUlKLElBQUksQ0FBQ3FCLE9BQVQsRUFBa0I7QUFDaEIxQixFQUFBQSxLQUFLLENBQUMsY0FBY2dDLElBQUksQ0FBQ0MsU0FBTCxDQUFlNUIsSUFBZixFQUFxQixJQUFyQixFQUEyQixDQUEzQixDQUFmLENBQUw7QUFDRDs7QUFFRCxJQUFJNkIsT0FBTyxHQUFHN0IsSUFBSSxDQUFDLFlBQUQsQ0FBSixJQUFzQixFQUFwQztBQUNBLElBQUksQ0FBQzhCLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixPQUFkLENBQUwsRUFBNkJBLE9BQU8sR0FBRyxDQUFDQSxPQUFELENBQVY7QUFFN0IsTUFBTUcsSUFBSSxHQUFHekMsU0FBUyxDQUFDMEMsUUFBVixDQUFtQi9DLE9BQU8sQ0FBQyxRQUFELENBQTFCLEVBQXNDO0FBQ2pEZ0QsRUFBQUEsUUFBUSxFQUFFbEMsSUFBSSxDQUFDVyxRQURrQztBQUVqREYsRUFBQUEsTUFBTSxFQUFFVCxJQUFJLENBQUNTLE1BRm9DO0FBR2pEUCxFQUFBQSxTQUFTLEVBQUVGLElBQUksQ0FBQ0UsU0FIaUM7QUFJakRXLEVBQUFBLE1BQU0sRUFBRWIsSUFBSSxDQUFDYSxNQUpvQztBQUtqRE0sRUFBQUEsT0FBTyxFQUFFbkIsSUFBSSxDQUFDbUIsT0FMbUM7QUFNakRVLEVBQUFBLE9BQU8sRUFBRXJDLFlBQVksQ0FBQ3FDLE9BQUQ7QUFONEIsQ0FBdEMsQ0FBYjtBQVNBLElBQUlNLFdBQVcsR0FBR0MsUUFBUSxDQUFDcEMsSUFBSSxDQUFDa0IsTUFBTixDQUExQjs7QUFDQSxJQUFJbUIsS0FBSyxDQUFDRixXQUFELENBQVQsRUFBd0I7QUFDdEJ0QyxFQUFBQSxPQUFPLENBQUNDLE1BQVIsQ0FBZUMsS0FBZixDQUFzQixtQ0FBa0NDLElBQUksQ0FBQ2tCLE1BQU8sbUJBQWtCekIsY0FBZSxHQUFFSCxFQUFFLENBQUNGLEdBQUksRUFBOUc7QUFDQStDLEVBQUFBLFdBQVcsR0FBRzFDLGNBQWQ7QUFDRDs7QUFFRCxNQUFNNkMsSUFBSSxHQUFHWCxJQUFJLENBQUNDLFNBQUwsQ0FBZUksSUFBZixFQUFxQixJQUFyQixFQUEyQkcsV0FBM0IsQ0FBYjtBQUVBLElBQUlJLElBQUksR0FBRyxFQUFYOztBQUNBLElBQUl2QyxJQUFJLENBQUNLLElBQVQsRUFBZTtBQUNia0MsRUFBQUEsSUFBSSxHQUFHdkMsSUFBSSxDQUFDSyxJQUFMLENBQVUsQ0FBVixFQUFhbUMsSUFBYixFQUFQO0FBQ0Q7O0FBRUQsSUFBSUQsSUFBSixFQUFVO0FBQ1JsRCxFQUFBQSxFQUFFLENBQUNvRCxhQUFILENBQWlCRixJQUFqQixFQUF1QkQsSUFBdkI7QUFDRCxDQUZELE1BRU87QUFDTHpDLEVBQUFBLE9BQU8sQ0FBQzZDLE1BQVIsQ0FBZTNDLEtBQWYsQ0FBcUJ1QyxJQUFyQjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHN0ZGlvID0gcmVxdWlyZSgnc3RkaW8nKVxuY29uc3QgZW9sID0gcmVxdWlyZSgnb3MnKS5FT0xcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKVxuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpXG5jb25zdCBnZW5lcmF0b3IgPSByZXF1aXJlKCcuL2dlbmVyYXRvcicpXG5jb25zdCB7IHBhcnNlRm9ybWF0cyB9ID0gcmVxdWlyZSgnLi9jbGktc3VwcG9ydCcpXG5cbmNvbnN0IERFRkFVTFRfUFJFVFRZID0gMlxuY29uc3QgREVGQVVMVF9WRVJCT1NFID0gZmFsc2VcblxuY29uc3QgZXJybG4gPSBmdW5jdGlvbiAodGV4dCkge1xuICBwcm9jZXNzLnN0ZGVyci53cml0ZSh0ZXh0ICsgZW9sKVxufVxuXG5jb25zdCBvcHRzID0gc3RkaW8uZ2V0b3B0KHtcbiAgc2VwYXJhdG9yOiB7XG4gICAga2V5OiAncycsXG4gICAgZGVzY3JpcHRpb246ICdTZXBhcmF0b3IuJyxcbiAgICBhcmdzOiAxLFxuICAgIG1hbmRhdG9yeTogZmFsc2UsXG4gICAgZGVmYXVsdDogZ2VuZXJhdG9yLkRFRkFVTFRfU0VQQVJBVE9SXG4gIH0sXG4gIHByZWZpeDoge1xuICAgIGtleTogJ3AnLFxuICAgIGRlc2NyaXB0aW9uOiAnUHJlZml4OyB1c2UgYW4gYXQtc2lnbiAoXFwnQFxcJykgZm9yIHlvdXIgYXBwbGljYXRpb25cXCdzIG5hbWUuJyxcbiAgICBhcmdzOiAxLFxuICAgIG1hbmRhdG9yeTogZmFsc2UsXG4gICAgZGVmYXVsdDogZ2VuZXJhdG9yLkRFRkFVTFRfUFJFRklYXG4gIH0sXG4gIG5vcHJlZml4OiB7XG4gICAga2V5OiAnbicsXG4gICAgZGVzY3JpcHRpb246ICdEbyBub3QgdXNlIGEgcHJlZml4OyBzdXBlcmNlZGVzIC0tcHJlZml4LicsXG4gICAgYXJnczogMCxcbiAgICBtYW5kYXRvcnk6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IGdlbmVyYXRvci5ERUZBVUxUX05PX1BSRUZJWFxuICB9LFxuICBjYXNpbmc6IHtcbiAgICBrZXk6ICdjJyxcbiAgICBhcmdzOiAxLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2FzaW5nOiBcIicgKyBnZW5lcmF0b3IuQ0FTSU5HX1VQUEVSICsgJ1wiLCBcIicgKyBnZW5lcmF0b3IuQ0FTSU5HX0xPV0VSICsgJ1wiLCBvciBcIicgKyBnZW5lcmF0b3IuQ0FTSU5HX1VOQ0hBTkdFRCArICdcIi4nLFxuICAgIG1hbmRhdG9yeTogZmFsc2UsXG4gICAgZGVmYXVsdDogZ2VuZXJhdG9yLkRFRkFVTFRfQ0FTSU5HXG4gIH0sXG4gIHByZXR0eToge1xuICAgIGtleTogJ2YnLFxuICAgIGFyZ3M6IDEsXG4gICAgZGVzY3JpcHRpb246ICdGb3JtYXQgcHJldHRpbHkgd2l0aCBnaXZlbiBudW1iZXIgb2Ygc3BhY2VzIGZvciBpbmRlbnRhdGlvbi4nLFxuICAgIG1hbmRhdG9yeTogZmFsc2UsXG4gICAgZGVmYXVsdDogREVGQVVMVF9QUkVUVFlcbiAgfSxcbiAgZW1wdGllczoge1xuICAgIGtleTogJ2UnLFxuICAgIGFyZ3M6IDAsXG4gICAgZGVzY3JpcHRpb246ICdJZiBwcmVzZW50LCBwcmVzZXJ2ZXMgc2VjdGlvbnMgdGhhdCB3b3VsZG5cXCd0IGhhdmUgYW55IGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEZ1bmN0aW9ucyBhcmUgYWx3YXlzIHNraXBwZWQuJyxcbiAgICBtYW5kYXRvcnk6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IGdlbmVyYXRvci5ERUZBVUxUX0VNUFRJRVNcbiAgfSxcbiAgdmVyYm9zZToge1xuICAgIGtleTogJ3YnLFxuICAgIGFyZ3M6IDAsXG4gICAgZGVzY3JpcHRpb246ICdCZSB2ZXJib3NlLicsXG4gICAgbWFuZGF0b3J5OiBmYWxzZSxcbiAgICBkZWZhdWx0OiBERUZBVUxUX1ZFUkJPU0VcbiAgfSxcbiAgJ2Zvcm1hdC1rZXknOiB7XG4gICAga2V5OiAnaycsXG4gICAgZGVzY3JpcHRpb246ICcobXVsdGlwbGUgYWxsb3dlZCkgZ2l2ZSBpbiB0aGUgZm9ybSBcInBhdGgudG8ua2V5PWZvcm1hdFwiLCB3aGVyZSBmb3JtYXQgaXMgb25lIG9mIHRoZSBhbGxvd2VkIGNvbmZpZyBfX2Zvcm1hdCB2YWx1ZXMnLFxuICAgIGFyZ3M6ICcqJyxcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICByZXF1aXJlZDogZmFsc2VcbiAgfSxcbiAgX21ldGFfOiB7XG4gICAgbWluQXJnczogMCxcbiAgICBtYXhBcmdzOiAxLFxuICAgIGRlc2NyaXB0aW9uOiAnRmlsZSB0byB3cml0ZSB0bzsgb21pdCBmb3Igc3Rkb3V0LidcbiAgfVxufSlcblxuaWYgKG9wdHMudmVyYm9zZSkge1xuICBlcnJsbignT3B0aW9uczogJyArIEpTT04uc3RyaW5naWZ5KG9wdHMsIG51bGwsIDIpKVxufVxuXG5sZXQgZm9ybWF0cyA9IG9wdHNbJ2Zvcm1hdC1rZXknXSB8fCBbXVxuaWYgKCFBcnJheS5pc0FycmF5KGZvcm1hdHMpKSBmb3JtYXRzID0gW2Zvcm1hdHNdXG5cbmNvbnN0IHZhcnMgPSBnZW5lcmF0b3IuZ2VuZXJhdGUocmVxdWlyZSgnY29uZmlnJyksIHtcbiAgbm9QcmVmaXg6IG9wdHMubm9wcmVmaXgsXG4gIHByZWZpeDogb3B0cy5wcmVmaXgsXG4gIHNlcGFyYXRvcjogb3B0cy5zZXBhcmF0b3IsXG4gIGNhc2luZzogb3B0cy5jYXNpbmcsXG4gIGVtcHRpZXM6IG9wdHMuZW1wdGllcyxcbiAgZm9ybWF0czogcGFyc2VGb3JtYXRzKGZvcm1hdHMpXG59KVxuXG5sZXQgaW5kZW50YXRpb24gPSBwYXJzZUludChvcHRzLnByZXR0eSlcbmlmIChpc05hTihpbmRlbnRhdGlvbikpIHtcbiAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFdBUk46IGNvdWxkIG5vdCBwYXJzZSAnLS1wcmV0dHkgJHtvcHRzLnByZXR0eX0nOyByZXZlcnRpbmcgdG8gJHtERUZBVUxUX1BSRVRUWX0ke29zLkVPTH1gKVxuICBpbmRlbnRhdGlvbiA9IERFRkFVTFRfUFJFVFRZXG59XG5cbmNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeSh2YXJzLCBudWxsLCBpbmRlbnRhdGlvbilcblxubGV0IGZpbGUgPSAnJ1xuaWYgKG9wdHMuYXJncykge1xuICBmaWxlID0gb3B0cy5hcmdzWzBdLnRyaW0oKVxufVxuXG5pZiAoZmlsZSkge1xuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIGpzb24pXG59IGVsc2Uge1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShqc29uKVxufVxuIl19