UNPKG

docx4js-fork

Version:
295 lines (260 loc) 28.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _part = require("../part"); var _part2 = _interopRequireDefault(_part); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } exports.default = function (od) { return _extends({ __filter: ":not(a\\:extLst)", id: function id() { return undefined; } }, same("latin,ea,cs".split(","), function (_ref) { var _ref$attribs$typeface = _ref.attribs.typeface, typeface = _ref$attribs$typeface === undefined ? "" : _ref$attribs$typeface; return od.theme.font(typeface); }), same("lumMod,lumOff,tint,shade".split(","), function (_ref2) { var val = _ref2.attribs.val; return parseInt(val) / 100000; }), { tidy_schemeClr: function tidy_schemeClr(_ref3) { var val = _ref3.val, effect = _objectWithoutProperties(_ref3, ["val"]); return od.doc.asColor(od.theme.color(val), effect); }, tidy_srgbClr: function tidy_srgbClr(_ref4) { var val = _ref4.val, effect = _objectWithoutProperties(_ref4, ["val"]); return od.doc.asColor(val, effect); }, tidy_prstClr: function tidy_prstClr(_ref5) { var val = _ref5.val, effect = _objectWithoutProperties(_ref5, ["val"]); return od.doc.asColor(val, effect); }, sysClr: function sysClr(_ref6) { var val = _ref6.attribs.val; return val; }, tidy_solidFill: function tidy_solidFill(_ref7) { var color = _ref7.color; return color; }, rot: function rot(v) { return parseInt(v) / 60000; }, blip: function blip(n) { var _n$attribs = n.attribs, embed = _n$attribs["r:embed"], url = _n$attribs["r:link"]; if (url) return { url: url }; var part = od.$(n).part(); return new _part2.default(part, od.doc).getRel(embed); }, prstGeom: function prstGeom(x) { return x.attribs.prst; }, pathLst: function pathLst(_ref8) { var children = _ref8.children; var px = function px(x) { return od.doc.emu2Px(x); }; return children.filter(function (a) { return a.name == "a:path"; }).reduce(function (d, path) { path.children.filter(function (a) { return a.name; }).forEach(function (a) { switch (a.name.split(":").pop()) { case 'moveTo': d.push('M ' + px(a.children[0].attribs.x) + ' ' + px(a.children[0].attribs.y)); break; case 'lnTo': d.push('L ' + px(a.children[0].attribs.x) + ' ' + px(a.children[0].attribs.y)); break; break; case 'cubicBezTo': d.push('L ' + px(a.children[0].attribs.x) + ' ' + px(a.children[0].attribs.y)); d.push('Q ' + px(a.children[1].attribs.x) + ' ' + px(a.children[1].attribs.y) + ' ' + px(a.children[2].attribs.x) + ' ' + px(a.children[2].attribs.y)); break; case 'arcTo': d.push("A"); break; case 'close': d.push('Z'); break; } }); return d; }, []).join(" "); }, tidy_custGeom: function tidy_custGeom(_ref9) { var pathLst = _ref9.pathLst; return pathLst; }, lvl: function lvl(v) { return parseInt(v); }, spcPts: function spcPts(_ref10) { var val = _ref10.attribs.val; return od.doc.pt2Px(parseInt(val) / 100); }, tidy_spcAft: function tidy_spcAft(_ref11) { var a = _ref11.spcPts; return a; }, tidy_spcBef: function tidy_spcBef(_ref12) { var a = _ref12.spcPts; return a; }, buFont: function buFont(_ref13) { var typeface = _ref13.attribs.typeface; return od.theme.font(typeface); }, buChar: function buChar(_ref14) { var char = _ref14.attribs.char; return char; }, buSzPts: function buSzPts(_ref15) { var val = _ref15.attribs.val; return od.doc.pt2Px(parseInt(val) / 100); }, buSzPct: function buSzPct(_ref16) { var val = _ref16.attribs.val; return parseInt(val) / 1000 / 100; }, buAutoNum: function buAutoNum(_ref17) { var attribs = _ref17.attribs; return _extends({}, attribs); }, tidy_buClr: function tidy_buClr(_ref18) { var color = _ref18.color; return color; }, indent: function indent(v) { return od.doc.emu2Px(v); }, marL: function marL(v) { return od.doc.emu2Px(v); }, lIns: function lIns(v) { return od.doc.emu2Px(v); }, rIns: function rIns(v) { return od.doc.emu2Px(v); }, bIns: function bIns(v) { return od.doc.emu2Px(v); }, tIns: function tIns(v) { return od.doc.emu2Px(v); }, ext: function ext(_ref19) { var _ref19$attribs = _ref19.attribs, cx = _ref19$attribs.cx, cy = _ref19$attribs.cy; return { width: od.doc.emu2Px(cx), height: od.doc.emu2Px(cy) }; }, off: function off(_ref20) { var _ref20$attribs = _ref20.attribs, x = _ref20$attribs.x, y = _ref20$attribs.y; return { x: od.doc.emu2Px(x), y: od.doc.emu2Px(y) }; }, tidy_xfrm: function tidy_xfrm(_ref21) { var _ref21$ext = _ref21.ext, ext = _ref21$ext === undefined ? {} : _ref21$ext, _ref21$off = _ref21.off, off = _ref21$off === undefined ? {} : _ref21$off, transform = _objectWithoutProperties(_ref21, ["ext", "off"]); return _extends({}, ext, off, transform); } }, same("ln,lnB,lnR,lnL,lnT,lnTlToBr,lnBlToTr".split(",").map(function (a) { return 'tidy_' + a; }), function (_ref22) { var w = _ref22.w, props = _objectWithoutProperties(_ref22, ["w"]); return _extends({}, props, { w: w ? od.doc.emu2Px(w) : undefined }); }), same("left,right,top,bottom".split(",").map(function (a) { return 'tidy_' + a; }), function (_ref23) { var ln = _ref23.ln; return ln; }), { tidy_tcTxStyle: function tidy_tcTxStyle(_ref24) { var color = _ref24.color, props = _objectWithoutProperties(_ref24, ["color"]); return _extends({}, props, { solidFill: color }); }, tidy_lnRef: function tidy_lnRef(_ref25) { var idx = _ref25.idx, ph = _objectWithoutProperties(_ref25, ["idx"]); return od.theme.lnRef(idx, ph); }, tidy_fillRef: function tidy_fillRef(_ref26) { var idx = _ref26.idx, ph = _objectWithoutProperties(_ref26, ["idx"]); return od.theme.fillRef(idx, ph); }, tidy_EffectRef: function tidy_EffectRef(_ref27) { var idx = _ref27.idx, ph = _objectWithoutProperties(_ref27, ["idx"]); return od.theme.effectRef(idx, ph); }, tidy_fontRef: function tidy_fontRef(_ref28) { var idx = _ref28.idx, ph = _objectWithoutProperties(_ref28, ["idx"]); return od.theme.fontRef(idx, ph); }, tidy_noAutoFit: function tidy_noAutoFit() { return undefined; }, tidy_normAutoFit: function tidy_normAutoFit(props) { return _extends({ type: "font" }, props); }, tidy_spAutoFit: function tidy_spAutoFit(props) { return _extends({ type: "block" }, props); }, names: { schemeClr: "color", srgbClr: "color", sysClr: "color", prstClr: "color", prstGeom: "geometry", custGeom: "geometry", lnB: "bottom", lnR: "right", lnL: "left", lnT: "top", rot: "rotate", spAutoFit: "autofit", normAutoFit: "autofit", noAutoFit: "autofit" }, inherit: function inherit() { for (var _len = arguments.length, additions = Array(_len), _key = 0; _key < _len; _key++) { additions[_key] = arguments[_key]; } return additions.reduce(function (_ref29, _ref30) { var _ref30$__filter = _ref30.__filter, _filter = _ref30$__filter === undefined ? "" : _ref30$__filter, _ref30$names = _ref30.names, _names = _ref30$names === undefined ? {} : _ref30$names, _others = _objectWithoutProperties(_ref30, ["__filter", "names"]); var _ref29$__filter = _ref29.__filter, __filter = _ref29$__filter === undefined ? "" : _ref29$__filter, _ref29$names = _ref29.names, names = _ref29$names === undefined ? {} : _ref29$names, others = _objectWithoutProperties(_ref29, ["__filter", "names"]); return _extends({}, others, _others, { __filter: [__filter, _filter].filter(function (a) { return !!a; }).join(","), names: _extends({}, names, _names) }); }, this); } }); }; var same = function same(keys, fx) { return keys.reduce(function (fs, k) { return fs[k] = fx, fs; }, {}); }; module.exports = exports['default']; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVueG1sL2RyYXdtbC9pbmRleC5qcyJdLCJuYW1lcyI6WyJfX2ZpbHRlciIsImlkIiwidW5kZWZpbmVkIiwic2FtZSIsInNwbGl0IiwiYXR0cmlicyIsInR5cGVmYWNlIiwib2QiLCJ0aGVtZSIsImZvbnQiLCJ2YWwiLCJwYXJzZUludCIsInRpZHlfc2NoZW1lQ2xyIiwiZWZmZWN0IiwiZG9jIiwiYXNDb2xvciIsImNvbG9yIiwidGlkeV9zcmdiQ2xyIiwidGlkeV9wcnN0Q2xyIiwic3lzQ2xyIiwidGlkeV9zb2xpZEZpbGwiLCJyb3QiLCJ2IiwiYmxpcCIsIm4iLCJlbWJlZCIsInVybCIsInBhcnQiLCIkIiwiZ2V0UmVsIiwicHJzdEdlb20iLCJ4IiwicHJzdCIsInBhdGhMc3QiLCJjaGlsZHJlbiIsInB4IiwiZW11MlB4IiwiZmlsdGVyIiwiYSIsIm5hbWUiLCJyZWR1Y2UiLCJkIiwicGF0aCIsImZvckVhY2giLCJwb3AiLCJwdXNoIiwieSIsImpvaW4iLCJ0aWR5X2N1c3RHZW9tIiwibHZsIiwic3BjUHRzIiwicHQyUHgiLCJ0aWR5X3NwY0FmdCIsInRpZHlfc3BjQmVmIiwiYnVGb250IiwiYnVDaGFyIiwiY2hhciIsImJ1U3pQdHMiLCJidVN6UGN0IiwiYnVBdXRvTnVtIiwidGlkeV9idUNsciIsImluZGVudCIsIm1hckwiLCJsSW5zIiwicklucyIsImJJbnMiLCJ0SW5zIiwiZXh0IiwiY3giLCJjeSIsIndpZHRoIiwiaGVpZ2h0Iiwib2ZmIiwidGlkeV94ZnJtIiwidHJhbnNmb3JtIiwibWFwIiwidyIsInByb3BzIiwibG4iLCJ0aWR5X3RjVHhTdHlsZSIsInNvbGlkRmlsbCIsInRpZHlfbG5SZWYiLCJpZHgiLCJwaCIsImxuUmVmIiwidGlkeV9maWxsUmVmIiwiZmlsbFJlZiIsInRpZHlfRWZmZWN0UmVmIiwiZWZmZWN0UmVmIiwidGlkeV9mb250UmVmIiwiZm9udFJlZiIsInRpZHlfbm9BdXRvRml0IiwidGlkeV9ub3JtQXV0b0ZpdCIsInR5cGUiLCJ0aWR5X3NwQXV0b0ZpdCIsIm5hbWVzIiwic2NoZW1lQ2xyIiwic3JnYkNsciIsInByc3RDbHIiLCJjdXN0R2VvbSIsImxuQiIsImxuUiIsImxuTCIsImxuVCIsInNwQXV0b0ZpdCIsIm5vcm1BdXRvRml0Iiwibm9BdXRvRml0IiwiaW5oZXJpdCIsImFkZGl0aW9ucyIsIl9maWx0ZXIiLCJfbmFtZXMiLCJfb3RoZXJzIiwib3RoZXJzIiwia2V5cyIsImZ4IiwiZnMiLCJrIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBOzs7Ozs7OztrQkFFZTtBQUFBO0FBQ1hBLGtCQUFTLGtCQURFO0FBRVhDLFlBQUc7QUFBQSxtQkFBSUMsU0FBSjtBQUFBO0FBRlEsT0FHUkMsS0FBSyxjQUFjQyxLQUFkLENBQW9CLEdBQXBCLENBQUwsRUFBOEI7QUFBQSx5Q0FBRUMsT0FBRixDQUFXQyxRQUFYO0FBQUEsWUFBV0EsUUFBWCx5Q0FBb0IsRUFBcEI7QUFBQSxlQUEyQkMsR0FBR0MsS0FBSCxDQUFTQyxJQUFULENBQWNILFFBQWQsQ0FBM0I7QUFBQSxLQUE5QixDQUhRLEVBS1JILEtBQUssMkJBQTJCQyxLQUEzQixDQUFpQyxHQUFqQyxDQUFMLEVBQTJDO0FBQUEsWUFBV00sR0FBWCxTQUFFTCxPQUFGLENBQVdLLEdBQVg7QUFBQSxlQUFtQkMsU0FBU0QsR0FBVCxJQUFjLE1BQWpDO0FBQUEsS0FBM0MsQ0FMUTtBQU1YRSx3QkFBZTtBQUFBLGdCQUFFRixHQUFGLFNBQUVBLEdBQUY7QUFBQSxnQkFBU0csTUFBVDs7QUFBQSxtQkFBbUJOLEdBQUdPLEdBQUgsQ0FBT0MsT0FBUCxDQUFlUixHQUFHQyxLQUFILENBQVNRLEtBQVQsQ0FBZU4sR0FBZixDQUFmLEVBQW1DRyxNQUFuQyxDQUFuQjtBQUFBLFNBTko7QUFPWEksc0JBQWE7QUFBQSxnQkFBRVAsR0FBRixTQUFFQSxHQUFGO0FBQUEsZ0JBQVNHLE1BQVQ7O0FBQUEsbUJBQW1CTixHQUFHTyxHQUFILENBQU9DLE9BQVAsQ0FBZUwsR0FBZixFQUFtQkcsTUFBbkIsQ0FBbkI7QUFBQSxTQVBGO0FBUVhLLHNCQUFhO0FBQUEsZ0JBQUVSLEdBQUYsU0FBRUEsR0FBRjtBQUFBLGdCQUFTRyxNQUFUOztBQUFBLG1CQUFtQk4sR0FBR08sR0FBSCxDQUFPQyxPQUFQLENBQWVMLEdBQWYsRUFBbUJHLE1BQW5CLENBQW5CO0FBQUEsU0FSRjtBQVNYTSxnQkFBTztBQUFBLGdCQUFXVCxHQUFYLFNBQUVMLE9BQUYsQ0FBV0ssR0FBWDtBQUFBLG1CQUFtQkEsR0FBbkI7QUFBQSxTQVRJO0FBVVhVLHdCQUFlO0FBQUEsZ0JBQUVKLEtBQUYsU0FBRUEsS0FBRjtBQUFBLG1CQUFXQSxLQUFYO0FBQUEsU0FWSjtBQVdYSyxhQUFJO0FBQUEsbUJBQUdWLFNBQVNXLENBQVQsSUFBWSxLQUFmO0FBQUEsU0FYTzs7QUFhWEMsY0FBSyxpQkFBRztBQUFBLDZCQUM0Q0MsQ0FENUMsQ0FDR25CLE9BREg7QUFBQSxnQkFDc0JvQixLQUR0QixjQUNZLFNBRFo7QUFBQSxnQkFDc0NDLEdBRHRDLGNBQzZCLFFBRDdCOztBQUVKLGdCQUFHQSxHQUFILEVBQ0ksT0FBTyxFQUFDQSxRQUFELEVBQVA7QUFDSixnQkFBTUMsT0FBS3BCLEdBQUdxQixDQUFILENBQUtKLENBQUwsRUFBUUcsSUFBUixFQUFYO0FBQ0EsbUJBQU8sbUJBQVNBLElBQVQsRUFBY3BCLEdBQUdPLEdBQWpCLEVBQXNCZSxNQUF0QixDQUE2QkosS0FBN0IsQ0FBUDtBQUNILFNBbkJVOztBQXFCWEssZ0JBckJXLG9CQXFCRkMsQ0FyQkUsRUFxQkE7QUFDYixtQkFBT0EsRUFBRTFCLE9BQUYsQ0FBVTJCLElBQWpCO0FBQ0EsU0F2QmE7QUF3QmRDLGVBeEJjLDBCQXdCSztBQUFBLGdCQUFWQyxRQUFVLFNBQVZBLFFBQVU7O0FBQ2xCLGdCQUFNQyxLQUFHLFNBQUhBLEVBQUc7QUFBQSx1QkFBRzVCLEdBQUdPLEdBQUgsQ0FBT3NCLE1BQVAsQ0FBY0wsQ0FBZCxDQUFIO0FBQUEsYUFBVDtBQUNNLG1CQUFPRyxTQUFTRyxNQUFULENBQWdCO0FBQUEsdUJBQUdDLEVBQUVDLElBQUYsSUFBUSxRQUFYO0FBQUEsYUFBaEIsRUFDRkMsTUFERSxDQUNLLFVBQUNDLENBQUQsRUFBR0MsSUFBSCxFQUFVO0FBQ2RBLHFCQUFLUixRQUFMLENBQWNHLE1BQWQsQ0FBcUI7QUFBQSwyQkFBR0MsRUFBRUMsSUFBTDtBQUFBLGlCQUFyQixFQUNLSSxPQURMLENBQ2EsYUFBRztBQUNSLDRCQUFPTCxFQUFFQyxJQUFGLENBQU9uQyxLQUFQLENBQWEsR0FBYixFQUFrQndDLEdBQWxCLEVBQVA7QUFDVCw2QkFBSyxRQUFMO0FBQ0NILDhCQUFFSSxJQUFGLENBQU8sT0FBS1YsR0FBR0csRUFBRUosUUFBRixDQUFXLENBQVgsRUFBYzdCLE9BQWQsQ0FBc0IwQixDQUF6QixDQUFMLEdBQWlDLEdBQWpDLEdBQXFDSSxHQUFHRyxFQUFFSixRQUFGLENBQVcsQ0FBWCxFQUFjN0IsT0FBZCxDQUFzQnlDLENBQXpCLENBQTVDO0FBQ0E7QUFDRCw2QkFBSyxNQUFMO0FBQ0NMLDhCQUFFSSxJQUFGLENBQU8sT0FBS1YsR0FBR0csRUFBRUosUUFBRixDQUFXLENBQVgsRUFBYzdCLE9BQWQsQ0FBc0IwQixDQUF6QixDQUFMLEdBQWlDLEdBQWpDLEdBQXFDSSxHQUFHRyxFQUFFSixRQUFGLENBQVcsQ0FBWCxFQUFjN0IsT0FBZCxDQUFzQnlDLENBQXpCLENBQTVDO0FBQ0E7QUFDRDtBQUNBLDZCQUFLLFlBQUw7QUFDQ0wsOEJBQUVJLElBQUYsQ0FBTyxPQUFLVixHQUFHRyxFQUFFSixRQUFGLENBQVcsQ0FBWCxFQUFjN0IsT0FBZCxDQUFzQjBCLENBQXpCLENBQUwsR0FBaUMsR0FBakMsR0FBcUNJLEdBQUdHLEVBQUVKLFFBQUYsQ0FBVyxDQUFYLEVBQWM3QixPQUFkLENBQXNCeUMsQ0FBekIsQ0FBNUM7QUFDQUwsOEJBQUVJLElBQUYsQ0FBTyxPQUFLVixHQUFHRyxFQUFFSixRQUFGLENBQVcsQ0FBWCxFQUFjN0IsT0FBZCxDQUFzQjBCLENBQXpCLENBQUwsR0FBaUMsR0FBakMsR0FBcUNJLEdBQUdHLEVBQUVKLFFBQUYsQ0FBVyxDQUFYLEVBQWM3QixPQUFkLENBQXNCeUMsQ0FBekIsQ0FBckMsR0FDTCxHQURLLEdBQ0RYLEdBQUdHLEVBQUVKLFFBQUYsQ0FBVyxDQUFYLEVBQWM3QixPQUFkLENBQXNCMEIsQ0FBekIsQ0FEQyxHQUMyQixHQUQzQixHQUMrQkksR0FBR0csRUFBRUosUUFBRixDQUFXLENBQVgsRUFBYzdCLE9BQWQsQ0FBc0J5QyxDQUF6QixDQUR0QztBQUVEO0FBQ0EsNkJBQUssT0FBTDtBQUNDTCw4QkFBRUksSUFBRjtBQUNEO0FBQ0EsNkJBQUssT0FBTDtBQUNDSiw4QkFBRUksSUFBRixDQUFPLEdBQVA7QUFDRDtBQWxCUztBQW9CSCxpQkF0Qkw7QUF1QkEsdUJBQU9KLENBQVA7QUFDSCxhQTFCRSxFQTBCRCxFQTFCQyxFQTBCR00sSUExQkgsQ0EwQlEsR0ExQlIsQ0FBUDtBQTJCTixTQXJEYTs7QUFzRFhDLHVCQUFjO0FBQUEsZ0JBQUVmLE9BQUYsU0FBRUEsT0FBRjtBQUFBLG1CQUFhQSxPQUFiO0FBQUEsU0F0REg7O0FBd0RYZ0IsYUFBSTtBQUFBLG1CQUFHdEMsU0FBU1csQ0FBVCxDQUFIO0FBQUEsU0F4RE87QUF5RFg0QixnQkFBTztBQUFBLGdCQUFXeEMsR0FBWCxVQUFFTCxPQUFGLENBQVdLLEdBQVg7QUFBQSxtQkFBbUJILEdBQUdPLEdBQUgsQ0FBT3FDLEtBQVAsQ0FBYXhDLFNBQVNELEdBQVQsSUFBYyxHQUEzQixDQUFuQjtBQUFBLFNBekRJO0FBMERYMEMscUJBQVk7QUFBQSxnQkFBU2QsQ0FBVCxVQUFFWSxNQUFGO0FBQUEsbUJBQWNaLENBQWQ7QUFBQSxTQTFERDtBQTJEWGUscUJBQVk7QUFBQSxnQkFBU2YsQ0FBVCxVQUFFWSxNQUFGO0FBQUEsbUJBQWNaLENBQWQ7QUFBQSxTQTNERDs7QUE2RFhnQixnQkFBTztBQUFBLGdCQUFXaEQsUUFBWCxVQUFFRCxPQUFGLENBQVdDLFFBQVg7QUFBQSxtQkFBd0JDLEdBQUdDLEtBQUgsQ0FBU0MsSUFBVCxDQUFjSCxRQUFkLENBQXhCO0FBQUEsU0E3REk7QUE4RFhpRCxnQkFBTztBQUFBLGdCQUFXQyxJQUFYLFVBQUVuRCxPQUFGLENBQVdtRCxJQUFYO0FBQUEsbUJBQW9CQSxJQUFwQjtBQUFBLFNBOURJO0FBK0RYQyxpQkFBUTtBQUFBLGdCQUFXL0MsR0FBWCxVQUFFTCxPQUFGLENBQVdLLEdBQVg7QUFBQSxtQkFBbUJILEdBQUdPLEdBQUgsQ0FBT3FDLEtBQVAsQ0FBYXhDLFNBQVNELEdBQVQsSUFBYyxHQUEzQixDQUFuQjtBQUFBLFNBL0RHO0FBZ0VYZ0QsaUJBQVE7QUFBQSxnQkFBV2hELEdBQVgsVUFBRUwsT0FBRixDQUFXSyxHQUFYO0FBQUEsbUJBQW1CQyxTQUFTRCxHQUFULElBQWMsSUFBZCxHQUFtQixHQUF0QztBQUFBLFNBaEVHO0FBaUVYaUQsbUJBQVU7QUFBQSxnQkFBRXRELE9BQUYsVUFBRUEsT0FBRjtBQUFBLGdDQUFrQkEsT0FBbEI7QUFBQSxTQWpFQztBQWtFWHVELG9CQUFXO0FBQUEsZ0JBQUU1QyxLQUFGLFVBQUVBLEtBQUY7QUFBQSxtQkFBV0EsS0FBWDtBQUFBLFNBbEVBOztBQW9FWDZDLGdCQUFPO0FBQUEsbUJBQUd0RCxHQUFHTyxHQUFILENBQU9zQixNQUFQLENBQWNkLENBQWQsQ0FBSDtBQUFBLFNBcEVJO0FBcUVYd0MsY0FBSztBQUFBLG1CQUFHdkQsR0FBR08sR0FBSCxDQUFPc0IsTUFBUCxDQUFjZCxDQUFkLENBQUg7QUFBQSxTQXJFTTtBQXNFWHlDLGNBQUs7QUFBQSxtQkFBR3hELEdBQUdPLEdBQUgsQ0FBT3NCLE1BQVAsQ0FBY2QsQ0FBZCxDQUFIO0FBQUEsU0F0RU07QUF1RVgwQyxjQUFLO0FBQUEsbUJBQUd6RCxHQUFHTyxHQUFILENBQU9zQixNQUFQLENBQWNkLENBQWQsQ0FBSDtBQUFBLFNBdkVNO0FBd0VYMkMsY0FBSztBQUFBLG1CQUFHMUQsR0FBR08sR0FBSCxDQUFPc0IsTUFBUCxDQUFjZCxDQUFkLENBQUg7QUFBQSxTQXhFTTtBQXlFWDRDLGNBQUs7QUFBQSxtQkFBRzNELEdBQUdPLEdBQUgsQ0FBT3NCLE1BQVAsQ0FBY2QsQ0FBZCxDQUFIO0FBQUEsU0F6RU07O0FBMkVYNkMsYUFBSTtBQUFBLHdDQUFFOUQsT0FBRjtBQUFBLGdCQUFXK0QsRUFBWCxrQkFBV0EsRUFBWDtBQUFBLGdCQUFjQyxFQUFkLGtCQUFjQSxFQUFkO0FBQUEsbUJBQXNCLEVBQUNDLE9BQU0vRCxHQUFHTyxHQUFILENBQU9zQixNQUFQLENBQWNnQyxFQUFkLENBQVAsRUFBeUJHLFFBQU9oRSxHQUFHTyxHQUFILENBQU9zQixNQUFQLENBQWNpQyxFQUFkLENBQWhDLEVBQXRCO0FBQUEsU0EzRU87QUE0RVhHLGFBQUk7QUFBQSx3Q0FBRW5FLE9BQUY7QUFBQSxnQkFBVzBCLENBQVgsa0JBQVdBLENBQVg7QUFBQSxnQkFBYWUsQ0FBYixrQkFBYUEsQ0FBYjtBQUFBLG1CQUFvQixFQUFDZixHQUFFeEIsR0FBR08sR0FBSCxDQUFPc0IsTUFBUCxDQUFjTCxDQUFkLENBQUgsRUFBb0JlLEdBQUV2QyxHQUFHTyxHQUFILENBQU9zQixNQUFQLENBQWNVLENBQWQsQ0FBdEIsRUFBcEI7QUFBQSxTQTVFTztBQTZFWDJCLG1CQUFVO0FBQUEsb0NBQUVOLEdBQUY7QUFBQSxnQkFBRUEsR0FBRiw4QkFBTSxFQUFOO0FBQUEsb0NBQVNLLEdBQVQ7QUFBQSxnQkFBU0EsR0FBVCw4QkFBYSxFQUFiO0FBQUEsZ0JBQW9CRSxTQUFwQjs7QUFBQSxnQ0FBc0NQLEdBQXRDLEVBQThDSyxHQUE5QyxFQUFzREUsU0FBdEQ7QUFBQTs7QUE3RUMsT0ErRVJ2RSxLQUFLLHVDQUF1Q0MsS0FBdkMsQ0FBNkMsR0FBN0MsRUFBa0R1RSxHQUFsRCxDQUFzRDtBQUFBLGVBQUcsVUFBUXJDLENBQVg7QUFBQSxLQUF0RCxDQUFMLEVBQXlFO0FBQUEsWUFBRXNDLENBQUYsVUFBRUEsQ0FBRjtBQUFBLFlBQU9DLEtBQVA7O0FBQUEsNEJBQXFCQSxLQUFyQixJQUE0QkQsR0FBRUEsSUFBSXJFLEdBQUdPLEdBQUgsQ0FBT3NCLE1BQVAsQ0FBY3dDLENBQWQsQ0FBSixHQUF1QjFFLFNBQXJEO0FBQUEsS0FBekUsQ0EvRVEsRUFnRlJDLEtBQUssd0JBQXdCQyxLQUF4QixDQUE4QixHQUE5QixFQUFtQ3VFLEdBQW5DLENBQXVDO0FBQUEsZUFBRyxVQUFRckMsQ0FBWDtBQUFBLEtBQXZDLENBQUwsRUFBMEQ7QUFBQSxZQUFFd0MsRUFBRixVQUFFQSxFQUFGO0FBQUEsZUFBUUEsRUFBUjtBQUFBLEtBQTFELENBaEZRO0FBaUZYQyx3QkFBZTtBQUFBLGdCQUFFL0QsS0FBRixVQUFFQSxLQUFGO0FBQUEsZ0JBQVc2RCxLQUFYOztBQUFBLGdDQUF5QkEsS0FBekIsSUFBZ0NHLFdBQVVoRSxLQUExQztBQUFBLFNBakZKOztBQW1GWGlFLG9CQUFXO0FBQUEsZ0JBQUVDLEdBQUYsVUFBRUEsR0FBRjtBQUFBLGdCQUFTQyxFQUFUOztBQUFBLG1CQUFlNUUsR0FBR0MsS0FBSCxDQUFTNEUsS0FBVCxDQUFlRixHQUFmLEVBQW1CQyxFQUFuQixDQUFmO0FBQUEsU0FuRkE7QUFvRlhFLHNCQUFhO0FBQUEsZ0JBQUVILEdBQUYsVUFBRUEsR0FBRjtBQUFBLGdCQUFTQyxFQUFUOztBQUFBLG1CQUFlNUUsR0FBR0MsS0FBSCxDQUFTOEUsT0FBVCxDQUFpQkosR0FBakIsRUFBcUJDLEVBQXJCLENBQWY7QUFBQSxTQXBGRjtBQXFGWEksd0JBQWU7QUFBQSxnQkFBRUwsR0FBRixVQUFFQSxHQUFGO0FBQUEsZ0JBQVNDLEVBQVQ7O0FBQUEsbUJBQWU1RSxHQUFHQyxLQUFILENBQVNnRixTQUFULENBQW1CTixHQUFuQixFQUF1QkMsRUFBdkIsQ0FBZjtBQUFBLFNBckZKO0FBc0ZYTSxzQkFBYTtBQUFBLGdCQUFFUCxHQUFGLFVBQUVBLEdBQUY7QUFBQSxnQkFBU0MsRUFBVDs7QUFBQSxtQkFBZTVFLEdBQUdDLEtBQUgsQ0FBU2tGLE9BQVQsQ0FBaUJSLEdBQWpCLEVBQXFCQyxFQUFyQixDQUFmO0FBQUEsU0F0RkY7O0FBd0ZYUSx3QkFBZTtBQUFBLG1CQUFJekYsU0FBSjtBQUFBLFNBeEZKO0FBeUZYMEYsMEJBQWlCO0FBQUEsOEJBQVNDLE1BQUssTUFBZCxJQUF3QmhCLEtBQXhCO0FBQUEsU0F6Rk47QUEwRlhpQix3QkFBZTtBQUFBLDhCQUFTRCxNQUFLLE9BQWQsSUFBeUJoQixLQUF6QjtBQUFBLFNBMUZKOztBQTRGWGtCLGVBQU07QUFDRkMsdUJBQVUsT0FEUixFQUNpQkMsU0FBUSxPQUR6QixFQUNrQzlFLFFBQU8sT0FEekMsRUFDaUQrRSxTQUFRLE9BRHpEO0FBRUZwRSxzQkFBUyxVQUZQLEVBRW1CcUUsVUFBUyxVQUY1QjtBQUdGQyxpQkFBSSxRQUhGLEVBR1lDLEtBQUksT0FIaEIsRUFHeUJDLEtBQUksTUFIN0IsRUFHcUNDLEtBQUksS0FIekM7QUFJRmxGLGlCQUFJLFFBSkY7QUFLRm1GLHVCQUFVLFNBTFIsRUFLa0JDLGFBQVksU0FMOUIsRUFLd0NDLFdBQVU7QUFMbEQsU0E1Rks7O0FBb0dYQyxlQXBHVyxxQkFvR1U7QUFBQSw4Q0FBVkMsU0FBVTtBQUFWQSx5QkFBVTtBQUFBOztBQUNqQixtQkFBT0EsVUFBVXBFLE1BQVYsQ0FBaUIsMEJBQXdGO0FBQUEsNkNBQW5EeEMsUUFBbUQ7QUFBQSxvQkFBMUM2RyxPQUEwQyxtQ0FBbEMsRUFBa0M7QUFBQSwwQ0FBL0JkLEtBQStCO0FBQUEsb0JBQXpCZSxNQUF5QixnQ0FBbEIsRUFBa0I7QUFBQSxvQkFBWEMsT0FBVzs7QUFBQSw2Q0FBdEYvRyxRQUFzRjtBQUFBLG9CQUF0RkEsUUFBc0YsbUNBQTdFLEVBQTZFO0FBQUEsMENBQTFFK0YsS0FBMEU7QUFBQSxvQkFBMUVBLEtBQTBFLGdDQUFwRSxFQUFvRTtBQUFBLG9CQUE3RGlCLE1BQTZEOztBQUM1RyxvQ0FDT0EsTUFEUCxFQUVPRCxPQUZQO0FBR0kvRyw4QkFBUyxDQUFDQSxRQUFELEVBQVU2RyxPQUFWLEVBQW1CeEUsTUFBbkIsQ0FBMEI7QUFBQSwrQkFBRyxDQUFDLENBQUNDLENBQUw7QUFBQSxxQkFBMUIsRUFBa0NTLElBQWxDLENBQXVDLEdBQXZDLENBSGI7QUFJSWdELHdDQUFVQSxLQUFWLEVBQW9CZSxNQUFwQjtBQUpKO0FBTUgsYUFQTSxFQU9MLElBUEssQ0FBUDtBQVFIO0FBN0dVO0FBQUEsQzs7QUFnSGYsSUFBTTNHLE9BQUssU0FBTEEsSUFBSyxDQUFDOEcsSUFBRCxFQUFNQyxFQUFOO0FBQUEsV0FBV0QsS0FBS3pFLE1BQUwsQ0FBWSxVQUFDMkUsRUFBRCxFQUFLQyxDQUFMO0FBQUEsZUFBVUQsR0FBR0MsQ0FBSCxJQUFNRixFQUFOLEVBQVVDLEVBQXBCO0FBQUEsS0FBWixFQUFvQyxFQUFwQyxDQUFYO0FBQUEsQ0FBWCIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJ0IGZyb20gXCIuLi9wYXJ0XCJcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG9kPT4oe1xyXG4gICAgX19maWx0ZXI6XCI6bm90KGFcXFxcOmV4dExzdClcIixcclxuICAgIGlkOigpPT51bmRlZmluZWQsXHJcbiAgICAuLi5zYW1lKFwibGF0aW4sZWEsY3NcIi5zcGxpdChcIixcIiksKHthdHRyaWJzOnt0eXBlZmFjZT1cIlwifX0pPT5vZC50aGVtZS5mb250KHR5cGVmYWNlKSksXHJcbiAgICAvL3N6OnY9Pm9kLmRvYy5wdDJQeChwYXJzZUludCh2KS8xMDApLFxyXG4gICAgLi4uc2FtZShcImx1bU1vZCxsdW1PZmYsdGludCxzaGFkZVwiLnNwbGl0KFwiLFwiKSwoe2F0dHJpYnM6e3ZhbH19KT0+cGFyc2VJbnQodmFsKS8xMDAwMDApLFxyXG4gICAgdGlkeV9zY2hlbWVDbHI6KHt2YWwsLi4uZWZmZWN0fSk9Pm9kLmRvYy5hc0NvbG9yKG9kLnRoZW1lLmNvbG9yKHZhbCksZWZmZWN0KSxcclxuICAgIHRpZHlfc3JnYkNscjooe3ZhbCwuLi5lZmZlY3R9KT0+b2QuZG9jLmFzQ29sb3IodmFsLGVmZmVjdCksXHJcbiAgICB0aWR5X3Byc3RDbHI6KHt2YWwsLi4uZWZmZWN0fSk9Pm9kLmRvYy5hc0NvbG9yKHZhbCxlZmZlY3QpLFxyXG4gICAgc3lzQ2xyOih7YXR0cmliczp7dmFsfX0pPT52YWwsXHJcbiAgICB0aWR5X3NvbGlkRmlsbDooe2NvbG9yfSk9PmNvbG9yLFxyXG4gICAgcm90OnY9PnBhcnNlSW50KHYpLzYwMDAwLFxyXG5cclxuICAgIGJsaXA6bj0+e1xyXG4gICAgICAgIGNvbnN0IHthdHRyaWJzOntcInI6ZW1iZWRcIjplbWJlZCwgXCJyOmxpbmtcIjp1cmx9fT1uXHJcbiAgICAgICAgaWYodXJsKVxyXG4gICAgICAgICAgICByZXR1cm4ge3VybH1cclxuICAgICAgICBjb25zdCBwYXJ0PW9kLiQobikucGFydCgpXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJ0KHBhcnQsb2QuZG9jKS5nZXRSZWwoZW1iZWQpXHJcbiAgICB9LFxyXG5cclxuICAgIHByc3RHZW9tKHgpe1xyXG5cdFx0cmV0dXJuIHguYXR0cmlicy5wcnN0XHJcblx0fSxcclxuXHRwYXRoTHN0KHtjaGlsZHJlbn0pe1xyXG5cdFx0Y29uc3QgcHg9eD0+b2QuZG9jLmVtdTJQeCh4KVxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5maWx0ZXIoYT0+YS5uYW1lPT1cImE6cGF0aFwiKVxyXG4gICAgICAgICAgICAucmVkdWNlKChkLHBhdGgpPT57XHJcbiAgICAgICAgICAgICAgICBwYXRoLmNoaWxkcmVuLmZpbHRlcihhPT5hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goYT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goYS5uYW1lLnNwbGl0KFwiOlwiKS5wb3AoKSl7XHJcbiAgICAgICAgICAgIFx0XHRcdGNhc2UgJ21vdmVUbyc6XHJcbiAgICAgICAgICAgIFx0XHRcdFx0ZC5wdXNoKCdNICcrcHgoYS5jaGlsZHJlblswXS5hdHRyaWJzLngpKycgJytweChhLmNoaWxkcmVuWzBdLmF0dHJpYnMueSkpXHJcbiAgICAgICAgICAgIFx0XHRcdFx0YnJlYWtcclxuICAgICAgICAgICAgXHRcdFx0Y2FzZSAnbG5Ubyc6XHJcbiAgICAgICAgICAgIFx0XHRcdFx0ZC5wdXNoKCdMICcrcHgoYS5jaGlsZHJlblswXS5hdHRyaWJzLngpKycgJytweChhLmNoaWxkcmVuWzBdLmF0dHJpYnMueSkpXHJcbiAgICAgICAgICAgIFx0XHRcdFx0YnJlYWtcclxuICAgICAgICAgICAgXHRcdFx0YnJlYWtcclxuICAgICAgICAgICAgXHRcdFx0Y2FzZSAnY3ViaWNCZXpUbyc6XHJcbiAgICAgICAgICAgIFx0XHRcdFx0ZC5wdXNoKCdMICcrcHgoYS5jaGlsZHJlblswXS5hdHRyaWJzLngpKycgJytweChhLmNoaWxkcmVuWzBdLmF0dHJpYnMueSkpXHJcbiAgICAgICAgICAgIFx0XHRcdFx0ZC5wdXNoKCdRICcrcHgoYS5jaGlsZHJlblsxXS5hdHRyaWJzLngpKycgJytweChhLmNoaWxkcmVuWzFdLmF0dHJpYnMueSlcclxuICAgICAgICAgICAgXHRcdFx0XHRcdCsnICcrcHgoYS5jaGlsZHJlblsyXS5hdHRyaWJzLngpKycgJytweChhLmNoaWxkcmVuWzJdLmF0dHJpYnMueSkpXHJcbiAgICAgICAgICAgIFx0XHRcdGJyZWFrXHJcbiAgICAgICAgICAgIFx0XHRcdGNhc2UgJ2FyY1RvJzpcclxuICAgICAgICAgICAgXHRcdFx0XHRkLnB1c2goYEFgKVxyXG4gICAgICAgICAgICBcdFx0XHRicmVha1xyXG4gICAgICAgICAgICBcdFx0XHRjYXNlICdjbG9zZSc6XHJcbiAgICAgICAgICAgIFx0XHRcdFx0ZC5wdXNoKCdaJylcclxuICAgICAgICAgICAgXHRcdFx0YnJlYWtcclxuICAgICAgICAgICAgXHRcdFx0fVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZFxyXG4gICAgICAgICAgICB9LFtdKS5qb2luKFwiIFwiKVxyXG5cdH0sXHJcbiAgICB0aWR5X2N1c3RHZW9tOih7cGF0aExzdH0pPT5wYXRoTHN0LFxyXG5cclxuICAgIGx2bDp2PT5wYXJzZUludCh2KSxcclxuICAgIHNwY1B0czooe2F0dHJpYnM6e3ZhbH19KT0+b2QuZG9jLnB0MlB4KHBhcnNlSW50KHZhbCkvMTAwKSxcclxuICAgIHRpZHlfc3BjQWZ0Oih7c3BjUHRzOmF9KT0+YSxcclxuICAgIHRpZHlfc3BjQmVmOih7c3BjUHRzOmF9KT0+YSxcclxuXHJcbiAgICBidUZvbnQ6KHthdHRyaWJzOnt0eXBlZmFjZX19KT0+b2QudGhlbWUuZm9udCh0eXBlZmFjZSksXHJcbiAgICBidUNoYXI6KHthdHRyaWJzOntjaGFyfX0pPT5jaGFyLFxyXG4gICAgYnVTelB0czooe2F0dHJpYnM6e3ZhbH19KT0+b2QuZG9jLnB0MlB4KHBhcnNlSW50KHZhbCkvMTAwKSxcclxuICAgIGJ1U3pQY3Q6KHthdHRyaWJzOnt2YWx9fSk9PnBhcnNlSW50KHZhbCkvMTAwMC8xMDAsXHJcbiAgICBidUF1dG9OdW06KHthdHRyaWJzfSk9Pih7Li4uYXR0cmlic30pLFxyXG4gICAgdGlkeV9idUNscjooe2NvbG9yfSk9PmNvbG9yLFxyXG5cclxuICAgIGluZGVudDp2PT5vZC5kb2MuZW11MlB4KHYpLFxyXG4gICAgbWFyTDp2PT5vZC5kb2MuZW11MlB4KHYpLFxyXG4gICAgbEluczp2PT5vZC5kb2MuZW11MlB4KHYpLFxyXG4gICAgckluczp2PT5vZC5kb2MuZW11MlB4KHYpLFxyXG4gICAgYkluczp2PT5vZC5kb2MuZW11MlB4KHYpLFxyXG4gICAgdEluczp2PT5vZC5kb2MuZW11MlB4KHYpLFxyXG5cclxuICAgIGV4dDooe2F0dHJpYnM6e2N4LGN5fX0pPT4oe3dpZHRoOm9kLmRvYy5lbXUyUHgoY3gpLGhlaWdodDpvZC5kb2MuZW11MlB4KGN5KX0pLFxyXG4gICAgb2ZmOih7YXR0cmliczp7eCx5fX0pPT4oe3g6b2QuZG9jLmVtdTJQeCh4KSx5Om9kLmRvYy5lbXUyUHgoeSl9KSxcclxuICAgIHRpZHlfeGZybTooe2V4dD17fSxvZmY9e30sIC4uLnRyYW5zZm9ybX0pPT4oey4uLmV4dCwgLi4ub2ZmLCAuLi50cmFuc2Zvcm19KSxcclxuXHJcbiAgICAuLi5zYW1lKFwibG4sbG5CLGxuUixsbkwsbG5ULGxuVGxUb0JyLGxuQmxUb1RyXCIuc3BsaXQoXCIsXCIpLm1hcChhPT4ndGlkeV8nK2EpLCh7dywuLi5wcm9wc30pPT4oey4uLnByb3BzLCB3OncgPyBvZC5kb2MuZW11MlB4KHcpIDogdW5kZWZpbmVkfSkpLFxyXG4gICAgLi4uc2FtZShcImxlZnQscmlnaHQsdG9wLGJvdHRvbVwiLnNwbGl0KFwiLFwiKS5tYXAoYT0+J3RpZHlfJythKSwoe2xufSk9PmxuKSxcclxuICAgIHRpZHlfdGNUeFN0eWxlOih7Y29sb3IsLi4ucHJvcHN9KT0+KHsuLi5wcm9wcywgc29saWRGaWxsOmNvbG9yfSksXHJcblxyXG4gICAgdGlkeV9sblJlZjooe2lkeCwuLi5waH0pPT5vZC50aGVtZS5sblJlZihpZHgscGgpLFxyXG4gICAgdGlkeV9maWxsUmVmOih7aWR4LC4uLnBofSk9Pm9kLnRoZW1lLmZpbGxSZWYoaWR4LHBoKSxcclxuICAgIHRpZHlfRWZmZWN0UmVmOih7aWR4LC4uLnBofSk9Pm9kLnRoZW1lLmVmZmVjdFJlZihpZHgscGgpLFxyXG4gICAgdGlkeV9mb250UmVmOih7aWR4LC4uLnBofSk9Pm9kLnRoZW1lLmZvbnRSZWYoaWR4LHBoKSxcclxuXHJcbiAgICB0aWR5X25vQXV0b0ZpdDooKT0+dW5kZWZpbmVkLFxyXG4gICAgdGlkeV9ub3JtQXV0b0ZpdDpwcm9wcz0+KHt0eXBlOlwiZm9udFwiLC4uLnByb3BzfSksXHJcbiAgICB0aWR5X3NwQXV0b0ZpdDpwcm9wcz0+KHt0eXBlOlwiYmxvY2tcIiwuLi5wcm9wc30pLFxyXG5cclxuICAgIG5hbWVzOntcclxuICAgICAgICBzY2hlbWVDbHI6XCJjb2xvclwiLCBzcmdiQ2xyOlwiY29sb3JcIiwgc3lzQ2xyOlwiY29sb3JcIixwcnN0Q2xyOlwiY29sb3JcIixcclxuICAgICAgICBwcnN0R2VvbTpcImdlb21ldHJ5XCIsIGN1c3RHZW9tOlwiZ2VvbWV0cnlcIixcclxuICAgICAgICBsbkI6XCJib3R0b21cIiwgbG5SOlwicmlnaHRcIiwgbG5MOlwibGVmdFwiLCBsblQ6XCJ0b3BcIixcclxuICAgICAgICByb3Q6XCJyb3RhdGVcIixcclxuICAgICAgICBzcEF1dG9GaXQ6XCJhdXRvZml0XCIsbm9ybUF1dG9GaXQ6XCJhdXRvZml0XCIsbm9BdXRvRml0OlwiYXV0b2ZpdFwiLFxyXG4gICAgfSxcclxuXHJcbiAgICBpbmhlcml0KC4uLmFkZGl0aW9ucyl7XHJcbiAgICAgICAgcmV0dXJuIGFkZGl0aW9ucy5yZWR1Y2UoKHtfX2ZpbHRlcj1cIlwiLG5hbWVzPXt9LCAuLi5vdGhlcnN9LCB7X19maWx0ZXI6X2ZpbHRlcj1cIlwiLG5hbWVzOl9uYW1lcz17fSwgLi4uX290aGVyc30pPT57XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5vdGhlcnMsXHJcbiAgICAgICAgICAgICAgICAuLi5fb3RoZXJzLFxyXG4gICAgICAgICAgICAgICAgX19maWx0ZXI6W19fZmlsdGVyLF9maWx0ZXJdLmZpbHRlcihhPT4hIWEpLmpvaW4oXCIsXCIpLFxyXG4gICAgICAgICAgICAgICAgbmFtZXM6ey4uLm5hbWVzLCAuLi5fbmFtZXN9LFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSx0aGlzKVxyXG4gICAgfVxyXG59KVxyXG5cclxuY29uc3Qgc2FtZT0oa2V5cyxmeCk9PmtleXMucmVkdWNlKChmcywgayk9Pihmc1trXT1meCwgZnMpLHt9KVxyXG4iXX0=