svg-paper
Version:
The world's most maintainable way to create paper-printable documents 🖨💘
654 lines (510 loc) • 92 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["SvgPaper"] = factory();
else
root["SvgPaper"] = factory();
})(window, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({
/***/ "./js/src/adjust-text.js":
/*!*******************************!*\
!*** ./js/src/adjust-text.js ***!
\*******************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = (function (paperPixelRatio, selector, config) {
var $this = document.querySelector(selector);
if (!$this) {
return;
} // shrink text element to specified width
if (!!config['textLength']) {
// for firefox
// @see https://developer.mozilla.org/ja/docs/Web/API/Element/clientWidth
$this.style.display = 'block';
if ($this.getBoundingClientRect().width * paperPixelRatio > config.textLength) {
$this.querySelector('tspan').setAttribute('textLength', config.textLength);
$this.querySelector('tspan').setAttribute('lengthAdjust', 'spacingAndGlyphs'); // for firefox
// @see https://bugzilla.mozilla.org/show_bug.cgi?id=890692
$this.setAttribute('textLength', config.textLength);
$this.setAttribute('lengthAdjust', 'spacingAndGlyphs');
}
} // alignment
if (!!config['text-anchor'] && config['text-anchor'] !== 'start') {
var w = parseFloat(config['textLength']);
var x = 0;
var y = 0;
if ($this.getAttribute('transform')) {
x = parseFloat($this.getAttribute('transform').match(/translate\((\S+) .+\)/)[1]);
y = parseFloat($this.getAttribute('transform').match(/translate\(\S+ (.+)\)/)[1]);
}
if (config['text-anchor'] === 'middle') {
$this.setAttribute('transform', "translate(".concat(x + w / 2, " ").concat(y, ")"));
}
if (config['text-anchor'] === 'end') {
$this.setAttribute('transform', "translate(".concat(x + w, " ").concat(y, ")"));
}
$this.setAttribute('text-anchor', config['text-anchor']);
}
});
/***/ }),
/***/ "./js/src/adjust-textarea.js":
/*!***********************************!*\
!*** ./js/src/adjust-textarea.js ***!
\***********************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _utility_split_string_by_width__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utility/split-string-by-width */ "./js/src/utility/split-string-by-width.js");
/* harmony import */ var _utility_fix_text_transform__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utility/fix-text-transform */ "./js/src/utility/fix-text-transform.js");
/* harmony default export */ __webpack_exports__["default"] = (function (textSvg, textContent, width, height) {
var lineHeight = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1.2;
var paddingX = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0.5;
var paddingY = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0.5;
var nowrap = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;
if (!textSvg.match(new RegExp('<text [^>]*font-size="\\d+"[^>]*><tspan( [^>]*>|>)[^<>]*</tspan></text>'))) {
console.error('Invalid svg string of text element', textSvg);
return textSvg;
}
var originalFontSize = parseInt(textSvg.match(/.+font-size="(\d+)".+/)[1]);
var fontSize = originalFontSize; // find the right-size font-size
var physicalLines = textContent.split("\n");
var logicalLines = [];
var _loop = function _loop() {
var maxRows = Math.floor((height - 2 * fontSize * paddingY) / (fontSize * lineHeight));
var maxColumns = Math.floor((width - 2 * fontSize * paddingX) / fontSize); // doesn't care about proportional font
if (nowrap) {
logicalLines = physicalLines;
} else {
logicalLines = [];
physicalLines.forEach(function (line) {
logicalLines = logicalLines.concat(Object(_utility_split_string_by_width__WEBPACK_IMPORTED_MODULE_0__["default"])(line, maxColumns * 2)); // 2 single-byte characters can be placed in 1 column
});
}
if (logicalLines.length > maxRows) {
fontSize *= 0.95;
} else {
return "break";
}
};
while (true) {
var _ret = _loop();
if (_ret === "break") break;
} // raise y-coordinate up because y-coordinate of <text transform="translate(x y)"> or <tspan y=""> is on lower base of text object
var adjustY = fontSize - originalFontSize;
var adjustedTextSvg = Object(_utility_fix_text_transform__WEBPACK_IMPORTED_MODULE_1__["default"])(textSvg);
adjustedTextSvg = adjustedTextSvg.replace(new RegExp('<tspan(.|\\s)+</text>'), '');
adjustedTextSvg = adjustedTextSvg.replace(new RegExp('font-size="\\d+"'), "font-size=\"".concat(fontSize, "\""));
adjustedTextSvg += '{tspan}</text>';
var tspan = '';
var x = fontSize * paddingX;
logicalLines.forEach(function (line, i) {
var y = adjustY + fontSize * (paddingY + i * lineHeight);
tspan += "<tspan x=\"".concat(x, "\" y=\"").concat(y, "\">").concat(line, "</tspan>");
});
adjustedTextSvg = adjustedTextSvg.replace('{tspan}', tspan);
return adjustedTextSvg;
});
/***/ }),
/***/ "./js/src/svg-paper.js":
/*!*****************************!*\
!*** ./js/src/svg-paper.js ***!
\*****************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return SvgPaper; });
/* harmony import */ var _adjust_text__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adjust-text */ "./js/src/adjust-text.js");
/* harmony import */ var _adjust_textarea__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./adjust-textarea */ "./js/src/adjust-textarea.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var SvgPaper = /*#__PURE__*/function () {
function SvgPaper() {
var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.paper svg';
_classCallCheck(this, SvgPaper);
if (!document.querySelector(selector)) {
throw new Error('Invalid selector');
}
this.selector = selector;
this.svg = document.querySelector(selector).outerHTML.replace(/[\r|\n]+/g, "\n");
this.adjustTextQueries = [];
}
_createClass(SvgPaper, [{
key: "replace",
value: function replace(search, replacement) {
if (search instanceof RegExp) {
search = new RegExp(search.source, search.flags.replace(/g/g, '') + 'g');
} else {
search = search.replace(/[\r|\n]+/g, "\n"); // @see https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
search = search.replace(/[.*+?^=!:${}()|[\]\/\\]/g, '\\$&');
search = new RegExp(search, 'g');
} // cast to string
replacement = replacement !== undefined && replacement !== null ? replacement + '' : '';
replacement = replacement.replace(/[\r|\n]+/g, "\n");
this.svg = this.svg.replace(search, replacement);
return this;
}
}, {
key: "adjustText",
value: function adjustText(selector) {
var textLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var textAnchor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'start';
this.adjustTextQueries.push({
selector: selector,
textLength: textLength,
textAnchor: textAnchor
});
return this;
}
}, {
key: "adjustTextarea",
value: function adjustTextarea(selector, width, height) {
var lineHeight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1.2;
var paddingX = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.5;
var paddingY = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0.5;
var nowrap = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
var doc = new DOMParser().parseFromString(this.svg, 'text/html');
var textElement = doc.querySelector(selector);
if (!textElement) {
return this;
}
var textSvg = textElement.outerHTML; // SVGElement doesn't have innerText
// @see https://developer.mozilla.org/en-US/docs/Web/API/SVGElement
var textContent = textElement.innerHTML.replace(new RegExp('^<tspan[^>]*>([\\S|\\s]*)</tspan>$'), '$1');
var adjustedTextSvg = Object(_adjust_textarea__WEBPACK_IMPORTED_MODULE_1__["default"])(textSvg, textContent, width, height, lineHeight, paddingX, paddingY, nowrap);
this.replace(textSvg, adjustedTextSvg);
return this;
}
}, {
key: "apply",
value: function apply() {
var _this = this;
if (this.svg !== document.querySelector(this.selector).outerHTML) {
document.querySelector(this.selector).outerHTML = this.svg;
}
this.adjustTextQueries.forEach(function (query) {
var _$svg$getAttribute$sp, _$svg$getAttribute;
// if viewBox is specified, Element.clientWidth and Element.getBoundingClientRect() return different values
// clientWidth: ???
// getBoundingClientRect(): pure pixel value
// so this library uses getBoundingClientRect() and pre-calculated ratio to specify the width of some elements
var $svg = document.querySelector(_this.selector);
var viewBoxWidth = (_$svg$getAttribute$sp = (_$svg$getAttribute = $svg.getAttribute('viewBox')) === null || _$svg$getAttribute === void 0 ? void 0 : _$svg$getAttribute.split(/ +/)[2]) !== null && _$svg$getAttribute$sp !== void 0 ? _$svg$getAttribute$sp : null;
var paperPixelRatio = viewBoxWidth ? parseFloat(viewBoxWidth) / $svg.getBoundingClientRect().width : 1;
Object(_adjust_text__WEBPACK_IMPORTED_MODULE_0__["default"])(paperPixelRatio, query.selector, {
textLength: query.textLength,
'text-anchor': query.textAnchor
});
}); // initialize
this.svg = document.querySelector(this.selector).outerHTML;
this.adjustTextQueries = [];
}
}]);
return SvgPaper;
}();
/***/ }),
/***/ "./js/src/utility/fix-text-transform.js":
/*!**********************************************!*\
!*** ./js/src/utility/fix-text-transform.js ***!
\**********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = (function (textSvg) {
var fixedTextSvg = textSvg; // if <text> doesn't have transform="translate(x y)", just add it with (0 0)
if (!fixedTextSvg.match(/<text [^>]*transform="[^"]*"[^>]*>/)) {
fixedTextSvg = fixedTextSvg.replace(new RegExp('<text([^>]*)>'), '<text$1 transform="translate(0 0)">');
} // if <tspan> doesn't have x="" y="", just add it with x="0" y="0"
if (!fixedTextSvg.match(/<tspan [^>]*x="[^"]*"[^>]*>/)) {
fixedTextSvg = fixedTextSvg.replace(new RegExp('<tspan([^>]*)>'), '<tspan$1 x="0">');
}
if (!fixedTextSvg.match(/<tspan [^>]*y="[^"]*"[^>]*>/)) {
fixedTextSvg = fixedTextSvg.replace(new RegExp('<tspan([^>]*)>'), '<tspan$1 y="0">');
} // copy x from <tspan x=""> and add it to <text transform="translate(x y)">
fixedTextSvg = fixedTextSvg.replace(new RegExp('<text([\\s\\S]+)transform="translate\\((\\S+)\\s+(.+)\\)"([^>]*)>\s*<tspan([^>]+)x="([^"]+)"'), '<text$1transform="translate(###$2+$6### $3)"$4><tspan$5x="0"');
var expression1 = fixedTextSvg.match(new RegExp('<text[\\s\\S]+transform="translate\\(###(.+)###.+\\)"'))[1];
var x = expression1.match(/\d+\+\d+/) ? eval(expression1) : 0;
fixedTextSvg = fixedTextSvg.replace(new RegExp('<text([\\s\\S]+)transform="translate\\(###.+###(.+)\\)"'), "<text$1transform=\"translate(".concat(x, "$2)\"")); // copy y from <tspan y=""> and add it to <text transform="translate(x y)">
fixedTextSvg = fixedTextSvg.replace(new RegExp('<text([\\s\\S]+)transform="translate\\((.+)\\s+(\\S+)\\)"([^>]*)>\s*<tspan([^>]+)y="([^"]+)"'), '<text$1transform="translate($2 ###$3+$6###)"$4><tspan$5y="0"');
var expression2 = fixedTextSvg.match(new RegExp('<text[\\s\\S]+transform="translate\\(.+###(.+)###\\)"'))[1];
var y = expression2.match(/\d+\+\d+/) ? eval(expression2) : 0;
fixedTextSvg = fixedTextSvg.replace(new RegExp('<text([\\s\\S]+)transform="translate\\((.+)###.+###\\)"'), "<text$1transform=\"translate($2".concat(y, ")\""));
return fixedTextSvg;
});
/***/ }),
/***/ "./js/src/utility/split-string-by-width.js":
/*!*************************************************!*\
!*** ./js/src/utility/split-string-by-width.js ***!
\*************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _sub_string_by_width__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sub-string-by-width */ "./js/src/utility/sub-string-by-width.js");
/* harmony default export */ __webpack_exports__["default"] = (function (string, width) {
var splits = [];
while (true) {
var split = Object(_sub_string_by_width__WEBPACK_IMPORTED_MODULE_0__["default"])(string, 0, width);
splits.push(split);
string = string.replace(split, '');
if (!string) {
break;
}
}
return splits;
});
/***/ }),
/***/ "./js/src/utility/sub-string-by-width.js":
/*!***********************************************!*\
!*** ./js/src/utility/sub-string-by-width.js ***!
\***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var string_width__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! string-width */ "./node_modules/string-width/index.js");
/* harmony import */ var string_width__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(string_width__WEBPACK_IMPORTED_MODULE_0__);
/* harmony default export */ __webpack_exports__["default"] = (function (string, start, width) {
var currentWidth = 0;
var subString = '';
for (var i = start;; i++) {
var _char = string.substr(i, 1);
currentWidth += string_width__WEBPACK_IMPORTED_MODULE_0___default()(_char);
if (currentWidth <= width && i <= string.length) {
subString += _char;
}
if (currentWidth >= width || i >= string.length) {
return subString;
}
}
});
/***/ }),
/***/ "./node_modules/emoji-regex/index.js":
/*!*******************************************!*\
!*** ./node_modules/emoji-regex/index.js ***!
\*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
module.exports = function () {
// https://mths.be/emoji
return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
};
/***/ }),
/***/ "./node_modules/string-width/index.js":
/*!********************************************!*\
!*** ./node_modules/string-width/index.js ***!
\********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var stripAnsi = __webpack_require__(/*! strip-ansi */ "./node_modules/strip-ansi/index.js");
var isFullwidthCodePoint = __webpack_require__(/*! is-fullwidth-code-point */ "./node_modules/string-width/node_modules/is-fullwidth-code-point/index.js");
var emojiRegex = __webpack_require__(/*! emoji-regex */ "./node_modules/emoji-regex/index.js");
var stringWidth = function stringWidth(string) {
if (typeof string !== 'string' || string.length === 0) {
return 0;
}
string = stripAnsi(string);
if (string.length === 0) {
return 0;
}
string = string.replace(emojiRegex(), ' ');
var width = 0;
for (var i = 0; i < string.length; i++) {
var code = string.codePointAt(i); // Ignore control characters
if (code <= 0x1F || code >= 0x7F && code <= 0x9F) {
continue;
} // Ignore combining characters
if (code >= 0x300 && code <= 0x36F) {
continue;
} // Surrogates
if (code > 0xFFFF) {
i++;
}
width += isFullwidthCodePoint(code) ? 2 : 1;
}
return width;
};
module.exports = stringWidth; // TODO: remove this in the next major version
module.exports["default"] = stringWidth;
/***/ }),
/***/ "./node_modules/string-width/node_modules/is-fullwidth-code-point/index.js":
/*!*********************************************************************************!*\
!*** ./node_modules/string-width/node_modules/is-fullwidth-code-point/index.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* eslint-disable yoda */
var isFullwidthCodePoint = function isFullwidthCodePoint(codePoint) {
if (Number.isNaN(codePoint)) {
return false;
} // Code points are derived from:
// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt
if (codePoint >= 0x1100 && (codePoint <= 0x115F || // Hangul Jamo
codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET
codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET
// CJK Radicals Supplement .. Enclosed CJK Letters and Months
0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F || // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A
0x3250 <= codePoint && codePoint <= 0x4DBF || // CJK Unified Ideographs .. Yi Radicals
0x4E00 <= codePoint && codePoint <= 0xA4C6 || // Hangul Jamo Extended-A
0xA960 <= codePoint && codePoint <= 0xA97C || // Hangul Syllables
0xAC00 <= codePoint && codePoint <= 0xD7A3 || // CJK Compatibility Ideographs
0xF900 <= codePoint && codePoint <= 0xFAFF || // Vertical Forms
0xFE10 <= codePoint && codePoint <= 0xFE19 || // CJK Compatibility Forms .. Small Form Variants
0xFE30 <= codePoint && codePoint <= 0xFE6B || // Halfwidth and Fullwidth Forms
0xFF01 <= codePoint && codePoint <= 0xFF60 || 0xFFE0 <= codePoint && codePoint <= 0xFFE6 || // Kana Supplement
0x1B000 <= codePoint && codePoint <= 0x1B001 || // Enclosed Ideographic Supplement
0x1F200 <= codePoint && codePoint <= 0x1F251 || // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane
0x20000 <= codePoint && codePoint <= 0x3FFFD)) {
return true;
}
return false;
};
module.exports = isFullwidthCodePoint;
module.exports["default"] = isFullwidthCodePoint;
/***/ }),
/***/ "./node_modules/strip-ansi/index.js":
/*!******************************************!*\
!*** ./node_modules/strip-ansi/index.js ***!
\******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var ansiRegex = __webpack_require__(/*! ansi-regex */ "./node_modules/strip-ansi/node_modules/ansi-regex/index.js");
module.exports = function (string) {
return typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
};
/***/ }),
/***/ "./node_modules/strip-ansi/node_modules/ansi-regex/index.js":
/*!******************************************************************!*\
!*** ./node_modules/strip-ansi/node_modules/ansi-regex/index.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
module.exports = function () {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$onlyFirst = _ref.onlyFirst,
onlyFirst = _ref$onlyFirst === void 0 ? false : _ref$onlyFirst;
var pattern = ["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'].join('|');
return new RegExp(pattern, onlyFirst ? undefined : 'g');
};
/***/ }),
/***/ "./scss/svg-paper.scss":
/*!*****************************!*\
!*** ./scss/svg-paper.scss ***!
\*****************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin
/***/ }),
/***/ 0:
/*!*********************************************************!*\
!*** multi ./scss/svg-paper.scss ./js/src/svg-paper.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(/*! ./scss/svg-paper.scss */"./scss/svg-paper.scss");
module.exports = __webpack_require__(/*! ./js/src/svg-paper.js */"./js/src/svg-paper.js");
/***/ })
/******/ })["default"];
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdmdQYXBlci93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3ZnUGFwZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3ZnUGFwZXIvLi9qcy9zcmMvYWRqdXN0LXRleHQuanMiLCJ3ZWJwYWNrOi8vU3ZnUGFwZXIvLi9qcy9zcmMvYWRqdXN0LXRleHRhcmVhLmpzIiwid2VicGFjazovL1N2Z1BhcGVyLy4vanMvc3JjL3N2Zy1wYXBlci5qcyIsIndlYnBhY2s6Ly9TdmdQYXBlci8uL2pzL3NyYy91dGlsaXR5L2ZpeC10ZXh0LXRyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9TdmdQYXBlci8uL2pzL3NyYy91dGlsaXR5L3NwbGl0LXN0cmluZy1ieS13aWR0aC5qcyIsIndlYnBhY2s6Ly9TdmdQYXBlci8uL2pzL3NyYy91dGlsaXR5L3N1Yi1zdHJpbmctYnktd2lkdGguanMiLCJ3ZWJwYWNrOi8vU3ZnUGFwZXIvLi9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vU3ZnUGFwZXIvLi9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoL2luZGV4LmpzIiwid2VicGFjazovL1N2Z1BhcGVyLy4vbm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC9ub2RlX21vZHVsZXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vU3ZnUGFwZXIvLi9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaS9pbmRleC5qcyIsIndlYnBhY2s6Ly9TdmdQYXBlci8uL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4L2luZGV4LmpzIiwid2VicGFjazovL1N2Z1BhcGVyLy4vc2Nzcy9zdmctcGFwZXIuc2Nzcz9mOWQyIl0sIm5hbWVzIjpbInBhcGVyUGl4ZWxSYXRpbyIsInNlbGVjdG9yIiwiY29uZmlnIiwiJHRoaXMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJzdHlsZSIsImRpc3BsYXkiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsInRleHRMZW5ndGgiLCJzZXRBdHRyaWJ1dGUiLCJ3IiwicGFyc2VGbG9hdCIsIngiLCJ5IiwiZ2V0QXR0cmlidXRlIiwibWF0Y2giLCJ0ZXh0U3ZnIiwidGV4dENvbnRlbnQiLCJoZWlnaHQiLCJsaW5lSGVpZ2h0IiwicGFkZGluZ1giLCJwYWRkaW5nWSIsIm5vd3JhcCIsIlJlZ0V4cCIsImNvbnNvbGUiLCJlcnJvciIsIm9yaWdpbmFsRm9udFNpemUiLCJwYXJzZUludCIsImZvbnRTaXplIiwicGh5c2ljYWxMaW5lcyIsInNwbGl0IiwibG9naWNhbExpbmVzIiwibWF4Um93cyIsIk1hdGgiLCJmbG9vciIsIm1heENvbHVtbnMiLCJmb3JFYWNoIiwibGluZSIsImNvbmNhdCIsInNwbGl0U3RyaW5nQnlXaWR0aCIsImxlbmd0aCIsImFkanVzdFkiLCJhZGp1c3RlZFRleHRTdmciLCJmaXhUZXh0VHJhbnNmb3JtIiwicmVwbGFjZSIsInRzcGFuIiwiaSIsIlN2Z1BhcGVyIiwiRXJyb3IiLCJzdmciLCJvdXRlckhUTUwiLCJhZGp1c3RUZXh0UXVlcmllcyIsInNlYXJjaCIsInJlcGxhY2VtZW50Iiwic291cmNlIiwiZmxhZ3MiLCJ1bmRlZmluZWQiLCJ0ZXh0QW5jaG9yIiwicHVzaCIsImRvYyIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsInRleHRFbGVtZW50IiwiaW5uZXJIVE1MIiwiYWRqdXN0VGV4dGFyZWEiLCJxdWVyeSIsIiRzdmciLCJ2aWV3Qm94V2lkdGgiLCJhZGp1c3RUZXh0IiwiZml4ZWRUZXh0U3ZnIiwiZXhwcmVzc2lvbjEiLCJldmFsIiwiZXhwcmVzc2lvbjIiLCJzdHJpbmciLCJzcGxpdHMiLCJzdWJTdHJpbmdCeVdpZHRoIiwic3RhcnQiLCJjdXJyZW50V2lkdGgiLCJzdWJTdHJpbmciLCJjaGFyIiwic3Vic3RyIiwic3RyaW5nV2lkdGgiLCJtb2R1bGUiLCJleHBvcnRzIiwic3RyaXBBbnNpIiwicmVxdWlyZSIsImlzRnVsbHdpZHRoQ29kZVBvaW50IiwiZW1vamlSZWdleCIsImNvZGUiLCJjb2RlUG9pbnRBdCIsImNvZGVQb2ludCIsIk51bWJlciIsImlzTmFOIiwiYW5zaVJlZ2V4Iiwib25seUZpcnN0IiwicGF0dGVybiIsImpvaW4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7O0FBRWUseUVBQUNBLGVBQUQsRUFBa0JDLFFBQWxCLEVBQTRCQyxNQUE1QixFQUF1QztBQUNwRCxNQUFNQyxLQUFLLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QkosUUFBdkIsQ0FBZDs7QUFFQSxNQUFJLENBQUNFLEtBQUwsRUFBWTtBQUNWO0FBQ0QsR0FMbUQsQ0FPcEQ7OztBQUNBLE1B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