Wikipedysta:Beno/wp sk.js

Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
  • Opera: Naciśnij klawisze Ctrl+F5.
// <nowiki>
mw.hook('userjs.wp_sk.ready').add(function (wp_sk)
{
	// wlasne [[WP:SK]]
	var nux_cleaner = wp_sk.cleaner;
	wp_sk.extension += "+[[WP:SK/Bn|Bn]]";

	wp_sk.cleaner = function (str)
	{
		str = str.replace(/border-style: *([a-z]+); *border-width: *([0-9]px); *border-color: *#/gi, 'border:$1 $2 #');
		str = str.replace(/(\{{2}(?:Przypisy|Uwagi))\|(\}{2})/gi, '$1$2');
		str = str.replace(/\n?\{{2}Przypisy/gi, '\n{{Przypisy');
		str = str.replace(/(\n== Przypisy ==)((?:\n.*){1,10})(\n\{{2}Przypisy)[\n ]*(\}{2})/gi, '$1$3$4$2');
		str = str.replace(/(\}\})(\{\{Odcinek)/gi, '$1\n$2');
		str = str.replace(/([ #'](?:seria|sezon) +\d+:? +\(?\d{4})-(\d{4}\)?)/gi, '$1–$2');
		str = str.replace(/(\n *\| *sezon *= *\d+) *(\| *odcinek *= *\d+)/gi, '$1\n$2');
		str = str.replace(/<!-- Tytuł wygenerowany przez bota -->/gi, '');
		str = str.replace(/<!-- Bot generated title -->/gi, '');
		str = str.replace(/(<ref(?: (?:group|name)[^\/>]+)?>)\s+/gi, '$1');
		str = str.replace(/\n*==+\s*uwagi\s*==+\n*<references group="?uwaga"?\s*\/>/gi, '\n\n== Uwagi ==\n{{Uwagi}}');
		str = str.replace(/((?:\[{2}|\|)UTC-)(\d:\d\d\]{2})/gi, '$10$2');
		str = str.replace(/<!-- (POPRAW|SPRAWDŹ) TO MIEJSCE! [^>]*-->/g, '');

		str = str.replace(/\u00A0{8}/g, '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;');
		str = str.replace(/[\u00A0\u2009]/g, ' ');

		//dekodowanie niektórych sekwencji specjalnych HTML
		str = str.replace(/&auml;/g, 'ä');
		str = str.replace(/&ouml;/g, 'ö');
		str = str.replace(/&uuml;/g, 'ü');
		str = str.replace(/&Auml;/g, 'Ä');
		str = str.replace(/&Ouml;/g, 'Ö');
		str = str.replace(/&Uuml;/g, 'Ü');
		str = str.replace(/&szlig;/g, 'ß');
		str = str.replace(/&Aacute;/g, 'Á');
		str = str.replace(/&aacute;/g, 'á');
		str = str.replace(/&Acirc;/g, 'Â');
		str = str.replace(/&acirc;/g, 'â');
		str = str.replace(/&AElig;/g, 'Æ');
		str = str.replace(/&aelig;/g, 'æ');
		str = str.replace(/&Agrave;/g, 'À');
		str = str.replace(/&agrave;/g, 'à');
		str = str.replace(/&Aring;/g, 'Å');
		str = str.replace(/&aring;/g, 'å');
		str = str.replace(/&Eacute;/g, 'É');
		str = str.replace(/&eacute;/g, 'é');
		str = str.replace(/&Egrave;/g, 'È');
		str = str.replace(/&egrave;/g, 'è');
		str = str.replace(/&Ccedil;/g, 'Ç');
		str = str.replace(/&ccedil;/g, 'ç');
		str = str.replace(/&Ntilde;/g, 'Ñ');
		str = str.replace(/&ntilde;/g, 'ñ');
		str = str.replace(/&hellip;/g, '…');
		str = str.replace(/&quot;/g, '"');
		str = str.replace(/&minus;/g, '−');
		str = str.replace(/&oline;/g, '‾');
		str = str.replace(/&cent;/g, '¢');
		str = str.replace(/&pound;/g, '£');
		str = str.replace(/&euro;/g, '€');
		str = str.replace(/&sect;/g, '§');
		str = str.replace(/&lsquo;/g, '‘');
		str = str.replace(/&rsquo;/g, '’');
		str = str.replace(/&middot;/g, '·');
		str = str.replace(/&bull;/g, '•');
		str = str.replace(/&times;/g, '×');
		str = str.replace(/&copy;/g, '©');
		str = str.replace(/&reg;/g, '®');
		str = str.replace(/&trade;/g, '™');
		str = str.replace(/&iquest;/g, '¿');
		str = str.replace(/&iexcl;/g, '¡');
		str = str.replace(/&crarr;/g, '↵');
		str = str.replace(/&harr;/g, '↔');
		str = str.replace(/&dArr;/g, '⇓');
		str = str.replace(/&uArr;/g, '⇑');
		str = str.replace(/&rArr;/g, '⇒');
		str = str.replace(/&lArr;/g, '⇐');
		str = str.replace(/&hArr;/g, '⇔');
		str = str.replace(/&mdash;/g, '—');
		str = str.replace(/&ndash;/g, '–');
		str = str.replace(/&isin;/g, '∈');
		str = str.replace(/&notin;/g, '∉');
		str = str.replace(/&empty;/g, '∅');
		str = str.replace(/&sub;/g, '⊂');
		str = str.replace(/&sube;/g, '⊆');
		str = str.replace(/&nsub;/g, '⊄');
		str = str.replace(/&not;/g, '¬');
		str = str.replace(/&sim;/g, '∼');
		str = str.replace(/&laquo;/g, '«');
		str = str.replace(/&raquo;/g, '»');

		str = str.replace(/&alpha;/g, 'α');
		str = str.replace(/&beta;/g, 'β');
		str = str.replace(/&gamma;/g, 'γ');
		str = str.replace(/&delta;/g, 'δ');
		str = str.replace(/&epsilon;/g, 'ε');
		str = str.replace(/&zeta;/g, 'ζ');
		str = str.replace(/&eta;/g, 'η');
		str = str.replace(/&theta;/g, 'θ');
		str = str.replace(/&iota;/g, 'ι');
		str = str.replace(/&kappa;/g, 'κ');
		str = str.replace(/&lambda;/g, 'λ');
		str = str.replace(/&mu;/g, 'μ');
		str = str.replace(/&nu;/g, 'ν');
		str = str.replace(/&xi;/g, 'ξ');
		str = str.replace(/&omicron;/g, 'ο');
		str = str.replace(/&pi;/g, 'π');
		str = str.replace(/&rho;/g, 'ρ');
		str = str.replace(/&sigma;/g, 'σ');
		str = str.replace(/&tau;/g, 'τ');
		str = str.replace(/&upsilon;/g, 'υ');
		str = str.replace(/&phi;/g, 'φ');
		str = str.replace(/&chi;/g, 'χ');
		str = str.replace(/&psi;/g, 'ψ');
		str = str.replace(/&omega;/g, 'ω');
		str = str.replace(/&Alpha;/g, 'Α');
		str = str.replace(/&Beta;/g, 'Β');
		str = str.replace(/&Gamma;/g, 'Γ');
		str = str.replace(/&Delta;/g, 'Δ');
		str = str.replace(/&Epsilon;/g, 'Ε');
		str = str.replace(/&Zeta;/g, 'Ζ');
		str = str.replace(/&Eta;/g, 'Η');
		str = str.replace(/&Theta;/g, 'Θ');
		str = str.replace(/&Iota;/g, 'Ι');
		str = str.replace(/&Kappa;/g, 'Κ');
		str = str.replace(/&Lambda;/g, 'Λ');
		str = str.replace(/&Mu;/g, 'Μ');
		str = str.replace(/&Nu;/g, 'Ν');
		str = str.replace(/&Xi;/g, 'Ξ');
		str = str.replace(/&Omicron;/g, 'Ο');
		str = str.replace(/&Pi;/g, 'Π');
		str = str.replace(/&Rho;/g, 'Ρ');
		str = str.replace(/&Sigma;/g, 'Σ');
		str = str.replace(/&Tau;/g, 'Τ');
		str = str.replace(/&Upsilon;/g, 'Υ');
		str = str.replace(/&Phi;/g, 'Φ');
		str = str.replace(/&Chi;/g, 'Χ');
		str = str.replace(/&Psi;/g, 'Ψ');
		str = str.replace(/&Omega;/g, 'Ω');

		str = str.replace(/𝑐/g, '<math>c<\/math>');   // 01D450
		str = str.replace(/𝑙/g, '<math>l<\/math>');   // 01D459
		str = str.replace(/𝑚/g, '<math>m<\/math>');   // 01D45A
		str = str.replace(/𝑛/g, '<math>n<\/math>');   // 01D45B
		str = str.replace(/𝑟/g, '<math>r<\/math>');   // 01D45F
		str = str.replace(/𝑠/g, '<math>s<\/math>');   // 01D460
		str = str.replace(/𝛼/g, '<math>\\alpha<\/math>');   // 01D6FC
		str = str.replace(/𝜑/g, '<math>\\phi<\/math>');   // 01D711
		str = str.replace(/𝜃/g, '<math>\\theta<\/math>');   // 01D703
		str = str.replace(/Ω/g, 'Ω');   // 2126 OHM SIGN        na 03A9 GREEK CAPITAL LETTER OMEGA
		str = str.replace(/∆/g, 'Δ');   // 2206 INCREMENT       na 0394 GREEK CAPITAL LETTER DELTA
		str = str.replace(/∏/g, 'Π');   // 220F N-ARY PRODUCT   na 03A0 GREEK CAPITAL LETTER PI
		str = str.replace(/∑/g, 'Σ');   // 2211 N-ARY SUMMATION na 03A3 GREEK CAPITAL LETTER SIGMA
		str = str.replace(/fi/g, 'fi');   // ligatura fi

		str = str.replace(/\n\uFF08/g, '\n(');   // FULLWIDTH LEFT PARENTHESIS
		str = str.replace(/\uFF08/g, ' (');      // -"-
		str = str.replace(/\uFF09/g, ') ');      // FULLWIDTH RIGHT PARENTHESIS

		// dodaje wolne linie przed naglowkami
		str = str.replace(/\n==/g, '\n\n==');

		str = str.replace(/(\[{2}[^\n|\]]+\|)/gi, function(a, fil) {
		fil = fil.replace(/ +(\|)/g, '$1');
		fil = fil.replace(/_/g, ' ');
		return fil;});

		str = str.replace(/(\[{2})([^\]|]+)([-–])([^\]|]+)(\|\2)[-–](\4)/gi, '$1$2$3$4$5$3$6');
		str = str.replace(/(\[{2})([^\]|]+)([^\]|]+)(\|\2) (\3)/g, '$1$2$3$4$5');

		str = str.replace(/\s*(<math) +display[ ="]+block[ ="]+(>.+?<\/math>)\s*/g, '\n: $1$2\n\n');

		str = str.replace(/(<\/math>)((?: |&nbsp;)*)([,;:])([^,:])/g, '$3$1$2$4');
		str = str.replace(/(<\/math>)((?: |&nbsp;)*)(\.{3}|\.)([^.])/g, '$3$1$2$4');
		str = str.replace(/(\x3Cmath[^>]*\x3E[\s\S]+?\x3C\/math\x3E)/gi, function(b, fil) {

		fil = fil.replace(/(\\(?:overline|underline|widehat)) *\{(\\[a-z]+)\}([-+= \\/<([{])/g, '$1$2$3');

		fil = fil.replace(/\\left/g, '\x01');
		fil = fil.replace(/\\right/g, '\x02');
		fil = fil.replace(/\x01 *\.([^\x01\x02]+)\x02 *\./g, '$1');
		fil = fil.replace(/\x02/g, '\\right');
		fil = fil.replace(/\x01/g, '\\left');

		fil = fil.replace(/(<math[^>]*>\n*)(\\qq?uad)/g, '$1{}$2');
		fil = fil.replace(/(<math[^>]*>\n*)(?:[ ~]|\\(?:displaystyle|[ ,;!]))+/g, '$1');
		fil = fil.replace(/(<math[^>]*>\n)\n+/g, '$1');
		fil = fil.replace(/([^\\]) +(<\/math>)/g, '$1$2');
		fil = fil.replace(/([^\\]\\qq?uad)(<\/math>)/g, '$1{}$2');
		fil = fil.replace(/([^\\])(?:[ ~]|\\[ ,;!])+([,;:.]*<\/math>)/g, '$1$2 ');
		fil = fil.replace(/([^\\])(?:[ ~]|\\(?:displaystyle|[ ,;!]))+([\n,;:.]*<\/math>)/g, '$1$2');
		fil = fil.replace(/([^\\])(?:[ ~]|\\(?:displaystyle|[ ,;!]))+([\n,;:.]*<\/math>)/g, '$1$2');
		fil = fil.replace(/([^\\]) *([_^]) */g, '$1$2');
		fil = fil.replace(/([_^])\{(\\math(?:bb|bf|cal|frak|it|rm|sf|tt) +[\dA-Za-z]|\\[A-Za-z]+ *|[^{}])\}(?![A-Za-z\d])/g, '$1$2');
		fil = fil.replace(/([_^])\{(\\math(?:bb|bf|cal|frak|it|rm|sf|tt) +[\dA-Za-z]|\\[A-Za-z]+ *|[^{}])\}(?=[A-Za-z\d])/g, '$1$2 ');
		fil = fil.replace(/\\begin *\{matrix\} *\\frac *(\{(?:\{[^{}]*\}|[^{}])*\}|\d) *(\{(?:\{[^{}]*\}|[^{}])*\}|\d) *\\end\{matrix\}/g, '\\tfrac$1$2');

		fil = fil.replace(/(\\\\\s*\\\\\s*\\)e(nd[^a-z])/g, '$1\x01$2');
		fil = fil.replace(/\\\\(\s*\\end\s*\{)/g, '$1');
		fil = fil.replace(/[\s&]*&(\s*\\end\s*\{)/g, '$1');
		fil = fil.replace(/\x01/g, 'e');

		fil = fil.replace(/\\\\/g, '\x01');
		fil = fil.replace(/\\{/g, '\x02');
		fil = fil.replace(/\\}/g, '\x03');
		fil = fil.replace(/\\ /g, '\x04');

		fil = fil.replace(/ *(?:\\,|~|\x04|\\;) *([-+=]|\\[gl]eq?(?:slant)?) *(?:\\,|~|\x04|\\;) */g, ' $1 ');

		fil = fil.replace(/\\(?=over[a-z])/g, '\x05');
		fil = fil.replace(/\{ *(\{ *((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?) *\}|((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?)) *\\over *(\{ *((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?) *\}|((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?)) *\}/g, '\\frac\{$2$3\}\{$5$6\}');
		fil = fil.replace(/\{ *(\{ *((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?) *\}|((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?)) *\\over *(\{ *((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?) *\}|((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?)) *\}/g, '\\frac\{$2$3\}\{$5$6\}');
		fil = fil.replace(/\{ *(\{ *((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?) *\}|((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?)) *\\over *(\{ *((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?) *\}|((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?)) *\}/g, '\\frac\{$2$3\}\{$5$6\}');
		fil = fil.replace(/\{ *(\{ *((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?) *\}|((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?)) *\\over *(\{ *((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?) *\}|((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?)) *\}/g, '\\frac\{$2$3\}\{$5$6\}');
		fil = fil.replace(/\x05/g, '\\');

		fil = fil.replace(/\{ *(\{(?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?\}) *\}/g, '$1');

		fil = fil.replace(/(<math[^>]*>) *\{([^{}]+\\choose[^{}]+)\}([ ,.:;]*<\/math>)/g, '$1\x1e$2\x1f$3');
		fil = fil.replace(/(<math[^>]*>)\{ *((?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?) *\}([ ,.:;]*<\/math>)/g, '$1$2$3');
		fil = fil.replace(/\x1f/g, '}');
		fil = fil.replace(/\x1e/g, '{');
		fil = fil.replace(/(<math[^>]*>)([^{}]+\\choose[^{}]+)((?:[,.;]|\{:\})<\/math>)/g, '$1{$2}$3');

		fil = fil.replace(/(\\sqrt(?:\[.+?\])?) *\{ *(\\t?frac *\{(?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?\} *\{(?:\{(?:\{[^{}]+\}|[^{}])+\}|\{[^{}]+\}|[^{}])+?\}) *\}/g, '$1$2');
		fil = fil.replace(/\{ *\\(bf|cal|it|rm) +((?:\{[^{}]*\}|[^{}])+\})/g, '\\math$1{$2');
		fil = fil.replace(/\\left *([([]|\x02) *([^\s]) *\\right *([)\]]|\x03)/g, '$1$2$3');
		fil = fil.replace(/(\\[Bb]igg?)[lr]([^A-Za-z])/g, '$1$2');
		fil = fil.replace(/(\\[,;]|\x04){4}/g, '\\quad ');
		fil = fil.replace(/\\quad *\\quad/g, '\\qquad');
		fil = fil.replace(/(\d),\\!(\d)/g, '$1{,}$2');
		fil = fil.replace(/= - */g, '= -');
		fil = fil.replace(/(\\t?frac) *(\{[^{}]{1,20}\}) *(\{[^{}]{1,20}\})/g, '$1$2$3');
		fil = fil.replace(/(\\begin *\{array\} *\{[lcr]*?)([lcr])\2+(\})/g, '$1$2$3');
		fil = fil.replace(/(\\inf)in([^a-z])/g, '$1ty$2');
		fil = fil.replace(/(\\)(?:[hm]box|mathrm|operatorname|text(?:rm)?) *\{ *(arc(?:co[st]|csc|sec|sin|tan)|cosh?|coth?|csc|sec|sinh?|tanh?|arg|deg|det|dim|exp|hom|inf|ker|lg|ln|log|max|min|sgn|sup) *\} *([A-Za-z])/g, '$1$2 $3');
		fil = fil.replace(/(\\)(?:[hm]box|mathrm|operatorname|text(?:rm)?) *\{ *(arc(?:co[st]|csc|sec|sin|tan)|cosh?|coth?|csc|sec|sinh?|tanh?|arg|deg|det|dim|exp|hom|inf|ker|lg|ln|log|max|min|sgn|sup) *\} *([^A-Za-z])/g, '$1$2$3');
		fil = fil.replace(/\\tan([^a-z])/g, '\\operatorname\{tg\}$1');
		fil = fil.replace(/\\cot([^a-z])/g, '\\operatorname\{ctg\}$1');
		fil = fil.replace(/\\csc([^a-z])/g, '\\operatorname\{cosec\}$1');
		fil = fil.replace(/\\arctan([^a-z])/g, '\\operatorname\{arctg\}$1');
		fil = fil.replace(/\\arccot([^a-z])/g, '\\operatorname\{arcctg\}$1');
		fil = fil.replace(/\\arccsc([^a-z])/g, '\\operatorname\{arccosec\}$1');
		fil = fil.replace(/\\tanh([^a-z])/g, '\\operatorname\{tgh\}$1');
		fil = fil.replace(/\\coth([^a-z])/g, '\\operatorname\{ctgh\}$1');
		fil = fil.replace(/\\operatorname *\{csch\}([^a-z])/g, '\\operatorname\{cosech\}$1');
		fil = fil.replace(/ *\\colon(?=<\/math>)/g, '{:}');
		fil = fil.replace(/(\\[gl]e)q?([^A-Za-z])/g, '$1qslant$2');
		fil = fil.replace(/\\bold([^A-Za-z])/g, '\\mathbf$1');
		fil = fil.replace(/\\rightarrow([^A-Za-z])/g, '\\to$1');
		fil = fil.replace(/\\not *\\in/g, '\\notin');
		fil = fil.replace(/\\not *=/g, '\\neq ');
		fil = fil.replace(/\\Complex([^A-Za-z])/g, '\\mathbb{C}$1');
		fil = fil.replace(/\\([CHNQRZ])([^A-Za-z])/g, '\\mathbb{$1}$2');
		fil = fil.replace(/\^\\prime/g, '\'');
		fil = fil.replace(/(\\[l]?dots)\.([^.])/g, '$1 $2');
		fil = fil.replace(/(, *\\)[cl]?(dots)/g, '$1$2');
		fil = fil.replace(/(\\)[cl]?(dots)( *)([,;])/g, '$1$2$4$3');
		fil = fil.replace(/(\\cdot *\\)c?(dots)/g, '$1l$2');
		fil = fil.replace(/(\\)c?(dots *\\cdot[^s])/g, '$1l$2');
		fil = fil.replace(/((?:\\(?:cdot|c[au]p|[gl]eqslant|oplus|o?times|uparrow|vee|wedge)|[-+=<>]) *\\)c?dots/g, '$1ldots');
		fil = fil.replace(/\x04/g, '\\ ');
		fil = fil.replace(/\x03/g, '\\}');
		fil = fil.replace(/\x02/g, '\\{');
		fil = fil.replace(/\x01/g, '\\\\');
		fil = fil.replace(/_/g, 'foosEpulKU');
		return fil;});
		// dekodowanie nazw szablonow
		str = str.replace(/\{\{([^\|\}]*)(\||\}\})/g, wp_sk.mm_rTempldecode);
		str = str.replace(/foosEpulKU/g, '_');

		str = str.replace(/(\n *\|.+?= ) *(?=\n)/g, '$1foosEpulKX');
		// usuwam spacje na końcach linii
		str = str.replace(/[ \t]+\n/g, '\n');
		// oryginalny cleaner
		str = nux_cleaner.call(wp_sk, str);
		str = str.replace(/foosEpulKX/g, '');

		// niepotrzebna kropka kropka z liczebników w datach
		str = str.replace(/(\d)\. *(stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)/g, '$1 $2');

		// usuwam spacje przy BR'ach + poprawna skladnia
		str = str.replace(/ *<\/?br *\/? *> */gi, '<br />');

		// usuwam BR'y na końcach list i akapitów
		str = str.replace(/([^=])(?: |<br \/>)+(\n[\n#*:])/gi, '$1$2');

		// powyzej z malarza, odtad beno
		str = str.replace(/\n<ref name/gi, '\n@<ref name');
		str = str.replace(/\u251C/g, 'foosE1CpulKA');
		str = str.replace(/\u2552/g, 'foosE52pulKA');
		str = str.replace(/\u2553/g, 'foosE53pulKA');
		str = str.replace(/\u2554/g, 'foosE54pulKA');
		str = str.replace(/\u2555/g, 'foosE55pulKA');
		str = str.replace(/\u2556/g, 'foosE56pulKA');
		// 157
		str = str.replace(/^(.)/g, 'foopROteZa\n$1');
		str = str.replace(/(.)$/g, '$1\n\nfoopROteZb');
		str = str.replace(/\n?__(?:FORCETOC|ZESPISEM)__\n?/gi, '\n__ZESPISEM__\n');
		str = str.replace(/\n?__(?:NOTOC|BEZSPISU)__\n?/gi, '\n__BEZSPISU__\n');

		str = str.replace(/<(?:source|syntaxhighlight)/gi, '\u2553');
		str = str.replace(/<\/(?:source|syntaxhighlight)>/gi, '\u2554');
		str = str.replace(/(\u2553[^\u2554]*\u2554)/gi, function(a, fil) {
//		fil = fil.replace(/\n\t/g, '\n        ');
		fil = fil.replace(/\n\t/g, '\n    ');
		fil = fil.replace(/ /g, '\u251C');
		fil = fil.replace(/\'/g, 'foosEpulKC');
		fil = fil.replace(/\|/g, 'foosEpulKF');
		fil = fil.replace(/"/g, 'foosEpulKZ');
		return fil;});
		str = str.replace(/\u2554/g, '</syntaxhighlight>');
		str = str.replace(/\u2553/g, '<syntaxhighlight');
		str = str.replace(/(<math[^>]*>[\s\S]+?<\/math>)/gi, function(a, fil) {
		fil = fil.replace(/\\(left|right) +/g, '\\$1');
		fil = fil.replace(/\\right\./g, '\\righd');
		return fil;});
		str = str.replace(/(<math>)(\\i+nt\\limits *_\{)/g, '$1\{\}\\,$2');
		str = str.replace(/,(,<\/math>)/g, '$1');

		// 155
//		str = str.replace(/(\n(?:[^\n\t]{8})*[^\n\t]{7})\t/g, '$1 ');
//		str = str.replace(/(\n(?:[^\n\t]{8})*[^\n\t]{6})\t/g, '$1  ');
//		str = str.replace(/(\n(?:[^\n\t]{8})*[^\n\t]{5})\t/g, '$1   ');
//		str = str.replace(/(\n(?:[^\n\t]{8})*[^\n\t]{4})\t/g, '$1    ');
		str = str.replace(/(\n(?:[^\n\t]{4})*[^\n\t]{3})\t/g, '$1 ');
		str = str.replace(/(\n(?:[^\n\t]{4})*[^\n\t]{2})\t/g, '$1  ');
		str = str.replace(/(\n(?:[^\n\t]{4})*[^\n\t]{1})\t/g, '$1   ');
		str = str.replace(/\n\t[\t ]*/g, '\n');
		str = str.replace(/\t/g, '    ');

		str = str.replace(/(\n *\|[- ]*)(-->)/g, '$1\n$2');
		str = str.replace(/(\n)(\n+)(\}{2})(?=\n)/g, '$1$3$2');
		str = str.replace(/(\n+)(\n(?:<\/[^<>]+>)+\n)/g, '$2$1');
		str = str.replace(/\n+(<(?:center|centruj|gallery.*?)>)\n(?=\n)/g, '\n\n$1');
		str = str.replace(/\n+(<(?:center|centruj|gallery.*?)>)\n(?=\n)/g, '\n\n$1');
		str = str.replace(/\n(\n<\/(?:center|centruj|gallery)>)\n+/g, '$1\n\n');
		str = str.replace(/\n(\n<\/(?:center|centruj|gallery)>)\n+/g, '$1\n\n');
		str = str.replace(/(\{{2}odn\|)/gi, function (a, fil) {
		return fil.toLowerCase();});
		// 154
		str = str.replace(/(\]{2})<nowiki\/>([a-ząćęłńóśźż])/gi, '$1$2');
		str = str.replace(/(style *= *".*?background)-color(:)/gi, '$1$2');
		str = str.replace(/\xad/g, '');
		str = str.replace(/[\u0080-\u009F]/g, '');
		str = str.replace(/[\u00AD\u200A\u200B\u2060\u200D\uFEFF]/g, '');
		str = str.replace(/(\n[#*][ #*]*)↑ */g, '$1');
		str = str.replace(/<small>(\s*<ref.+?)<\/small>/gi, '$1');
		str = str.replace(/(\n={2}.+={2}\n)\n+/g, '$1');
		str = str.replace(/(\n *\|-)[-– |]+/g, '$1 ');
		str = str.replace(/(\{{2}cytuj *(grę komputerową|książkę|odcinek|pismo|stronę)?\s*(\|(\{{2}[^{}]*\}{2}|[^|}])*?)*?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/\n+/g, ' ');
		fil = fil.replace(/\|(\s*\|)+/g, '|');
		fil = fil.replace(/([,:])+( ?\|)/g, '$2');
		fil = fil.replace(/[| ]+(\}{2})/g, '$1');
		fil = fil.replace(/(\| *(?:(?:nazwisko|imię|autor|autor link)\d{1,2}|(?:adres )?rozdziału?|(?:(?:nazwisko|imię|autor)\d{0,2} r)|autor r *\d{0,2} *link) *= *)(?=\|)/g, '');
		return fil;});
		str = str.replace(/(\{{2}cytuj( (?:grę komputerową|książkę|odcinek|pismo|stronę))?\s*\|(?:\{{2}[^{}]+\}{2}|\{[^{}]+\}|[^{}]|<math>.+?<\/math>)+\}{2})/gi, function(a, fil) {
		fil = fil.replace(/( \|) +/g, '$1');
		fil = fil.replace(/ *\| *(adres (?:czasopisma|rozdziału)|archiwum|arxiv|autor(?: link\d*| r\d* link)|autor\d*(?: r)?|bibcode|cytat|czasopismo|część|data(?: dostępu)?|doi(?:etykieta)?|dostęp|id|imię\d*(?: r)?|inni|is(?:bn|sn)|język\d*|jstor|kolumny|lccn|miejsce|miesiąc|nazwisko\d*(?: r)?|numer|oclc|odn|odpowiedzialność|opis|opublikowany|oznaczenie|pmc|pmid|praca|redaktor|rok|rozdział|s|seria|strony|tom|tytuł(?: części| tomu)?|url|wolumin|wyda(?:nie|wca)|zarchiwizowano|autorzy|dokument|emisja|koniec|miasto|minuta|odcinek link|platforma|początek|poziom|producent|serial( link)?|sezon|stacja\d?|transkrypcja( url)?|wersja|zadanie) *= */g, ' |$1 = ');
		fil = fil.replace(/(\|data = \d{4}-)(\d(?: |\}{2}))/g, '$10$2');
		fil = fil.replace(/( \|s = )ss?\. *(\d)/g, '$1$2');
		fil = fil.replace(/(\|data = )\[(\d{3,4})\]/g, '$1$2');
		return fil;});
		str = str.replace(/(\{{2}google books.+?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\{{2}google books) *\| *([^ |]+) *\| */gi, '$1|$2|');
		return fil;});
		str = str.replace(/(\{{2}[ru]\|.+?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/[ |]*\|[ |]*/g, '|');
		return fil;});
		str = str.replace(/(\{{2}cytuj(?: (?:grę komputerową|książkę|odcinek|pismo|stronę))? *\|(?:\{{2}[^{}]*\}{2}|\{[^{}]*\}|[^{}])+\}{2})\.+/gi, '$1');
		str = str.replace(/([ !|])colspan="?1"?([\n !|])/gi, '$1$2');
		str = str.replace(/([ !|])rowspan="?1"?([\n !|])/gi, '$1$2');
		str = str.replace(/\{\| *class *=[ '‘’"„”“]*(wikitable[- a-z]*?)[ '‘’"„”“]*(\n|align|border|cell|font|style|width)/gi, '{| class="$1" $2');
		str = str.replace(/(\{\|.+? class) *=[ '‘’"„”“]*(wikitable[- a-z]*?)[ '‘’"„”“]*(\n|align|border|cell|font|style|width)/gi, '$1="$2" $3');

		// 177
		str = str.replace(/(\n *\{\|.+)/gi, function(a, fil) {
		fil = fil.replace(/([^{])\|[+-|]*/g, '$1');
		fil = fil.replace(/['"‘’„”“]+/g, '"');
		fil = fil.replace(/\{\| */g, '{| ');
		fil = fil.replace(/( (?:border|cellpadding|cellspacing)) *(=)[ "]*(\d+)[a-z%"]*/gi, '$1$2$3 ');
		fil = fil.replace(/ (valign *=[ "]*(?:top|middle|bottom) *"*)/g, '');
		fil = fil.replace(/ *class *= */g, ' class=');
		fil = fil.replace(/ style *= */g, ' style=');
		fil = fil.replace(/(style=)([^\n"]+?[^;]);?( [-a-z]+ *=)/gi, '$1"$2;"$3');
		fil = fil.replace(/(["; ])font-size: *100%;*/gi, '$1');
		fil = fil.replace(/ +;/g, ';');
		fil = fil.replace(/;([a-z])/g, '; $1');
		return fil;});

		str = str.replace(/((\|-|[ !|])style *= *"[^\n"]+")/gi, function(a, fil) {
		fil = fil.replace(/ *;[ ;]*/g, '; ');
		fil = fil.replace(/; "/g, ';"');
		return fil;});

		str = str.replace(/([!|]) *scope *= *["„”“]?(?:(?:col|row)(?:group)?)['‘’"„”“]? *(\|)/gi, '$1$2');
		str = str.replace(/([!|]) *scope *= *["„”“]?(?:(?:col|row)(?:group)?)['‘’"„”“]?/gi, '$1');
		str = str.replace(/ scope *= *["„”“]?(?:(?:col|row)(?:group)?)['‘’"„”“]? *(\|)/gi, '$1');
		str = str.replace(/ scope *= *["„”“]?(?:(?:col|row)(?:group)?)['‘’"„”“]? */gi, ' ');
		str = str.replace(/(\{\| *class="wikitable[- a-z]*".+?style *= *)["„”“](.+?)["„”“]/gi, '$1"$2"');
		str = str.replace(/(\{\|)([ =a-z\d"#%:;-]+)(class *= *"?wikitable[- a-z\d]*"?)/gi, '$1 $3$2');
		str = str.replace(/(\{\| *class=")([- a-z]+) (wikitable)(")/gi, '$1$3 $2$4');

		str = str.replace(/(\{\| class="wikitable[- a-z\d]*"[^\n<]+)/gi, function(a, fil) {
		fil = fil.replace(/ *= */g, '=');
		fil = fil.replace(/ align="?center"?/g, '');
		fil = fil.replace(/ background: *#f9f9f9/gi, '');
		fil = fil.replace(/ (border|cellpadding|cellspacing)=["\d]+/g, '');
		fil = fil.replace(/ empty-cells: *show/g, '');
		fil = fil.replace(/ rules=[a-z"]+/g, '');
		fil = fil.replace(/  +/g, ' ');
		fil = fil.replace(/ ;/g, ';');
		fil = fil.replace(/;;+/g, ';');
		fil = fil.replace(/( style=")[ ;]*/g, '$1');
		fil = fil.replace(/ style=" *" */g, ' ');
		return fil;});

		str = str.replace(/(\{\| *class="wikitable[- a-z]*".+?style *= *".*?)border *:.+?;/gi, '$1');
		str = str.replace(/(\{\| *class="wikitable[- a-z]*".+?style *= *".*?)border-collapse *:.+?;/gi, '$1');
		str = str.replace(/(\{\| *class="wikitable[- a-z]*".+?style *= *".*?)border-collapse *:.+?"/gi, '$1"');
		str = str.replace(/(\{\| *class="wikitable(?: (?:un)?sortable)?) plainrowheaders([ "])/gi, '$1$2');
		// 169
		str = str.replace(/\u201A/g, ',');
		str = str.replace(/\u02EE/g, '”');
		str = str.replace(/\u2010|\u2011/g, '-');
		str = str.replace(/(\d)º(\d)/g, '$1°$2');
		str = str.replace(/(\d)˚/g, '$1°');
		str = str.replace(/[:ː](?=[ \d\n])/g, ':');
		str = str.replace(/(\u02BA)/g, '$1<!-- SPRAWDŹ TO MIEJSCE! niepoprawny znak MODIFIER LETTER DOUBLE PRIME (U+02BA) (\'‘’′″)? -->');

		str = str.replace(/(\{{2}(dopracować|(?:główny|osobny) artykuł|main)\|.+?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/_/g, ' ');
		fil = fil.replace(/ *\| */g, '|');
		fil = fil.replace(/-/g, 'foosEpulKD');
		return fil;});
		str = str.replace(/(\n *\{\| [\s\S]+?\|\})/g, function(a, fil) {
		fil = fil.replace(/\n +([!|])/g, '\n$1');
		fil = fil.replace(/(\n\|\+)(?![\n ])/g, '$1 ');
		fil = fil.replace(/(\n\|\+)\n([a-ząćęłńóśźż])/gi, '$1 $2');
		return fil;});
		str = str.replace(/(\n\| ) +/g, '$1');

		str = str.replace(/(\[{2}[^[\]{|}]+?) *(\|[^[\]{|}]+\]{2})/g, '$1$2');
		str = str.replace(/(\[{2}Kategoria:[^\n|\]]+?) *(\|)[ !*]*(\]{2})/gi, '$1$2\u251C$3');
		str = str.replace(/(\[{2})([^[|\]]+?)( *\([^[|\]]+\)\|)(\]{2})/g, '$1$2$3$2$4');
		str = str.replace(/(\[{2})[ |]*([^[|\]]+?)[ |]*(\]{2})/g, '$1$2$3');
		str = str.replace(/(\[{2}[^\n[|\]]+\|[^\n[|\]]*)[\n]+([^[|\]]*\]{2})/g, '$1 $2');
		str = str.replace(/(\[{2}[^[|\]]+\|) +/g, '$1');
		// 174
		str = str.replace(/(\{{2}flaga[^{}]+\}{2})(?![\n !|\/])/gi, '$1 ');
		str = str.replace(/(\n\|| !{2}| \|{2}) *\'{3}(\{{2}flaga\|[a-z]+\}{2}) */gi, '$1 $2 \'\'\'');
		str = str.replace(/([=|] *)(\'{3})(\{{2}flaga\|[a-z]+(?:\|\d+)?\}{2}(?:<br \/>)?) */gi, '$1$3 $2');
		// 161
		str = str.replace(/( +)(['‘’"„”“]+)( *[=|])/g, '$2$1$3');
		str = str.replace(/([=|] *['‘’"„”“]+) (.*\.(?:gif|jpe?g|og[agv]|png|svg|tiff?)[\n |\]])/gi, '$1\u2553$2');
		str = str.replace(/([=|] *)(['‘’"„”“]+)( +)/g, '$1$3$2');
		str = str.replace(/\u2553/g, ' ');
		str = str.replace(/(\n==+ ) +/g, '$1');
		str = str.replace(/ +( ==+\n)/g, '$1');
		str = str.replace(/(\n==+ )\'{3}([^\n']+)\'{3}( ==+)(?=\n)/g, '$1$2$3');
		// 160
		str = str.replace(/(\.{3}|…)((?:(?:\'{2,})|(?:<ref(?: (?:group|name)[^\/>]+)?>[^<]+<\/ref>|<ref (?:group|name)[^\/>]+\/>|\{{2}(?:odn|[ru])\|[^}]+\}{2}))+)\.([^.])/g, '$1$2$3');
		str = str.replace(/( )["„”“](\.{3}|…) /g, '$1„$2');
		str = str.replace(/([^:→]) +(\{{2}(?:odn|[ru])\|)/g, '$1$2');
		str = str.replace(/(\{{2}odn *)(\|[^}]+)(\| *ref *= *nie)(.*}{2})/g, '$1$3$2$4');
		str = str.replace(/([^\n >])(\{{2}odn *\| *ref *= *nie)/g, '$1 $2');
		// 163
		str = str.replace(/<ref((?: +(?:group|name)[^\/>]+)?>) */gi, '<ref$1');
		str = str.replace(/(\s|&nbsp;)+(\'*<\/*ref[ >])/g, '$2');
		str = str.replace(/(<\/ref>)\s+(<ref>)/g, '\n$1$2');
		str = str.replace(/(<\/ref>)([ ,;:.…!?]+)[\n ]+((?:<ref>.+?<\/ref>)+)/g, '\n$1$3$2');

		str = str.replace(/(\n *!)(!{2})/g, '$1 !!');
		str = str.replace(/(\n *! (?:!{2} )*)!{32}/g, '$1!! !! !! !! !! !! !! !! !! !! !! !! !! !! !! !!');
		str = str.replace(/(\n *! (?:!{2} )*)!{16}/g, '$1!! !! !! !! !! !! !! !!');
		str = str.replace(/(\n *! (?:!{2} )*)!{8}/g, '$1!! !! !! !!');
		str = str.replace(/(\n *! (?:!{2} )*)!{4}/g, '$1!! !!');
		str = str.replace(/(\n *! (?:!{2} )*)!{4}/g, '$1!! !!');
		str = str.replace(/(\n *\|)(\|{2})/g, '$1 ||');
		str = str.replace(/(\n *\| (?:\|{2} )*)\|{32}/g, '$1|| || || || || || || || || || || || || || || ||');
		str = str.replace(/(\n *\| (?:\|{2} )*)\|{16}/g, '$1|| || || || || || || ||');
		str = str.replace(/(\n *\| (?:\|{2} )*)\|{8}/g, '$1|| || || ||');
		str = str.replace(/(\n *\| (?:\|{2} )*)\|{4}/g, '$1|| ||');
		str = str.replace(/(\n *\| (?:\|{2} )*)\|{4}/g, '$1|| ||');

		str = str.replace(/<br *\n\/>/gi, '<br />\n');
		str = str.replace(/(\n<[^\/<>]+>)[ \u2552]*(['‘’"„”“]*)[ \u2552]*/gi, '$1$2');
		str = str.replace(/[ \u2552]?(<(?:[^\n !\/>][^\n\/>]*[^\n \/>]|[^\n \/>])>)([ \u2552])+/gi, '$2$1');
		str = str.replace(/([^\\])([ \u2552])+(<\/[^\n>]+>)[ \u2552]?/gi, '$1$3$2');
		str = str.replace(/(<timeline>[^<>]+<\/timeline>)/gi, function(a, fil) {
		fil = fil.replace(/ /g, '\u2552');
		fil = fil.replace(/[—−‒―]/g, '–');
		return fil;});
		str = str.replace(/([^\n=| ]) +(?=[^\n=| ])/g, '$1 ');
		str = str.replace(/= +\|/g, '= |');
		str = str.replace(/\| +=/g, '| =');

		str = str.replace(/(\{{2}[^\n{}]+\}{2})/g, function(a, fil) {
		fil = fil.replace(/  +/g, ' ');
		return fil;});

		// 159
		str = str.replace(/(\[{2})([^[\]|]+)(\]{2})(['’])([a-ząćęłńóśźż]+)/gi, '$1$2|$2$4$5$3');
		str = str.replace(/(\[{2}[^[|\]]+\|[^[|\]]+)(\]{2})(['’][a-ząćęłńóśźż]+)/gi, '$1$3$2');
		str = str.replace(/(\[{2}[Cc]hargé d['’]affaires\|[Cc]harg)[eé]( d)['’](affaires\]{2})/g, '$1é$2’$3');
		str = str.replace(/(<ref)\s+(group|name) *(=) */gi, '<ref $2$3');
		str = str.replace(/(<ref (?:group|name)=)['"„”“]([^>]+)['"„”“]( *\/?>)/g, '$1"$2"$3');
		str = str.replace(/(<ref (?:group|name)=[^\/>]+?) *(\/) *(>)/g, '$1 $2$3');
		str = str.replace(/<ref name=([^\/>]*?)(>[\s\S]*?)<\/ref>([\s\S]*?)<ref(?: name=\1)?\2<\/ref>([\s\S]*?)<ref(?: name=\1)?\2<\/ref>([\s\S]*?)<ref(?: name=\1)?\2<\/ref>/g, '<ref name=$1$2</ref>$3<ref name=$1 />$4<ref name=$1 />$5<ref name=$1 />');
		str = str.replace(/<ref name=([^\/>]*?)(>[\s\S]*?)<\/ref>([\s\S]*?)<ref(?: name=\1)?\2<\/ref>([\s\S]*?)<ref(?: name=\1)?\2<\/ref>/g, '<ref name=$1$2</ref>$3<ref name=$1 />$4<ref name=$1 />');
		str = str.replace(/<ref name=([^\/>]*?)(>[\s\S]*?)<\/ref>([\s\S]*?)<ref(?: name=\1)?\2<\/ref>/g, '<ref name=$1$2</ref>$3<ref name=$1 />');
		str = str.replace(/<ref name=([^\/>]*?)(>[\s\S]*?)<\/ref>([\s\S]*?)<ref(?: name=\1)?\2<\/ref>/g, '<ref name=$1$2</ref>$3<ref name=$1 />');

		str = str.replace(/(\[{2})([^:[|\]]+)( - )([^[|\]]+)(\]{2})/g, '$1$2$3$4|$2 – $4$5');

		str = str.replace(/(\{\|(?:[^{}]|\{{2}[\s\S]+?\}{2}|\{\|(?:\{{2}[\s\S]+?\}{2}|[^{}])+\|\})+\|\})/gi, function(a, fil) {
		fil = fil.replace(/(\n!)! *((?:colspan|rowspan|style)=")/g, '$1$2');
		fil = fil.replace(/([ !|]v?align) *(=) *["„”“]?(top|middle|bottom|left|center|right)["„”“]?/g, '$1$2$3 ');
		fil = fil.replace(/(v?align=(?:top|middle|bottom|left|center|right) ) /g, '$1');
		fil = fil.replace(/([ !|])align=(?:top|middle|bottom)/g, '$1');
		fil = fil.replace(/([ !|])valign=(?:left|center|right)/g, '$1');
		fil = fil.replace(/\n\|- *style="vertical-align: *middle;?"/g, '');
			fil = fil.replace(/(\n\|.+)/gi, function(b, xyz) {
			xyz = xyz.replace(/style="text-align: *(left|center|right);?"/g, 'align=$1');
			return xyz;});
		fil = fil.replace(/((?:[ !|]|\|-)bgcolor) *(=) *['‘’"„”“]([-a-z#\d]+)['‘’"„”“]/g, '$1$2"$3"');
		fil = fil.replace(/(color[:=] *"?gr)e(y)/g, '$1a$2');
		fil = fil.replace(/([ !|]colspan) *(=)[ '"„”“]*(\d+)[ '"„”“]*/g, '$1$2$3 ');
		fil = fil.replace(/([ !|]rowspan) *(=)[ '"„”“]*(\d+)[ '"„”“]*/g, '$1$2$3 ');
		fil = fil.replace(/([ !|]nowrap) *= *"?(?:nowrap|yes)"?/g, '$1');
		fil = fil.replace(/([ !|]nowrap) +([!|])/g, '$1$2');
		fil = fil.replace(/([!|]) +(nowrap[ !|])/g, '$1$2');
		fil = fil.replace(/(\n *\|-) *width *=[ '"„”“]*\d[\d.%]*(?:p[tx])?[ ;'"„”“]*/g, '$1 ');
		fil = fil.replace(/([ !|]width) *(=)[ "„”“]*([\d.]+%?)(?:p[tx])?["„”“]*/g, '$1$2$3');
		return fil;});

		// LOCKI
		str = str.replace(/(\{{2}lista utworów(\{{2}.+?\}{2}|[\s\S])+?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\n\|)(\|)/g, '$1FoosEpulKQ$2');
		return fil;});
		str = str.replace(/(\[{2}[^|\]]+[|\]]|<code>[\s\S]+?<\/code>|<graph>[\s\S]+?<\/graph>|<math[^>]*>[\s\S]+?<\/math>|<pre>[\s\S]+?<\/pre>|<tt>[\s\S]+?<\/tt>)/gi, function(a, fil) {
		fil = fil.replace(/-/g, 'foosEpulKD');
		fil = fil.replace(/\'/g, 'foosEpulKC');
		fil = fil.replace(/–/g, 'foosEpulKN');
		fil = fil.replace(/,/g, 'foosEpulKP');
		fil = fil.replace(/"/g, 'foosEpulKZ');
		fil = fil.replace(/ /g, '\u2552');
		return fil;});
		str = str.replace(/(<code>[\s\S]+?<\/code>|<graph>[\s\S]+?<\/graph>|<math[^>]*>[\s\S]+?<\/math>|<pre>[\s\S]+?<\/pre>|<tt>[\s\S]+?<\/tt>)/gi, function(a, fil) {
		fil = fil.replace(/\|/g, 'foosEpulKF');
		fil = fil.replace(/ /g, '\u2552');
		return fil;});
		str = str.replace(/((?:ftp|hcodep|https?|www)[^\n <\]|]+[^\n .<\]|])/g, function(a, fil, ins) {
		fil = fil.replace(/\'/g, 'foosEpulKC');
		fil = fil.replace(/-/g, 'foosEpulKD');
		fil = fil.replace(/\./g, 'foosEpulKK');
		fil = fil.replace(/,/g, 'foosEpulKP');
		return fil;});
		// NAWIAS (B)
		str = str.replace(/\)(\.(?:gif|jpe?g|og[agv]|png|svg|tiff?)[\n |\]])/gi, 'foosEpulKB$1');
		// APOSTROF (C)
		str = str.replace(/(\'[^\n{}[\]]*\.(?:gif|jpe?g|og[agv]|png|svg|tiff?)[\n |\]}]|\{{2}odn\|[^}]+\}{2}|\{{2}link-interwiki.+?\})/gi, function(a, fil) {
		fil = fil.replace(/\'/g, 'foosEpulKC');
		return fil;});
		str = str.replace(/(\{{2}(?:commonscat|(?:główny|osobny) artykuł|main)\|[^}]+)\'([^}]+\}{2})/gi, '$1foosEpulKC$2');
		str = str.replace(/(\{{2}(?:commonscat|(?:główny|osobny) artykuł|main)\|[^}]+)\'([^}]+\}{2})/gi, '$1foosEpulKC$2');
		str = str.replace(/(\|(?:commons|muzeum) *= *[^\n|}]+)\'([^\n|}]*)\'([^\n|}]*)\'([^\n|}]*)\'([^\n|}]*[\n|}])/gi, '$1foosEpulKC$2foosEpulKC$3foosEpulKC$4foosEpulKC$5');
		str = str.replace(/(\|(?:commons|muzeum) *= *[^\n|}]+)\'([^\n|}]*)\'([^\n|}]*[\n|}])/gi, '$1foosEpulKC$2foosEpulKC$3');
		str = str.replace(/(\|(?:commons|muzeum) *= *[^\n|}]+)\'([^\n|}]*[\n|}])/gi, '$1foosEpulKC$2');
		// DYWIZ (D)
		str = str.replace(/(-[^\n{}[\]]*\.(gif|jpe?g|og[agv]|png|svg|tiff?)[\n |\]]|<ref +(group|name)[^>]+?>)/gi, function(a, fil) {
		fil = fil.replace(/-/g, 'foosEpulKD');
		return fil;});
		str = str.replace(/(<gallery>[\s\S]+?<\/gallery>)/gi, function(a, fil) {
		fil = fil.replace(/-/g, 'foosEpulKD');
		return fil;});
		str = str.replace(/(\|(?:commons|muzeum) *= *[^\n|}]+)-([^\n|}]*)-([^\n|}]*[\n|}])/gi, '$1foosEpulKD$2foosEpulKD$3');
		str = str.replace(/(\|(?:commons|muzeum) *= *[^\n|}]+)-([^\n|}]*[\n|}])/gi, '$1foosEpulKD$2');
		str = str.replace(/(_(?:Hi|MEAN|Lo)_°C = )-(\d)/gi, '$1foosEpulKD$2');
		// MINUS (E)
		str = str.replace(/\{{2}Chem/g, '\u2553');
		str = str.replace(/\{{2}chem/g, '\u2554');
		str = str.replace(/\}{2}/g, '\u2555');
		str = str.replace(/([\u2553\u2554][^\u2553\u2554\u2555]+\u2555)/g, function(a, fil) {
		fil = fil.replace(/−/g, 'foosEpulKE');
		return fil;});
		str = str.replace(/\u2555/g, '}}');
		str = str.replace(/\u2554/g, '{{chem');
		str = str.replace(/\u2553/g, '{{Chem');
		str = str.replace(/(\{{2})−(\}{2})/g, '$1foosEpulKE$2');
		// GRAVE ACCENT (G)
		str = str.replace(/(`[^\n{}[\]]*\.(?:gif|jpe?g|og[agv]|png|svg|tiff?)[\n |\]])/gi, function(a, fil) {
		fil = fil.replace(/`/g, 'foosEpulKG');
		return fil;});
		str = str.replace(/\|`\|/g, '|foosEpulKG|');
		// CAL (L)
		str = str.replace(/([^\d]\d{1,2}|[½¼¾])"/g, '$1foosEpulKL');
		// PAUZA (M)
		str = str.replace(/(—[^\n{}[\]]*\.(?:gif|jpe?g|og[agv]|png|svg|tiff?)[\n |\]])/gi, function(a, fil) {
		fil = fil.replace(/—/g, 'foosEpulKM');
		return fil;});
		// PP (N)
		str = str.replace(/(–[^\n{}[\]]*\.(?:gif|jpe?g|og[agv]|png|svg|tiff?)[\n |\]])/gi, function(a, fil) {
		fil = fil.replace(/–/g, 'foosEpulKN');
		return fil;});
		str = str.replace(/(https?:\/{2}[^\n –]*)–([^\n –]*)–([^\n –]*)–([^\n –]*)–([^\n –]*)–([^\n –]*)–([^\n –]*)–([^\n –]*)–/gi, '$1foosEpulKN$2foosEpulKN$3foosEpulKN$4foosEpulKN$5foosEpulKN$6foosEpulKN$7foosEpulKN$8foosEpulKN');
		str = str.replace(/(https?:\/{2}[^\n –]*)–([^\n –]*)–([^\n –]*)–([^\n –]*)–/gi, '$1foosEpulKN$2foosEpulKN$3foosEpulKN$4foosEpulKN');
		str = str.replace(/(https?:\/{2}[^\n –]*)–([^\n –]*)–/gi, '$1foosEpulKN$2foosEpulKN');
		str = str.replace(/(https?:\/{2}[^\n –]*)–/gi, '$1foosEpulKN');
		// PRZECINEK (P)
		str = str.replace(/(,[^\n{}[\]]*\.(?:gif|jpe?g|og[agv]|png|svg|tiff?)[\n |\]])/gi, function(a, fil) {
		fil = fil.replace(/,/g, 'foosEpulKP');
		return fil;});
		str = str.replace(/,( +\(\d+\))/gi, 'foosEpulKP$1');
		// SPC (S)
		str = str.replace(/(\n *\| *pochodne) (\? *=)/g, '$1\u2552$2');
		str = str.replace(/( [^\n{}[\]]*\.(?:gif|jpe?g|og[agv]|png|svg|tiff?)[\n |\]])/gi, function(a, fil) {
		fil = fil.replace(/ /g, '\u2552');
		return fil;});
		str = str.replace(/([αβγδεζηθικλμνξοπρσςτυφχψω]) ( *\][^\]])/g, '$1\u2552$2');
		str = str.replace(/ (:-*\))/g, '\u2552$1');
		str = str.replace(/ (:{2})/g, '\u2552$1');
		str = str.replace(/ (\.NET)/g, '\u2552$1');
		str = str.replace(/ (\.\d+em)/g, '\u2552$1');
		str = str.replace(/(\d *?) (:)/g, '$1\u2552$2');
		str = str.replace(/(nabój) (\.\d)/g, '$1\u2552$2');
		str = str.replace(/([=|] *?) (\.)/g, '$1\u2552$2');
		str = str.replace(/(\}{2}) (?=\}\})/g, '$1\u2552');
		str = str.replace(/(\{{2}familytree.+) (\}{2})/g, '$1\u2552$2');
		str = str.replace(/([^[]\[) ([A-Ha-h][^\]]*) (\][^\]])/g, '$1\u2552$2\u2552$3');
		// IKS(W)
		str = str.replace(/(\{\{.+?\}\})/g, function(a, fil) {
		fil = fil.replace(/x/g, 'foosEpulKW');
		return fil;});
		// CUDZYSLOW ”(Y)
		str = str.replace(/(.+(gif|jpe?g|og[agv]|png|svg|tiff?)[\n|\]])/gi, function(a, fil) {
		fil = fil.replace(/”/g, 'foosEpulKY');
		return fil;});
		// CUDZYSLOW (Z)
		str = str.replace(/(".*\.(?:gif|jpe?g|og[agv]|png|svg|tiff?)[\n |\]])/gi, function(a, fil) {
		fil = fil.replace(/"/g, 'foosEpulKZ');
		return fil;});
		str = str.replace(/(\{{2}(sortkey|wikinews).+?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/"/g, 'foosEpulKZ');
		return fil;});
		str = str.replace(/(\|(?:commons|muzeum) *= *[^\n|}]+)"([^\n|}]*)"([^\n|}]*)"([^\n|}]*)"([^\n|}]*[\n|}])/gi, '$1foosEpulKZ$2foosEpulKZ$3foosEpulKZ$4foosEpulKZ$5');
		str = str.replace(/(\|(?:commons|muzeum) *= *[^\n|}]+)"([^\n|}]*)"([^\n|}]*[\n|}])/gi, '$1foosEpulKZ$2foosEpulKZ$3');
		str = str.replace(/(\|(?:commons|muzeum) *= *[^\n|}]+)"([^\n|}]*[\n|}])/gi, '$1foosEpulKZ$2');
		str = str.replace(/((?:\|-|[ !|=])style *= *)["„”“]((?:\{{2}.+?\}{2}|[^\n"„”“])+?)(?:["„”“]|foosEpulKL)/gi, '$1foosEpulKZ$2foosEpulKZ');
		// 138
		str = str.replace(/(\{)([^'[\]{}<>|]+)\'([^'[\]{}<>|]+)\'([^'[\]{}<>|]+)\'([^'[\]{}<>|]+)\'([^'[\]{}<>|]+)(\}|\|)/g, '$1$2foosEpulKC$3foosEpulKC$4foosEpulKC$5foosEpulKC$6$7');
		str = str.replace(/(\{)([^'[\]{}<>|]+)\'([^'[\]{}<>|]+)\'([^'[\]{}<>|]+)\'([^'[\]{}<>|]+)(\}|\|)/g, '$1$2foosEpulKC$3foosEpulKC$4foosEpulKC$5$6');
		str = str.replace(/(\{)([^'[\]{}<>|]+)\'([^'[\]{}<>|]+)\'([^'[\]{}<>|]+)(\}|\|)/g, '$1$2foosEpulKC$3foosEpulKC$4$5');
		str = str.replace(/(\{)([^'[\]{}<>|]+)\'([^'[\]{}<>|]+)(\}|\|)/g, '$1$2foosEpulKC$3$4');
		// 148
		str = str.replace(/(<ref (?:group|name)[^>]+?)\'(.+?>)/g, '$1foosEpulKC$2');
		// 147
		str = str.replace(/(\[{2}|\{)([^–[\]{}<>|]+)–([^–[\]{}<>|]+)(\]{2}|\}|\|)/g, '$1$2foosEpulKN$3$4');

		str = str.replace(/(\n\{{2}SORTUJ:.+?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/foosEpulKC/g, '\'');
		return fil;});

		// SPRZED LOCKOW PRZENIESIONE
		// 176
		str = str.replace(/(\n *\|[- a-ząćęłńóśźż]*(aktywność|lata|[- .\w]+okres|rok|wysokość)([ _][ a-ząćęłńóśźż]+)? *=(?:[-–—−‒―÷ \d[\]]|<br \/>|do|od|ok\.)+(?=\n))/gi, function(a, fil) {
		fil = fil.replace(/(\d) *[-–—−‒―÷] *(\d)/g, '$1–$2');
		fil = fil.replace(/(\d{4})–(\d{2})–/g, '$1-$2-');
		return fil;});
		str = str.replace(/(\[{2})(\d+)([ \u2552](?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia))\|\2 [IVX]+(\]{2})/g, '$1$2$3$4');
		str = str.replace(/(\[{2}\d{1,2}[ \u2552](?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)\|\d{1,2}\]{2}) *(?:[-–—−‒―÷]) *(\[{2}\d{1,2}[ \u2552](?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)\]{2})/g, '$1–$2');
		str = str.replace(/([ (|]\d{1,2})[-–—−‒―÷]((?:\[{2})?\d{1,2}[ \u2552](?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia))/g, '$1–$2');
		str = str.replace(/(\n \|[^\n=|]+ = \d{1,2}) *– *((?:\[{2})?\d{1,2}[ \u2552](?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia))/g, '$1–$2');
		str = str.replace(/(\[{2}\d[ \u2552](?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)\|)0(\d\.)/gi, '$1$2');

		// STARTOWE
		// 146
		str = str.replace(/(\({2}) (.*?) (\){2})/g, '$1\u2552$2\u2552$3');
		str = str.replace(/ +(\)[,;:.!?…*\]]*\n)/g, '$1');
		str = str.replace(/ +(\)[,;:.!?…*\]]*) */g, '$1 ');
		str = str.replace(/ ?\( /g, ' (');

		str = str.replace(/\(([A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż]{1,2})(\[{2})/g, '$1 $2');
		str = str.replace(/([IVX])[−‒―]/g, '$1–');
		str = str.replace(/[−‒―]([IVX])/g, '–$1');
		str = str.replace(/[−‒―](\n)/g, '–$1');
		str = str.replace(/ [−‒―] /g, ' – ');
		str = str.replace(/(\n[ #*]+(?:\[{2})?\d{1,4}(?:\]{2})?)[−‒―]([\n ]|(?:\[{2})?\d{1,4}[^\d])/g, '$1–$2');
		str = str.replace(/((?:lat(?:a(?:ch|mi)?|om)?) (?:\[{2})?\d{1,4}(?:\]{2})?)[−‒―]([\n ]|(?:\[{2})?\d{1,4}[^\d])/gi, '$1–$2');
		str = str.replace(/−([\d∞])/g, 'foosEpulKE$1');
		str = str.replace(/(\d)−/g, '$1foosEpulKE');
		str = str.replace(/(<su[bp]>\'*)−/g, '$1foosEpulKE');
		str = str.replace(/−(\'*<\/su[bp]>)/g, 'foosEpulKE$1');
		str = str.replace(/(<su([bp])>)[-–—−‒―](\d+|<\/su\2>)/g, '$1foosEpulKE$3');
		str = str.replace(/(<su([bp])>\d+)[-–—−‒―](<\/su\2>)/g, '$1foosEpulKE$3');
		str = str.replace(/−/g, '–');

		str = str.replace(/([!\|] *[\d,.]+)( |&nbsp;)+(\+ *[\n!\|])/g, '$1$3');

		str = str.replace(/([^|]) +(\'{2,5}\n)/g, '$1$2');
		str = str.replace(/(\n\'{2,5}) +/g, '$1');
		str = str.replace(/(\n\'{5}[^\n']+?) +(\'{5}) +/g, '$1$2 ');
		str = str.replace(/(\n\'{3}[^\n']+?) +(\'{3}) +/g, '$1$2 ');
		str = str.replace(/(\n\'{2}[^\n']+?) +(\'{2}) +/g, '$1$2 ');
		str = str.replace(/([^\'])(\'{2})(\()([^\n()]+)(\))(\'{2})([^\'])/g, '$1$3$2$4$6$5$7');
		str = str.replace(/([^\n]<!-)-+(.+?)-+(->[^\n])/g, '$1-$2-$3');

		str = str.replace(/(\d +[IVX]{1,4} +\d{4}) *(?:[-–—−‒―÷]|foosEpulKE) *([\dIVX])/g, '$1 – $2');
		str = str.replace(/(\d{4}\]*) *(?:[-–—−‒―÷]|foosEpulKE) *(\[{2}\d{4})\|\d{1,2}(\]{2})/g, '$1–$2$3');
		str = str.replace(/(\d{4}\]*) *([/]) *(\[{2}\d{4})\|\d{1,2}(\]{2})/g, '$1$2$3$4');
		str = str.replace(/([ (](?:lat(?:om|ami|ach|a)?) \[*)(\d{1,3})(\d{1}\]*)(?:[-–—−‒―÷]|foosEpulKE)(\d{1}[^\d])/g, '$1$2$3–$2$4');
		str = str.replace(/([ (](?:lat(?:om|ami|ach|a)?) \[*)(\d{1,2})(\d{2}\]*)(?:[-–—−‒―÷]|foosEpulKE)(\d{2}[^\d])/g, '$1$2$3–$2$4');
		str = str.replace(/(\|(?:lat(?:a?(?:mi|ch)?|om)?)(?: |&nbsp;)\d0\.\]{2})(?: |&nbsp;)*(?:[-–—−‒―÷]|foosEpulKE)(?: |&nbsp;)*(\[{2}lata[ \u2552]\d0\.[ \u2552][IVX]+[ \u2552]wieku\|\d0\.\]{2})/g, '$1–$2');

		str = str.replace(/(\| *tytuł *=[^|}]+?\.? : )([a-ząćęłńóśźż])([^|}]+?\.? : )([a-ząćęłńóśźż])([^|}]+?\.? : )([a-ząćęłńóśźż])([^|}]+?\.? : )([a-ząćęłńóśźż])/g, function(a, fil, kon, filb, konb, filc, konc, fild, kond) {
		fil = fil.replace(/([^|}]+?)\.? : /g, '$1. ');
		filb = filb.replace(/([^|}]+?)\.? : /g, '$1. ');
		filc = filc.replace(/([^|}]+?)\.? : /g, '$1. ');
		fild = fild.replace(/([^|}]+?)\.? : /g, '$1. ');
		return fil + kon.toUpperCase() + filb + konb.toUpperCase() + filc + konc.toUpperCase() + fild + kond.toUpperCase();});
		str = str.replace(/(\| *tytuł *=[^|}]+?\.? : )([a-ząćęłńóśźż])([^|}]+?\.? : )([a-ząćęłńóśźż])/g, function(a, fil, kon, filb, konb) {
		fil = fil.replace(/([^|}]+?)\.? : /g, '$1. ');
		filb = filb.replace(/([^|}]+?)\.? : /g, '$1. ');
		return fil + kon.toUpperCase() + filb + konb.toUpperCase();});
		str = str.replace(/(\| *tytuł *=[^|}]+?\.? : )([a-ząćęłńóśźż])/g, function(a, fil, kon) {
		fil = fil.replace(/([^|}]+?)\.? : /g, '$1. ');
		return fil + kon.toUpperCase();});

		str = str.replace(/((?: |&nbsp;)*\.+(?: |&nbsp;)+\.+(?:[ .]|&nbsp;)*)/g, function(a, fil, insa, insb, insc) {
		fil = fil.replace(/ /g, '\u2553');
		fil = fil.replace(/&nbsp;/g, '\u2554');
		return fil;});
		str = str.replace(/ +(\.[^.])/g, '$1');
		str = str.replace(/\u2554/g, '&nbsp;');
		str = str.replace(/\u2553/g, ' ');

		str = str.replace(/ +, ?([^,])/g, ', $1');
		str = str.replace(/ +: ?([^:=?])/g, ': $1');
		str = str.replace(/([^-–—−‒―÷=:]) +(\?)/g, '$1$2');
		str = str.replace(/([^-–−]) +([,;:.…!?'‘’"„”“′″‴)\]]+\n)/g, '$1$2');

		str = str.replace(/(\n *)(\{\|.*|\|-.*)(\n)\n+/g, '$1$2$3');
		str = str.replace(/\n+(\n *)(\|-|\|\})/g, '$1$2');

		str = str.replace(/(\n[!|])\| ?/g, '$1 ');

		str = str.replace(/((?:<\/ref>|<ref (?:group|name)[^\/>]+\/>|\{{2}(?:odn|[ru])\|[^}]+\}{2})[,;:.!?])([^\n '<.…!?|}])/g, '$1 $2');
		str = str.replace(/(<ref (?:group|name)=[^>]+?) +<\/ref(>)/g, '$1$2');

		str = str.replace(/``/g, '"');
		str = str.replace(/`/g, '\'');
		str = str.replace(/˝/g, '"');
		str = str.replace(/&ldquo;/g, '“');
		str = str.replace(/&bdquo;/g, '„');
		str = str.replace(/&rdquo;/g, '”');
		str = str.replace(/,(\]{2})/g, ']],');

		str = str.replace(/\[{2}(kilogram|(?:mili|centy|kilo)?metr(?:[ \u2552](?:kwadratowy|sześcienny))?|tysiąc|milion|miliard|bilion|biliard)\]{2}/gi, '$1');
		str = str.replace(/\[{2}(?:kilogram|(?:mili|centy|kilo)?metr(?:[ \u2552](?:kwadratowy|sześcienny))?|tysiąc|milion|miliard|bilion|biliard)\|([^[\]]+)\]{2}/gi, '$1');
		str = str.replace(/\[{2}kilometr na godzinę\|(km\/h)\]{2}/gi, '$1');
		str = str.replace(/\[{2}procent\|(%|proc\.)\]{2}/gi, '$1');
		str = str.replace(/(\d)(?: |&nbsp;)([km]?g|[ckmnpμ]?m|°[CFС])((?: |&nbsp;)(?:[x×]|do|na) \d[-–,.\d]*(?: |&nbsp;)\2[\n ,;:.<!?){])/g, '$1$3');
		str = str.replace(/(\d)(?: |&nbsp;)([km]?g|[ckmnpμ]?m|°[CFС])(?: |&nbsp;)(?:[-–—−‒―÷])(?: |&nbsp;)(\d[,.\d]*(?: |&nbsp;)\2[\n ,;:.<!?){])/g, '$1–$3');
		str = str.replace(/((?:[\n ]|&nbsp;)['([]*\d[,.\d]*)([%‰])(?: |&nbsp;)*(?:[-–—−‒―÷])(?: |&nbsp;)*(\d[,.\d]*\2[\n ,;:.<!?){])/g, '$1–$3');
		str = str.replace(/(\d)(?:°(?: |&nbsp;)?(?:[-–—−‒―÷])(?: |&nbsp;)?|[-–—−‒―÷])(\d+[,.]?\d*(?: |&nbsp;)?(?:(\[{2}[Ss]kala[ \u2552](?:[Bb]allinga|[Cc]elsjusza|[Ff]ahrenheita)\|)?°(?: |&nbsp;)?(?:[CFС]|Blg|Rø)(\]{2})?))(?=[\n ,;:.…!?)\/<{\]'’"”])/g, '$1–$2');
		// 153
		str = str.replace(/([^\d]\d{1,2}) +styczeń +(\d{1,4}[^\d])/gi, '$1 stycznia $2');
		str = str.replace(/([^\d]\d{1,2}) +luty +(\d{1,4}[^\d])/gi, '$1 lutego $2');
		str = str.replace(/([^\d]\d{1,2}) +marzec +(\d{1,4}[^\d])/gi, '$1 marca $2');
		str = str.replace(/([^\d]\d{1,2}) +kwiecień +(\d{1,4}[^\d])/gi, '$1 kwietnia $2');
		str = str.replace(/([^\d]\d{1,2}) +maj +(\d{1,4}[^\d])/gi, '$1 maja $2');
		str = str.replace(/([^\d]\d{1,2}) +czerwiec +(\d{1,4}[^\d])/gi, '$1 czerwca $2');
		str = str.replace(/([^\d]\d{1,2}) +lipiec +(\d{1,4}[^\d])/gi, '$1 lipca $2');
		str = str.replace(/([^\d]\d{1,2}) +sierpień +(\d{1,4}[^\d])/gi, '$1 sierpnia $2');
		str = str.replace(/([^\d]\d{1,2}) +wrzesień +(\d{1,4}[^\d])/gi, '$1 września $2');
		str = str.replace(/([^\d]\d{1,2}) +październik +(\d{1,4}[^\d])/gi, '$1 października $2');
		str = str.replace(/([^\d]\d{1,2}) +listopad +(\d{1,4}[^\d])/gi, '$1 listopada $2');
		str = str.replace(/([^\d]\d{1,2}) +grudzień +(\d{1,4}[^\d])/gi, '$1 grudnia $2');
		str = str.replace(/([^\d])0(\d (?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia) \d{1,4}[^\d])/gi, '$1$2');
		str = str.replace(/(\d{3,4}(?:\]{2})?)[-–]((?:\[{2})?\d{1,2}[ \u2552](?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia))/g, '$1 – $2');
		str = str.replace(/(\d{3,4}(?:\]{2})?)[-–]((<br \/>)(?:\[{2})?\d{1,2}[ \u2552](?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia))/g, '$1 –$2');
		str = str.replace(/(\[{2}(?:[^[|\]]+\|)?\d{1,4}\]{2}) *[-–—−]+ *(\[{2}(?:[^[|\]]+\|)?\d{1,4}\]{2})/g, '$1–$2');
		str = str.replace(/([\n (]\'*(?:dniach|lat(?:om|ami|ach|a)?) \'*(?:\[{2})?\d{1,4}(?:\]{2})?\'*) *[-–—−]+ *(\'*(?:\[{2})?\d{1,4})/gi, '$1–$2');
		str = str.replace(/((?:lat(?:om|ami|ach|a)?) \d{1,4}–\d{1,4}) r\.+([,;:)]| [a-ząćęłńóśźż])/g, '$1$2');
		str = str.replace(/([ (/]\[{2}\d{1,4}\]{2})[-—−‒―÷](\d{1,4})/gi, '$1–$2');
		str = str.replace(/([ (/]\d{1,4})[-—−‒―÷](\[{2}\d{1,4})/gi, '$1–$2');
		str = str.replace(/\[{2}(styczeń|luty|marzec|kwiecień|maj|czerwiec|lipiec|sierpień|wrzesień|październik|listopad|grudzień)\]{2}/gi, '$1');
		str = str.replace(/\[{2}(?:styczeń|luty|marzec|kwiecień|maj|czerwiec|lipiec|sierpień|wrzesień|październik|listopad|grudzień)\|([^|\]]+)\]{2}/gi, '$1');

		// TECHNICZNE
		str = str.replace(/(\n)(?:\n|<br \/>)+(\n)/g, '$1$2');
		str = str.replace(/(?:\n|<br \/>)+(\n{2})/g, '$1');
		str = str.replace(/(\n{2})(?:\n|<br \/>)+/g, '$1');
		str = str.replace(/(?:<br \/>)+(\n *\|)/g, '$1');

		// Plik
		str = str.replace(/(\[{2}Plik:)\u2552+/gi, '$1');
		str = str.replace(/(\n) +(\[{2}Plik:)/gi, '$1$2');
		str = str.replace(/(<br *\/*> *)\n/g, '$1\u2553');
		str = str.replace(/\n(<br *\/*>)/g, '\u2553$1');
		str = str.replace(/(\{{2}[^}]+\}{2})/g, function (a, fil) {
		fil = fil.replace(/\n/g, '\u2553');
		return fil;});
		str = str.replace(/(\n\[{2}Plik:[^\n[\]]+?(?:\[{2}[^[\n\]]+?\]{2}[^\n\]]*?)*) *\n([^#*:;<{])/gi, '$1 $2');
		str = str.replace(/\u2553/g, '\n');
		str = str.replace(/(\[{2}Plik:[^\n<>[\]]+\| *)<small>([^\n<>]+)<\/small>( *\]{2})/gi, '$1$2$3');
		str = str.replace(/(\[{2}Plik:[^\n\]{]+?)\u2552*(\|) +([^\n\]]+?) *(\|) +([^\n\]]+?) *(\|) +([^\n\]]+?) *(\|) +/gi, '$1$2$3$4$5$6$7$8');
		str = str.replace(/(\[{2}Plik:[^\n\]{]+?)\u2552+(\|) *([^\n\]]+?) +(\|) *([^\n\]]+?) +(\|) *([^\n\]]+?) +(\|) */gi, '$1$2$3$4$5$6$7$8');
		str = str.replace(/(\[{2}Plik:[^\n\]{]+?)\u2552*(\|) +([^\n\]]+?) *(\|) +/gi, '$1$2$3$4');
		str = str.replace(/(\[{2}Plik:[^\n\]{]+?)\u2552+(\|) *([^\n\]]+?) +(\|) */gi, '$1$2$3$4');
		str = str.replace(/(\[{2}Plik:[^\n\]{]+?)\u2552*(\|) +/gi, '$1$2');
		str = str.replace(/(\[{2}Plik:[^\n\]{]+?)\u2552+(\|) */gi, '$1$2');
		str = str.replace(/(\[{2}Plik:[^\n\]{]+?\|)\|+/gi, '$1');
		str = str.replace(/(\[{2}[Pp]lik:[^\]]+\|upright) *(=) *(\d)/gi, '$1$2$3');
		// 162
		str = str.replace(/(Plik:)/gi, '\n$1');
		str = str.replace(/(Plik:[^|]+(?:gif|jpe?g|og[agv]|png|svg|tiff?)(?:(?:\|(?:bezramki|border|frame(?:less)?|mały|thumb|center|centruj|left|lewo|none|prawo|right|upright[=\d,.]*|\d+(?:x\d+)? *px))*))(\|.+?)((?:\|(?:bezramki|border|frame(?:less)?|mały|thumb|center|centruj|left|lewo|none|prawo|right|upright[=\d,.]*|\d+(?:x\d+)? *px))+)(\n|\]{2})/gi, '$1$3$2$4');
		str = str.replace(/(Plik:[^|]+(?:gif|jpe?g|og[agv]|png|svg|tiff?)(?:(?:\|(?:bezramki|border|frame(?:less)?|mały|thumb|center|centruj|left|lewo|none|prawo|right|upright[=\d,.]*))*)\|\d+(?:x\d+)?) (px\|)/gi, '$1$2');
		str = str.replace(/(Plik:[^|]+(?:gif|jpe?g|og[agv]|png|svg|tiff?))((?:(?:\|(?:bezramki|border|center|centruj|frame(?:less)?|left|lewo|mały|none|prawo|right|thumb|\d+(?:x\d+)?px)))+)(\|(?:upright[=\d,.]*))(\||\]{2})/gi, '$1$3$2$4');
		str = str.replace(/(Plik:[^|]+(?:gif|jpe?g|og[agv]|png|svg|tiff?))((?:(?:\|(?:center|centruj|left|lewo|none|prawo|right|upright[=\d,.]*|\d+(?:x\d+)?px)))+)(\|(?:bezramki|border|frame(?:less)?|mały|thumb))(\||\]{2})/gi, '$1$3$2$4');
		str = str.replace(/(Plik:[^|]+(?:gif|jpe?g|og[agv]|png|svg|tiff?)(?:\|(?:bezramki|border|frame(?:less)?|mały|thumb|upright[=\d,.]*))*)(\|\d+(?:x\d+)?px)(\|(?:center|centruj|left|lewo|none|prawo|right))(\||\]{2})/gi, '$1$3$2$4');
		str = str.replace(/\n(Plik:)/gi, '$1');
		// 167
		str = str.replace(/(\[{2}Plik:.+?\|(?:bezramki|frame(?:less)?|mały|thumb)(?:[^[\]]|\[{2}[^[\]]+\]{2})+\]{2}) *(?=[^\n])/g, '$1\n');
		str = str.replace(/(\n\[{2}Plik:)/g, '$1a[[a]]');
		str = str.replace(/\[{2}Plik:/gi, '\u2553');
		str = str.replace(/(\u2553.+?\|(?:bezramki|frame(?:less)?|mały|thumb).+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2}) *(?=\u2553.+?\|(?:bezramki|frame(?:less)?|mały|thumb))/g, '$1\n');
		str = str.replace(/(foopROteZa)\n*((?:\n\u2553.+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2})+)\n*((?:\n\u2553.+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2})+)\n*((?:\n\u2553.+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2})+)\n*((?:\n\u2553.+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2})+)\n*((?:\n\u2553.+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2})+)/g, '$1$2$3$4$5$6');
		str = str.replace(/(foopROteZa)\n*((?:\n\u2553.+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2})+)\n*((?:\n\u2553.+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2})+)\n*((?:\n\u2553.+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2})+)/g, '$1$2$3$4');
		str = str.replace(/(foopROteZa)\n*((?:\n\u2553.+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2})+)\n*((?:\n\u2553.+?(?:\[{2}[^[\n]+?\]{2}[^\n[\]]*)+\]{2})+)/g, '$1$2$3');
		str = str.replace(/\u2553/gi, '[[Plik:');
		str = str.replace(/(\n\[{2}Plik:)a\[{2}a\]{2}/g, '$1');
		str = str.replace(/(\{{2}spis treści)\|right(\}{2})/gi, '$1$2');
		str = str.replace(/(\{{2}inne[ \u2552]znaczenia(?:\{{2}[^{}]+\}{2}|[^{}])+\}{2}(?: *-->| *)*)([^\n])/gi, '$1\n$2');
		str = str.replace(/(\[{2}[^[|\]]+\|[^[|\]]+)(-)(\]{2})(\[{2})/g, '$1$3$2$4');

		// refy
		str = str.replace(/\n+(<ref(?: +(?:group|name)[^>]+)?>|\{{2}(?:odn|[ru])\|[^}]+\}{2})/g, '$1');
		str = str.replace(/(\]*[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]\]*[aeiouyąę])\.([']*(?:<ref[\s\S]+?(?:<\/ref|\/)>|\{{2}(?:odn|[ru])\|[^}]+\}{2})+)/gi, '$1$2.');
		str = str.replace(/((\{{2}r\|[^={}]+\}{2})+)/g, function(a, fil, ins) {
		fil = fil.replace(/\}{2}\{{2}r/g, '');
		return fil;});
		str = str.replace(/(<ref(?: +(?:group|name)[^\/>]+)?>)(?:[ \u2552*↑]|&nbsp;)*(['‘’"„”“]*)(?:[ \u2552*↑]|&nbsp;)*/g, '$1$2');
		str = str.replace(/(<ref>|<ref (?:group|name)[^>]+?>)>([^<>]+?)(<\/ref>)/g, '$1$2$3');
		str = str.replace(/(<ref>|<ref (?:group|name)[^>]+?>)([^<>]+?)<(<\/ref>)/g, '$1$2$3');
		str = str.replace(/,(\'*<ref.+?<\/ref>[,;:.…!?])/g, '$1');
		str = str.replace(/(<\/ref>,) ,/g, '$1');
		str = str.replace(/(\[{2}\d{1,4}\]{2}(?: |&nbsp;)*r)(<ref)/g, '$1.$2');
		str = str.replace(/([$²³])\.((?:<ref(?: +(?:group|name)[^\/>]+)?>[^<]+<\/ref>|<ref (?:group|name)[^\/>]+\/>|\{{2}(?:odn|[ru])\|[^}]+\}{2})+)\.?/g, '$1$2.');
		str = str.replace(/((?: |&nbsp;)(?:€|[bm]l[dn]|dB|[μmk]g|[nμmcdk]?m|m?Ah|(?:\[{2}[Hh]erc\|)?[kMGT]?Hz(?:\]{2})?|°[CFС]|st\.(?: |&nbsp;)C|os[oó]by?|tony?|zł))\.((?:<ref(?: +(?:group|name)[^\/>]+)?>[^<]+<\/ref>|<ref (?:group|name)[^\/>]+\/>|\{{2}(?:odn|[ru])\|[^}]+\}{2})+)\.?/g, '$1$2.');
		// 108
		str = str.replace(/ *([,;:.…!?'‘’"„“”°′″)\]}]+) *(<\/?ref)/g, '$1$2');
		str = str.replace(/(<ref>|<ref (?:group|name)=[^\/>]+>)[,;:.]? +/g, '$1');
		str = str.replace(/[ ,;]+(<\/ref>)/g, '$1');
		str = str.replace(/(<\/ref>)( +)([,;:.!?])/g, '$1$3');
		// 110
		str = str.replace(/([^\n.…!?}])(\n*<\/ref>)/g, '$1.$2');
		// 111
		str = str.replace(/([.…!?](?:\'|<!--[^>]+-->)*\])\.(<\/ref>)/g, '$1$2');
		str = str.replace(/([.…]\'+)\.(<\/ref>)/g, '$1$2');
		str = str.replace(/(\.(?:\'{2,5})?\]{2})\.(<\/ref>)/g, '$1$2');
		str = str.replace(/(\{{2}cytuj[^}]+?\}{2})\.(<\/ref)/gi, '$1$2');
		str = str.replace(/(\{{2}(?:fakt|isbn|lang|odn)[^{}]*?\}{2})(<\/ref>)/gi, '$1.$2');
		str = str.replace(/(\{{2}(?:Dziennik Ustaw|Monitor Polski) *\|[^}]+?\}{2})(<\/ref>)/gi, '$1.$2');
		str = str.replace(/(\{{2}(Dziennik Ustaw|Monitor Polski)[^{}]+\}{2})/g, function(a, fil) {
		fil = fil.replace(/\|\}\}/g, '}}');
		fil = fil.replace(/ *\| */g, '|');
		return fil;});

		// 112
		str = str.replace(/(<\/ref>\.) ?\.([\n ])/g, '$1$2');
		str = str.replace(/(<\/ref>),\./g, '$1.');
		str = str.replace(/(<\/ref>)(\()/g, '$1 $2');
		str = str.replace(/(>\.)\.([\n ])/g, '$1$2');
		str = str.replace(/ +(\'{2,5}<\/ref)/g, '$1');
		str = str.replace(/(\{{2}[Cc]ytuj.+?\}{2}\])\.(<\/ref)/g, '$1$2');
		// 145
		str = str.replace(/<!--/g, '\u2553');
		str = str.replace(/-->/g, '\u2554');
		str = str.replace(/(&[a-z]+);/g, '$1\u2555');
		str = str.replace(/(\'*[,;:]\'*)((?:<ref(?: +(?:group|name)[^\/>]+)?>[^<]+<\/ref>|<ref (?:group|name)[^\/>]+\/>|\{{2}(?:odn|[ru])\|[^}]+\}{2})+)/g, '$2$1');
		str = str.replace(/(\'+\.)((?:<ref(?: +(?:group|name)[^\/>]+)?>[^<]+<\/ref>|<ref (?:group|name)[^\/>]+\/>|\{{2}(?:odn|[ru])\|[^}]+\}{2})+)/g, '$2$1');
		str = str.replace(/([\w)]{5})(\.)(\'+(?:<ref(?: +(?:group|name)[^\/>]+)?>[^<]+<\/ref>|<ref (?:group|name)[^\/>]+\/>|\{{2}(?:odn|[ru])\|[^}]+\}{2})+)\.?/g, '$1$3$2');
		str = str.replace(/(%)(\.)((?:<ref(?: +(?:group|name)[^\/>]+)?>[^<]+<\/ref>|<ref (?:group|name)[^\/>]+\/>|\{{2}(?:odn|[ru])\|[^}]+\}{2})+)/g, '$1$3$2');
		str = str.replace(/((?:<ref(?: +(?:group|name)[^\/>]+)?>)(?:\[(?:ftp|hcodep|https?):\/{2}[^ \]]+ )?)[-–—−‒― •]+/gi, '$1');
		str = str.replace(/([^.]\.['\]]*(?:<ref(?: +(?:group|name)[^\/>]+)?>[^<]+<\/ref>|<ref (?:group|name)[^\/>]+\/>|\{{2}(?:odn|[ru])\|[^}]+\}{2})+)\.([^.])/g, '$1$2');
		str = str.replace(/\u2555/g, ';');
		str = str.replace(/\u2554/g, '-->');
		str = str.replace(/\u2553/g, '<!--');
		// 109
		str = str.replace(/((<ref( +(group|name)[^\/>]+)?>)['‘’"„”“]*(\[{2}[^|\]]+\|)?)([a-ząćęłńóśźż])/g, function (a, poca, pocb, pocc, pocd, poce, fil) {
		return poca + fil.toUpperCase();});
		str = str.replace(/(<ref( +(group|name)[^\/>]+)?>['‘’"„”“]*\[{2})([a-ząćęłńóśźż])([^|\]]*?\]{2})/g, function (a, poca, pocb, pocc, fil, kon) {
		return poca + fil.toUpperCase() + kon;});
		str = str.replace(/(<ref(?: +(?:group|name)[^\/>]+)?>)Ftp/g, '$1ftp');
		str = str.replace(/(<ref(?: +(?:group|name)[^\/>]+)?>)Hcodep/g, '$1hcodep');
		str = str.replace(/(<ref(?: +(?:group|name)[^\/>]+)?>)Http/g, '$1http');
		str = str.replace(/(<ref(?: +(?:group|name)[^\/>]+)?>)Www/g, '$1www');
		str = str.replace(/(\.<\/math>)\./g, '$1');
		str = str.replace(/((?:\{{2}r\|[^{}]+\}{2})+)((?:\{{2}u\|[^{}]+\}{2})+)/g, '$2$1');
		// 139
		str = str.replace(/(<ref( +(group|name)[^\/>]+)?>(\n|.)+?<\/ref>)/g, function (a, fil, poca, pocb, pocc) {
		fil = fil.replace(/\'\'\'/g, '\u2553');
		return fil;});
		str = str.replace(/\{\|/g, '\u2554');
		str = str.replace(/(\n *)\|\}/g, '$1\u2555');
		str = str.replace(/(\u2554([^\u2554\u2555]|\u2554([^\u2554\u2555]|\u2554([^\u2554\u2555]|\u2554([^\u2554\u2555]|\u2554[^\u2554\u2555]*\u2555)*\u2555)*\u2555)*\u2555)*\u2555)/g, function (a, fil) {
		fil = fil.replace(/(?:\n *\|-.*)+(\n *(?:\|-|\u2555))/g, '$1');
		fil = fil.replace(/\'\'\'/g, '\u2556');
		return fil;});
		str = str.replace(/(\n *(\|\+|!)(\n|.)+?)(?=\n *[\u2555!|])/g, function (a, fil, insa, insb, kon) {
		fil = fil.replace(/\u2556/g, '');
		return fil;});
		str = str.replace(/[\u2553\u2556]/g, '\'\'\'');
		str = str.replace(/\u2555/g, '|}');
		str = str.replace(/\u2554/g, '{|');
		// 121
		str = str.replace(/(\n)\|(\}{2})/g, '$1$2');

		// INTERPUNKCYJNE
		str = str.replace(/([- ,;:(][A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż‘’„”“]{3,}(?:\]{2}|\')*,)([A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż]{3,})(?=[-\n ,;:.…!?<)])/g, '$1 $2');
		str = str.replace(/([- ,;:(][A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż‘’„”“]{3,}(?:\]{2}|\')*,)([A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż]{3,})(?=[-\n ,;:.…!?<)])/g, '$1 $2');
		str = str.replace(/(\)['"”’]*\.)(['"”’]*[A-ZĄĆĘŁŃÓŚŹŻ])/g, '$1 $2');
		str = str.replace(/[,;:.] +(p|pp|s|S|ss|t|T)\.(\d+ *[-–]* *\d*n*)(?=[,;.]*[\n ])/g, ', $1. $2');
		str = str.replace(/, *:/g, ':');
		str = str.replace(/(:)({{2}cytuj)/gi, '$1 $2');
		str = str.replace(/([^)]), +(\([^.…])/g, '$1 $2');
		str = str.replace(/(\]{2}[,;])(\[{2})/g, '$1 $2');
		str = str.replace(/(\.\'{2,})\.([^.])/g, '$1$2');
		str = str.replace(/([^,;:!?]) +((?:\.{3}|…)\'*[,;:!?])/g, '$1$2');
		str = str.replace(/( [-–])(\()/g, '$1 $2');
		str = str.replace(/([^-–#*,;:=|]) +((albowiem|ale|czyli|gdyż|lecz)[\n :])/g, '$1, $2');
		str = str.replace(/([^-–—−#*,;:…!?|]['‘’"“”„]*) +(['‘’"“”„]*a) +(['‘’"“”„]*(?:do|dla|i|jednocześnie|nie|nawet|następnie|nad|na|od|o|przy|przez|przed|potem|ponieważ|ponadto|pod|po|także|u|wraz|właściwie|więc|w|zatem|zarazem|za|z)[ ,])/g, '$1, $2 $3');
		str = str.replace(/, +(jak|ponieważ)/g, '\u2553$1');
		str = str.replace(/(Aczkolwiek|Jednakże|Na przykład|Podczas|Z kolei|Zatem) *, */g, '$1 ');
		str = str.replace(/\u2553/g, ', ');
		str = str.replace(/\bb\/d\b/g, 'b.d.');
		str = str.replace(/(podobnie|tak) (jak)\b/gi, '$1\u2553$2');
		str = str.replace(/([^-–—−#*,;:|]) +(czy|jak) +(i|nawet|również|także|też) /g, '$1, $2 $3 ');
		str = str.replace(/\u2553/g, ' ');
		str = str.replace(/([!|][ ']*[Ll])\.?(p)\.?([ ']*[\n!|])/g, '$1$2.$3');
		str = str.replace(/\bn\/d\b/g, 'n.d.');
		str = str.replace(/\b([Nn]p)(: )/g, '$1.$2');
		str = str.replace(/(\([Nn]p) +/g, '$1. ');
		str = str.replace(/\b([Nn]p\.:?) */g, '$1 ');
		str = str.replace(/\bp\.t\. /g, 'pt. ');
		str = str.replace(/( sygn\.)(\d)/gi, '$1 $2');
		str = str.replace(/(\b[Tt]z[nw])( |:)/g, '$1.$2');
		str = str.replace(/(\b[Tt]z[nw]\.)([^\n \u2552:])/g, '$1 $2');
		str = str.replace(/([^-–—−‒―,;:>]) (tzn\.[\n :])/g, '$1, $2');
		str = str.replace(/(zwłaszcza), /gi, '$1 ');
		str = str.replace(/(Chyba|Jako|Mimo|Pomimo|Zwłaszcza), +(iż|że)/g, '$1 $2');
		str = str.replace(/([-–,„'(] *(?:chyba|jako|mimo|pomimo|zwłaszcza)), +(iż|że)/g, '$1 $2');
		// 124
		str = str.replace(/([[({])( +)/g, '$1');
		// 125
		str = str.replace(/(\{{2}sort *?\|\d+? *?\|)(\}{2})/g, '$1&nbsp;$2');
		str = str.replace(/([ \u2552]+)((?:\]{2})+)/g, '$2$1');
		str = str.replace(/( +)([)\]}]+[,;:.]*) */g, '$2$1');
		str = str.replace(/(\[{2}Kategoria:.+?\|)(\]{2}\n)/gi, '$1 $2');
		str = str.replace(/(\[{2}Plik:[^\]]+?)\| *(\]{2})/gi, '$1$2');
		str = str.replace(/( (?:etc|itd|itp))([\n ,;:)<{])/g, '$1.$2');
		str = str.replace(/, +(itd|itp)\.?/g, ' $1.');
		str = str.replace(/(?:[,;]?) ((?:etc|itd|itp)\.) ((?:etc|itd|itp)\.)/g, ', $1, $2');
		str = str.replace(/(?:[,;]?) ((?:etc|itd|itp)\.) ((?:etc|itd|itp)\.)/g, ', $1, $2');
		str = str.replace(/( się)( że)[ ,]+/g, '$1,$2 ');
		str = str.replace(/([^-–—−\n ,([{A-ZĄĆĘŁŃÓŚŹŻa-ząćęłńóśźż])( *tj\. *)/g, '$1, tj. ');
		str = str.replace(/\(tj\. */g, '(tj. ');
		str = str.replace(/;(, tj\. )/g, '$1');
		str = str.replace(/([ (]tj)[ .]*(:)/g, '$1.$2');
		str = str.replace(/(\[{2}[^\]]+\.\]{2}(?:\'{2,5})?)\.([^.])/g, '$1$2');
		str = str.replace(/([\n (>]§)(\d)/g, '$1 $2');
		str = str.replace(/([\n ]§ *\d+) *([-–—−‒―÷]) *(\d+[\n,;:.)])/g, '$1$2$3');

		// TYPOGRAFICZNE
		// T.1 P na PP
		str = str.replace(/(['‘’"“”„])—/g, '$1 – ');
		str = str.replace(/—(['‘’"“”„])/g, ' – $1');
		str = str.replace(/(\| *['‘’"“”„]) (–)/g, '$1$2');
		str = str.replace(/(–) (['‘’"“”„] *\|)/g, '$1$2');
		str = str.replace(/(\|\s*(numer|s(trony?)?|wolumin|wydanie)\s*=\s*[-–—−‒―÷ \d,;.]+(?=\||\}\}))/gi, function(a, fil) {
		fil = fil.replace(/(\d) *(?:[-–—−‒―÷])+ *(\d)/g, '$1–$2');
		return fil;});
		str = str.replace(/(\d)—(\d)/g, '$1–$2');
		str = str.replace(/ ?— ?/g, ' – ');

		// T.2 _DYW_ na _PP_
		str = str.replace(/(\{{2}[^}]*?) - ([^}]*?) - /g, '$1foosEpulKA$2foosEpulKA');
		str = str.replace(/(\{{2}[^}]*?) - /g, '$1foosEpulKA');
		str = str.replace(/(\n *\|* *)(Plik:.+?) - (.+?\|)/g, '$1$2foosEpulKA$3');
		str = str.replace(/(\n *\|* *)(Plik:.+?) - (.+?\|)/g, '$1$2foosEpulKA$3');
		// 130
		str = str.replace(/(\n *\|[^\n|]+?) - ([^\n|]*=)/g, '$1foosEpulKA$2');
		str = str.replace(/ +(?:ss)\.((?: |&nbsp;)\d)/g, ' s.$1');
		str = str.replace(/([-–,;:.]) *[Ss]tr\. *(\d)/g, '$1 s. $2');
		str = str.replace(/\( *[Ss]tr\. *(\d)/g, '(s. $1');
		str = str.replace(/( \(*s\. \d+) *(?:[-–—−‒―÷]|--) *(\d+[\n ,;:.)\]])/gi, '$1–$2');
		str = str.replace(/(, s\. \d+(?:[-–]\d+)?(?:, \d+(?:[-–]\d+)?)*) i( \d+(?:[-–]\d+)?[,.)])/gi, '$1,$2');
		str = str.replace(/(\|strony = \d+(?:[-–]\d+)?(?:, \d+(?:[-–]\d+)?)*) i( \d+(?:[-–]\d+)?(?: \||\}{2}))/gi, '$1,$2');
		str = str.replace(/([,;] s\. (?:\d+(?:–\d+)?, )*\d+)-(\d+, (?:\d+, )*\d+)-(\d+, (?:\d+, )*\d+)-(\d+[,;:.])/gi, '$1–$2–$3–$4');
		str = str.replace(/([,;] s\. (?:\d+(?:–\d+)?, )*\d+)-(\d+, (?:\d+, )*\d+)-(\d+[,;:.])/gi, '$1–$2–$3');
		str = str.replace(/([,;] s\. (?:\d+(?:–\d+)?, )*\d+)-(\d+[,;:.])/gi, '$1–$2');
		str = str.replace(/([,;] s\. (?:\d+(?:–\d+)?, )*\d+)-(\d+[,;:.])/gi, '$1–$2');
		str = str.replace(/( s\. |\| *strony *= *)(\d+)(\d{1}[-–—−‒―÷])(\d{1}[^\d])/g, '$1$2$3$2$4');
		str = str.replace(/( s\. |\| *strony *= *)(\d+)(\d{2}[-–—−‒―÷])(\d{2}[^\d])/g, '$1$2$3$2$4');
		str = str.replace(/( s\. |\| *strony *= *)(\d+)(\d{3}[-–—−‒―÷])(\d{3}[^\d])/g, '$1$2$3$2$4');
		str = str.replace(/( s\. |\| *strony *= *)(\d+)(\d{4}[-–—−‒―÷])(\d{4}[^\d])/g, '$1$2$3$2$4');
		str = str.replace(/(\d)[-–—−‒―÷](\d+(?:,\d+)?(?: |&nbsp;)(?:[bm]l[dn]|tys\.|(?:sekund|minut|godzin)(?:a(?:ch|mi)?|[ąęy]|om)?|(?:(?:sekundz|godzin|minuc)ie)|(?:dni|lat)(?:a(?:ch|mi)?|om)?|dB|[μmk]?g|[nμmcdk]?m|m?Ah|(?:\[{2}[Hh]erc\|)?[kMGT]?Hz(?:\]{2})?|°[CFС]|st\.(?: |&nbsp;)C|(?:p\.)?n\.e\.)[\n ,;:.'’”\/<)\]{|])/g, '$1–$2');
		str = str.replace(/(\d)[-–—−‒―÷](\d+(?:,\d+)?[%‰])/g, '$1–$2');
		str = str.replace(/( \'*)-(\'*[\n ])/g, '$1–$2');
		str = str.replace(/( \'*)-(\'*[\n ])/g, '$1–$2');
		str = str.replace(/(<br \/>)- /g, '$1– ');
		str = str.replace(/ -(<br \/>)/g, ' –$1');
		str = str.replace(/(<br \/>)-(<br \/>)/g, '$1–$2');
		str = str.replace(/foosEpulKA/g, ' - ');
		// 144
		str = str.replace(/ -(<ref[ >])/g, ' –$1');
		str = str.replace(/(\| *[Pp]op\w* *= *)(?:\[{2}Dywiz\|)?-(?:\]{2})?/g, '$1–');
		str = str.replace(/(\| *[Nn]astę*\w* *= *)(?:\[{2}Dywiz\|)?-(?:\]{2})?/g, '$1–');
		// 158
		str = str.replace(/(\n=+ *Bibliografia *=+\n([#*•]+.+\n)+)/g, function(a, fil, ins) {
		fil = fil.replace(/\.?[,;]\n/g, '.\n');
		return fil;});

		// cudzyslow
		str = str.replace(/‘’/g, '"');
		str = str.replace(/([^’\d])’{2}([-–,;:.…?!)\]]*\s)/g, '$1”$2');
		// 116
		str = str.replace(/(\[{2})((?:[^\n:|\]]+?[ \u2552])?)("|foosEpulKZ)([^\n\]|]+?)("|foosEpulKZ)((?:[ \u2552][^\n[|]*?)?)(\]{2})/g, '$1$2$3$4$5$6|$2„$4”$6$7');
		str = str.replace(/(\[{2}[^[|\]]+\|)([^[|\]]+?\]{2})/g, function(a, poc, fil) {
		fil = fil.replace(/\u2552/g, ' ');
		return poc + fil;});
		// 126
		str = str.replace(/(<[^<>]+>)/g, function(a, fil) {
		fil = fil.replace(/"/g, 'foosEpulKA');
		return fil;});
		// 122
		str = str.replace(/(\{[^}|]*)"(.*?\})/g, '$1foosEpulKA$2');
		str = str.replace(/(\{[^}|]*)"(.*?\})/g, '$1foosEpulKA$2');
		// 113
		str = str.replace(/([!|]{2}[^\n|]*?)"(.*?[!|])/g, '$1foosEpulKA$2');
		str = str.replace(/([!|]{2}[^\n|]*?)"(.*?[!|])/g, '$1foosEpulKA$2');
		str = str.replace(/([!|]{2}[^\n|]*?)"(.*?[!|])/g, '$1foosEpulKA$2');
		str = str.replace(/([!|]{2}[^\n|]*?)"(.*?[!|])/g, '$1foosEpulKA$2');
		str = str.replace(/([!|]{2}[^\n|]*?)"(.*?[!|])/g, '$1foosEpulKA$2');
		str = str.replace(/([!|]{2}[^\n|]*?)"(.*?[!|])/g, '$1foosEpulKA$2');
		str = str.replace(/([!|]{2}[^\n|]*?)"(.*?[!|])/g, '$1foosEpulKA$2');
		// 114
		str = str.replace(/(\n(<.+?>|[ #*:;])*(\{\||\|-).+)/g, function(a, fil) {
		fil = fil.replace(/"/g, 'foosEpulKA');
		return fil;});
		// 115
		str = str.replace(/(\n *[!|][^\n!|]*)"(.*?[!|].*)(?=\n)/g, '$1foosEpulKA$2');
		str = str.replace(/(\n *[!|][^\n!|]*)"(.*?[!|].*)(?=\n)/g, '$1foosEpulKA$2');
		str = str.replace(/(\n *[!|][^\n!|]*)"(.*?[!|].*)(?=\n)/g, '$1foosEpulKA$2');
		str = str.replace(/(\n *[!|][^\n!|]*)"(.*?[!|].*)(?=\n)/g, '$1foosEpulKA$2');
		str = str.replace(/(\n *[!|][^\n!|]*)"(.*?[!|].*)(?=\n)/g, '$1foosEpulKA$2');
		str = str.replace(/(\n *[!|][^\n!|]*)"(.*?[!|].*)(?=\n)/g, '$1foosEpulKA$2');
		str = str.replace(/(\n *[!|][^\n!|]*)"(.*?[!|].*)(?=\n)/g, '$1foosEpulKA$2');
		str = str.replace(/(\n *[!|][^\n!|]*)"(.*?[!|].*)(?=\n)/g, '$1foosEpulKA$2');

		str = str.replace(/(\[{2}[^\n|\]]*? )”([^\n|\]]*? )”([^\n|\]]*? )”([^\n|\]]*? )”([^\n|\]]*?[\n|\]])/g, '$1foosEpulKa$2foosEpulKa$3foosEpulKa$4foosEpulKa$5');
		str = str.replace(/(\[{2}[^\n|\]]*? )”([^\n|\]]*? )”([^\n|\]]*?[\n|\]])/g, '$1foosEpulKa$2foosEpulKa$3');
		str = str.replace(/(\[{2}[^\n|\]]*? )”([^\n|\]]*?[\n|\]])/g, '$1foosEpulKa$2');
		// 140
		str = str.replace(/(: )["”]/g, '$1„');
		str = str.replace(/ +("[,;:.][\n )])/g, '$1');
		str = str.replace(/ +(\'+[,;:.][\n )])/g, '$1');
		str = str.replace(/( ),,([^\n "„”“]+["”])/g, '$1„$2');
		str = str.replace(/([\n ]\[[^[])"/g, '$1„');
		str = str.replace(/([\n =(|])"/g, '$1„');
		str = str.replace(/(\/\'*)"(\'*[^-–—−+\n ,;:.!?)\]])/g, '$1„$2');
		str = str.replace(/(<ref(?: +(?:group|name)[^\/>]+)?>\'*)["”]/g, '$1„');
		str = str.replace(/(\')„([\n ,;:.!?)\]]|<ref>)/g, '$1”$2');
		str = str.replace(/(\n\'+) *["”]/g, '$1„');
		str = str.replace(/( \'+)["”]/g, '$1„');
		str = str.replace(/„(<ref>|<ref (?:group|name).+?>)/g, '”$1');
		str = str.replace(/(<ref(?: (?:group|name)[^\/>]+)?>\'*) *["”]/g, '$1„');
		// 131
		str = str.replace(/"/g, '”');
		str = str.replace(/([^[]\[)”/g, '$1„');
		str = str.replace(/([-–—−])”([^\n ]+”)/g, '$1„$2');
		str = str.replace(/ „ (.+?) „ /g, ' „$1” ');
		str = str.replace(/(„(?:\.{3}|…)) +/g, '$1');
		str = str.replace(/[ ,;]+((?:\.{3}|…)”)/g, '$1');
		str = str.replace(/”([\wĄĆĘŁŃÓŚŹŻąćęłńóśźż]+”)/g, '„$1');
		str = str.replace(/([\n !|]['(]*)”([^\n„“”]+?”)/g, '$1„$2');

		str = str.replace(/(.+(gif|jpe?g|og[agv]|png|svg|tiff?)[\n|\]])/gi, function(a, fil) {
		fil = fil.replace(/”/g, '\x01');
		return fil;});
		str = str.replace(/(”[,;:.!?])([^\n '.)\]{}<])/g, '$1 $2');
		str = str.replace(/([ (])pt\.["„”“]/g, '$1pt. „');
		str = str.replace(/\x01/g, '”');

		str = str.replace(/„(\'*[^\n']\'*\n)/g, '”$1');
		str = str.replace(/(\([-–−×÷,. \d]*\d)”(\))/g, '$1"$2');
		str = str.replace(/(„\d[-–—−+:,.\da-zA-Z]*)foosEpulKL/g, '$1”');
		str = str.replace(/(„[-A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż/:\d]+\d)foosEpulKL/g, '$1”');
		str = str.replace(/ *„ *(\'*\n)/g, '”$1');
		str = str.replace(/„(\})/g, '”$1');
		str = str.replace(/ +”/g, '”');
		str = str.replace(/“([,;:.'\/]*[\n <])/g, '”$1');
		str = str.replace(/(<(blockquote|br \/)>\'*)” ?/g, '$1„');
		str = str.replace(/(?:<br \/>|[\n ])*(<blockquote>)/g, '\n\n$1');
		str = str.replace(/(==)\n+(<blockquote>)/g, '$1\n$2');
		str = str.replace(/(<\/blockquote>)(?:<br \/>|[\n ])*/g, '$1\n\n');
		str = str.replace(/foosEpulKA/g, '"');
		str = str.replace(/foosEpulKa/g, '”');
		str = str.replace(/["„](\[https?:\/{2}[^ [\]]+ +)((?:\[{2}[^[\]]*\]{2}|\[[^[\]]*\]|[^[\]])+)(\][,;:.]?)["”]/g, '$1„$2”$3');
		str = str.replace(/(„\[{2}[^[|\]]+\|[^[|\]„”“]+)(”)(\]{2})/g, '$1$3$2');
		str = str.replace(/(\[{2}[^[|\]]+\|)(„)([^[|\]„”“]+\]{2}”)/g, '$2$1$3');
		str = str.replace(/(\[{2}[^[|\]]+\|[^[|\]+„”“]+„[^[|\]„”“]+)(\]{2})(”)/g, '$1$3$2');

		// na DYW
		str = str.replace(/(\d)–(krotn|letn|osobow|tysięczn)/g, '$1-$2');

		// REDAKCYJNE
		str = str.replace(/(?:\[{2})?([12]\d{3})?(?:\]{2})?([-–])(?:\[{2})?([12]\d{3})(?:\]{2})?([,;.] (?:IS[BS]N|s\.(?: |&nbsp;)))/g, '$1$2$3$4');

		str = str.replace(/(=\s*\[{2})([^[\]|]+\|)/g, '$1FoosEpulKA$2');
		str = str.replace(/(\{{2}([Ww]ładca|[Pp]olityk)[^}]+?\|[ \d]*(funkcja|tytuł|urząd)\s*=[\s\']*(\[{2}[^[\]|]+\|)?(\[{2})?)([a-ząćęłńóśźż])/g, function (a, poc, pod, poe, pof, pog, fil) {
		return poc + fil.toUpperCase();});
		str = str.replace(/(\{{2}([Ww]ładca|[Pp]olityk)[^}]+?\|[ \d]*(funkcja|tytuł|urząd)\s*=[\s\']*(\[{2}[^[\]|]+\|)?(\[{2})?)([a-ząćęłńóśźż])/g, function (a, poc, pod, poe, pof, pog, fil) {
		return poc + fil.toUpperCase();});
		str = str.replace(/(\{{2}([Ww]ładca|[Pp]olityk)[^}]+?\|[ \d]*(funkcja|tytuł|urząd)\s*=[\s\']*(\[{2}[^[\]|]+\|)?(\[{2})?)([a-ząćęłńóśźż])/g, function (a, poc, pod, poe, pof, pog, fil) {
		return poc + fil.toUpperCase();});
		str = str.replace(/(\{{2}([Ww]ładca|[Pp]olityk)[^}]+?\|[ \d]*(funkcja|tytuł|urząd)\s*=[\s\']*(\[{2}[^[\]|]+\|)?(\[{2})?)([a-ząćęłńóśźż])/g, function (a, poc, pod, poe, pof, pog, fil) {
		return poc + fil.toUpperCase();});
		str = str.replace(/(\{{2}([Ww]ładca|[Pp]olityk)[^}]+?\|[ \d]*(funkcja|tytuł|urząd)\s*=[\s\']*(\[{2}[^[\]|]+\|)?(\[{2})?)([a-ząćęłńóśźż])/g, function (a, poc, pod, poe, pof, pog, fil) {
		return poc + fil.toUpperCase();});
		str = str.replace(/FoosEpulKA/g, '');

		str = str.replace(/(\{\{Poprzednik Następca[ |]+urząd[ =]+(\[\[[^|\]]+\|)?)([a-ząćęłńóśźż])/g, function (a, poc, pod, fil) {
		return poc + fil.toUpperCase();});
		str = str.replace(/(v?align|bgcolor|bordercolor|border|cellpadding|cellspacing|class|colspan|height|nowrap|rowspan|style|width) *(=) *(("|foosEpulKZ)[- #%:;a-z\d]+("|foosEpulKL|foosEpulKZ))/gi, function (a, fil, kona, konb) {
		return fil.toLowerCase() + kona + konb;});
		str = str.replace(/(border|cellpadding|cellspacing|colspan|height|rowspan|width)(=\d)/gi, function (a, fil, kon) {
		return fil.toLowerCase() + kon;});
		str = str.replace(/(align="[a-z]+)("|foosEpulKL|foosEpulKZ)/gi, function (a, fil, kon) {
		return fil.toLowerCase()+kon;});
		str = str.replace(/(style=)("|foosEpulKZ)([a-z]+)(:)/gi, function (a, poc, insa, insb, kon) {
		return poc+insa+insb.toLowerCase()+kon;});

		str = str.replace(/(\{\{lang\s*\|[^}]+\}\})/gi, function (a, fil) {
		fil = fil.replace(/ *(\|) */g, '$1');
		fil = fil.replace(/([ |])\1+/g, '$1');
		fil = fil.replace(/\|(\}{2})/g, '$1');
		return fil;});
		str = str.replace(/(\n[ #*]+)\(en\) *(.+)/g, '$1$2 {{lang|en}}');
		str = str.replace(/\(en\)(\n)/g, '{{lang|en}}$1');

		str = str.replace(/(\[{2}[^[|\]]+\|[^[|\]]+\.)(:)(\]{2})/g, '$1$3$2');
		str = str.replace(/([Łł]acina\|łac)\.?(\]{2})\.?/g, '$1.$2');
		str = str.replace(/(\[{2}[Jj]ęzyk[ \u2552]białoruski\|biał)(?:orus)\.?(\]{2})\.?/g, '$1.$2');
		str = str.replace(/(\[{2}[Jj]ęzyk[ \u2552]bośniacki\|boś)n?\.?(\]{2})\.?/g, '$1n.$2');
		str = str.replace(/(\[{2}[Jj]ęzyk[ \u2552]bułgarski\|buł)g?\.?(\]{2})\.?/g, '$1g.$2');
		str = str.replace(/(\[{2}[Jj]ęzyk[ \u2552]francuski\|fr)a?n?c?\.?(\]{2})\.?/g, '$1.$2');
		str = str.replace(/(\[{2}[Jj]ęzyk[ \u2552]niemiecki\|nie)m?\.?(\]{2})\.?/g, '$1m.$2');
		str = str.replace(/(\[{2}[Jj]ęzyk[ \u2552]norweski\|nor)w?\.?(\]{2})\.?/g, '$1w.$2');
		str = str.replace(/(\[{2}[Jj]ęzyk[ \u2552]portugalski\|por)t?\.?(\]{2})\.?/g, '$1t.$2');
		str = str.replace(/(\[{2}[Jj]ęzyk[ \u2552]ukraiński\|uk)r?\.?(\]{2})\.?/g, '$1r.$2');

		str = str.replace(/([Jj]ęzyk[ \u2552]polski\|p)o?l\.?\]{2}\.?/g, '$1ol.]]');

		str = str.replace(/(\[{2}[Jj]ęzyk[^[|\]]+\|[^.[|\]]+\.\]{2})([^-\n '‘’"“”,;:!?/<{)])/g, '$1 $2');
		str = str.replace(/(\[{2}[Jj]ęzyk\u2552rosyjski\|r)u(s\.\]{2})/g, '$1o$2');
		str = str.replace(/(\'{2,3})((?:\[{2}(?:[Jj]ęzyk|[Łł]acin)[^\]]+\]{2}|(?:ang|łac|oryg|właśc)\.)(?: |&nbsp;))([^\']+\'{2,3})/g, '$2$1$3');
		str = str.replace(/(\/)1(?: |&nbsp;)(km|mieszkańca)\b/g, '$1$2');
		str = str.replace(/(\d)\. +(kobiet|mężczyzn|mieszkańców|(?:\[{2}[Mm]orga\|)?morgów|osób)/g, '$1 $2');
		str = str.replace(/((?:[\n ]|&nbsp;)[\'"([|]*(?:\d+[,.]?\d*[-–−])?\d+[,.]?\d*)(k?m\/[hs])\b/g, '$1 $2');
		// 136
		str = str.replace(/(\d) *[º˚°] *([CFС]|Blg|Rø)(?=[\n ,;:.…!?)\/<{\]'’"”])/g, '$1&nbsp;°$2');
		str = str.replace(/(\d) *° *(\[{2}Skala\u2552Celsjusza\|)Celsjusza(\]{2})/g, '$1&nbsp;$2°C$3');
		str = str.replace(/(\d)(\[{2}[Ss]kala\u2552Ballinga\|°Blg\]{2})/g, '$1&nbsp;$2');
		str = str.replace(/(\d)°(\[{2}[Ss]kala\u2552Ballinga\|)(Blg\]{2})/g, '$1&nbsp;$2°$3');
		str = str.replace(/(\d)(\[{2}[Ss]kala\u2552Celsjusza\|°[CС]\]{2})/g, '$1&nbsp;$2');
		str = str.replace(/(\d)°(\[{2}[Ss]kala\u2552Celsjusza\|)([CС]\]{2})/g, '$1&nbsp;$2°$3');
		str = str.replace(/(\d)(\[{2}[Ss]kala\u2552Fahrenheita\|°F\]{2})/g, '$1&nbsp;$2');
		str = str.replace(/(\d)°(\[{2}[Ss]kala\u2552Fahrenheita\|)(F\]{2})/g, '$1&nbsp;$2°$3');
		str = str.replace(/(\d)°(?: |&nbsp;)((?:[CFС]|Blg|Rø))(?=[\n ,;:.…!?)\/<{\]'’"”])/g, '$1&nbsp;°$2');
		str = str.replace(/(\d)(?: |&nbsp;)°(?: |&nbsp;)((?:[CFС]|Blg|Rø))(?=[\n ,;:.…!?)\/<{\]'’"”])/g, '$1&nbsp;°$2');
		str = str.replace(/(\d)\.(\d+(?: |&nbsp;)(?:\[{2}[Ss]kala\u2552[^|\]]+\|)?°(?:[CFС]|Blg|Rø)(?:\]{2})?)(?=[\n ,;:.…!?)\/<{\]'’"”])/g, '$1,$2');
		str = str.replace(/(\d)°([-–−]\d+[,.]?\d*(?: |&nbsp;)°(?:[CFС]|Blg|Rø))(?=[\n ,;:.…!?)\/<{\]'’"”])/g, '$1$2');
		str = str.replace(/°С(?=[\n ,;:.…!?)\/<{\]'’"”])/g, '°C');
		str = str.replace(/(\d)(°C)(?=[\n ,;:.…!?)\/<{\]'’"”])/g, '$1&nbsp;$2');
		str = str.replace(/([\n (|]|&nbsp;)-(\d+[,.]?\d*(?: |&nbsp;)(?:\[{2}skala\u2552[^|\]]+\|)?°)/gi, '$1–$2');
		// 137
		str = str.replace(/(\d +?tys) /g, '$1. ');
		str = str.replace(/(<br \/>|[\n (])(maks)([\n ,;:)])/g, '$1$2.$3');
		// 118
		str = str.replace(/nbsp;/g, 'foosEpulKA');
		str = str.replace(/[,;] *?(zm\.) */g, ', $1 ');
		str = str.replace(/foosEpulKA/g, 'nbsp;');
		// 119
		str = str.replace(/(\d(?: |&nbsp;)+(?:tys\.|[bm]l[dn])?(?: |&nbsp;)?(?:cm|dm|km|mm|mile|mil|m))2([ ,;:.…!?'’”<){\n])/g, '$1²$2');
		str = str.replace(/(\d(?: |&nbsp;)+(?:tys\.|[bm]l[dn])?(?: |&nbsp;)?(?:cm|dm|km|mm|mile|mil|m))3([ ,;:.…!?'’”<){\n])/g, '$1³$2');
		str = str.replace(/([ ([][A-Za-z.ąćęłńóśźż]+\/(?:cm|dm|km|mm|mile|mil|m))2([ ,;:.…!?'’”<){\n])/g, '$1²$2');
		str = str.replace(/([ ([][A-Za-z.ąćęłńóśźż]+\/(?:cm|dm|km|mm|mile|mil|m))3([ ,;:.…!?'’”<){\n])/g, '$1³$2');
		str = str.replace(/(\[{2}[Kk]ilometr\u2552kwadratowy\|km)2(\]{2})/g, '$1²$2');
		str = str.replace(/(\d(?: |&nbsp;)+m)3(\/s)\b/g, '$1³$2');
		str = str.replace(/(score\d(?:[- =\d]+))<sup>/g, '$1\u2553');
		str = str.replace(/(score\d(?:[- =\d]+))&sup/g, '$1\u2554');
		str = str.replace(/([^\n'>])(?:<sup>2<\/sup>|&sup2;)(\'*[\n ,;:.…!?)\/<{\]])/g, '$1²$2');
		str = str.replace(/([^\n'>])(?:<sup>3<\/sup>|&sup3;)(\'*[\n ,;:.…!?)\/<{\]])/g, '$1³$2');
		str = str.replace(/\u2554/g, '&sup');
		str = str.replace(/\u2553/g, '<sup>');
		str = str.replace(/([^[][[(](?:cm|dm|km|mm|mile|mil|m))2([)\]][^\]])/g, '$1²$2');
		str = str.replace(/([^[][[(](?:cm|dm|km|mm|mile|mil|m))3([)\]][^\]])/g, '$1³$2');
		// 120
		str = str.replace(/( )\/(\d+:\d+)\/([\n ])/g, '$1($2)$3');
		str = str.replace(/(\[{2}[^|\]]*?\d +)x( +\d[^|\]]*(?:\||\]{2}))/g, '$1foosEpulKA$2');
		str = str.replace(/(\d(?: |&nbsp;))x((?: |&nbsp;)\d)/g, '$1×$2');
		str = str.replace(/foosEpulKA/g, 'x');
		str = str.replace(/(<ref name=[^>]+?)\'( \/>)/g, '$1\u2553$2');
		str = str.replace(/([a-ząćęłńóśźżé])\'([\n ,;:.…!?<)\/{a-ząćęłńóśźżé]|&nbsp;)/gi, '$1’$2');
		str = str.replace(/([a-ząćęłńóśźżé])\'([\n ,;:.…!?<)\/{a-ząćęłńóśźżé]|&nbsp;)/gi, '$1’$2');
		str = str.replace(/([a-ząćęłńóśźżé][.…]+)\'([\n ,;:!?<)\/{]|&nbsp;)/gi, '$1’$2');
		str = str.replace(/\u2553/g, '\'');
		str = str.replace(/([\n (\/=])\'((?:[^\n ']+ ){0,2}[^\n ']+?’)/g, '$1‘$2');

		str = str.replace(/([^\n \[])(\[dostęp:? ?\d{1,4}[-.]\d{1,2}[-.]\d{1,4})/gi, '$1 $2');
		str = str.replace(/([\n ]\[dostęp:?)(\d{1,4}[-.]\d{1,2}[-.]\d{1,4})/gi, '$1 $2');
		str = str.replace(/(dostęp:? \d{1,4}[-.])(\d[-.]\d{1,4})/gi, '$10$2');
		str = str.replace(/(\[dostęp:? )0(\d\.\d{2}\.\d{4})/gi, '$1$2');
		str = str.replace(/(\| *data +dostępu *= *)0(\d\.\d{2}\.\d{4})/gi, '$1$2');
		str = str.replace(/([\n ]\[)D(ostęp)[ :]*(?:od)?[ :]*(?:(?:dnia|w dniu))?[ :]*(\d{1,4}[-.]\d{1,2}[-.]\d{1,4})/gi, '$1d$2 $3');
		str = str.replace(/([^[]\[dostęp \d{1,2}\.\d{2}\.\d{4})[ r.]+(\][^\]])/gi, '$1$2');
		str = str.replace(/((?:data|dostępu?)[ :=]+)(\d{1})[-–—−‒―.\/](\d{1,2})[-–—−‒―.\/](\d{4})/gi, '$1$4-$3-0$2');
		str = str.replace(/((?:data|dostępu?)[ :=]+)(\d{2})[-–—−‒―.\/](\d{1,2})[-–—−‒―.\/](\d{4})/gi, '$1$4-$3-$2');
		str = str.replace(/((?:data|dostępu?)[ :=]+\d{4})[-–—−‒―.\/](\d{1,2})[-–—−‒―.\/](\d)/gi, '$1-$2-$3');
		str = str.replace(/((?:data|dostępu?)[ :=]+\d{4}-\d{1,2}-)(\d ?[|}\]])/gi, '$10$2');
		str = str.replace(/((?:data|dostępu?)[ :=]+\d{4}-)(\d-\d{1,2} ?[|}\]])/gi, '$10$2');

		str = str.replace(/( k\.)((?:\[|\w){3})/g, '$1&nbsp;$2');
		str = str.replace(/(\n=+ *)[ZŹŻ]r[oó]d[lł][ao]( *=+(?=\n))/g, '$1Źródła$2');
		str = str.replace(/(\n=+ *(?:Bibliografia|Linki zewnętrzne) *=+\n)([^\n#'*•;<=\{].+[^\n:]\n)/g, '$1* $2');
		str = str.replace(/(\n=+ *(?:Bibliografia|Linki zewnętrzne) *=+\n)(\{{2}[Cc]ytuj)/g, '$1* $2');
		str = str.replace(/(\n=+ *Zobacz też *=+\n)(\[{2})/g, '$1* $2');
		str = str.replace(/(\n=+ *Zobacz też *=+\n\{{2}[^}]+?\}{2}\n)\n+(\*)/g, '$1$2');
		str = str.replace(/(\n[ *]*\[https?:.+)\n+(?=\n\[https?:)/g, '$1');
		str = str.replace(/(\n)(\[https?:)/g, '$1* $2');
		str = str.replace(/(\[{2}(?:Abstimmungspolizei|Kriminalpolizei|Ordnungspolizei|Sicherheitspolizei|Schutzpolizei)\|(?:A|Kri|Or|Si|Schu))P(o\]{2})/g, '$1p$2');
		str = str.replace(/(\[{2}A\.C\.\u2552[^\n[\]|]+\|A)(C)( [^\n[\]|]+\]{2})/g, '$1.$2.$3');
		str = str.replace(/(\[{2}F\.C\.\u2552[^\n[\]|]+\|F)(C)( [^\n[\]|]+\]{2})/g, '$1.$2.$3');
		str = str.replace(/(\[{2}AC\u2552[^\n[\]|]+\|A)\.(C)\.( [^\n[\]|]+\]{2})/g, '$1$2$3');
		str = str.replace(/(\[{2}FC\u2552[^\n[\]|]+\|F)\.(C)\.( [^\n[\]|]+\]{2})/g, '$1$2$3');
		str = str.replace(/([\n (|])a(l. (?:Jerozolimski|Ujazdowski))/g, '$1A$2');
		str = str.replace(/(\[{2}AllMusic)\|Allmusic(\]{2})/g, '$1$2');
		str = str.replace(/(Halicka) (Armia)/g, '$2 $1');
		str = str.replace(/(Halicką) (Armię)/g, '$2 $1');
		str = str.replace(/(Halickiej) (Armii)/g, '$2 $1');
		str = str.replace(/Armin +Van +Buuren/g, 'Armin van Buuren');
		str = str.replace(/([\n '„|][Aa]ttach)e\b/g, '$1é');
		str = str.replace(/Austro-Węgrach/g, 'Austro-Węgrzech');
		str = str.replace(/(\[{2}Białystok)(\]{2})u/g, '$1|Białymstoku$2');
		str = str.replace(/(\n=+ *Bibliografia *=+(\n\*.+)+|<ref(?: (?:group|name)[^\/>]+)?>[\s\S]+?<\/ref>)/gi, function(a, fil) {
		fil = fil.replace(/\[{2}(\d{4})\]{2}/g, '$1');
		fil = fil.replace(/\[{2}(Białystok|Bydgoszcz|Gdańsk|Katowice|Kielce|Kraków|Lublin|Łódź|Olsztyn|Opole|Poznań|Rzeszów|Szczecin|Toruń|Warszawa|Wrocław)\]{2}/g, '$1');
		return fil;});
		str = str.replace(/(\n=+ *(Bibliografia|Linki zewnętrzne) *=+(\n\{{2}commonscat\}{2})?\n([#•].+\n)+)/g, function(a, fil) {
		fil = fil.replace(/\n[#•]/g, '\n*');
		return fil;});
		str = str.replace(/(\d,\d{1,2}(?: |&nbsp;)[bm]ili(?:ard|on))ów\b/g, '$1a');
		str = str.replace(/(\d,\d{1,2}(?: |&nbsp;)tysi)ęcy\b/g, '$1ąca');
		str = str.replace(/(\d) (bitow(?:a|ą|e|ego|ej|emu|i|y|ych|ym|ymi))\b/g, '$1-$2');
		str = str.replace(/( (?:\[{2})?)b(luetooth)/g, '$1B$2');
		str = str.replace(/( \[b\.n\.s)(\])/g, '$1.$2');
		str = str.replace(/([\n '|][Cc]harg)[eé]( d)['’](affaires)/g, '$1é$2’$3');
		str = str.replace(/(\[{2}Cieśnina[^|]*\|Cieś)(\.)/gi, '$1n$2');
		str = str.replace(/([Cc]oll[eè]ge['’])y/g, '$1ów');
		str = str.replace(/(\{{2}cytuj[^{}]+\|\s*data(?: dostępu)?\s*=\s*)\[*(\d{1,2})(?:\s|&nbsp;|\u2552)(stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)\]*(?:\s|&nbsp;|\u2552)\[*(\d{4})\]*(?:(?:\s|&nbsp;|\u2552)r\.?)?(\s*[|}])/gi, '$1$2 $3 $4$5');
		str = str.replace(/(\{{2}cytuj[^{]+\| *)(?:iss\.?|issue)( *=[^}]+\}{2})/gi, '$1wydanie$2');
		str = str.replace(/(\{{2}cytuj[^}]+\| *)(?:pages?|seiten?|strona?)( *=[^}]+\}{2})/gi, '$1strony$2');
		str = str.replace(/(\{{2}cytuj[^{]+\| *)(?:vol\.?|volume)( *=[^}]+\}{2})/gi, '$1wolumin$2');
		str = str.replace(/(\{{2}cytuj[^{]+\| *nazwisko) *1( *=[^}]+\}{2})/gi, '$1$2');
		str = str.replace(/(\{{2}cytuj[^{]+\| *imię) *1( *=[^}]+\}{2})/gi, '$1$2');
		str = str.replace(/(\{{2}cytuj[^{]+\| *autor) *1( *=[^}]+\}{2})/gi, '$1$2');
		str = str.replace(/(\{{2}cytuj[^{]+\| *autor link) *1( *=[^}]+\}{2})/gi, '$1$2');
		str = str.replace(/(ywilno)[-–—−‒― ]+(prawn)/g, '$1$2');
		str = str.replace(/(\| *(?:czas +trwania|długość) *= *o*k*\.* *\d+ *min)\./g, '$1');
		str = str.replace(/((?:[\n (|]|&nbsp;)\d+[,.]?\d*)(€)/g, '$1 $2');
		str = str.replace(/(\n *\| *[^\n=]+= *\[*\d{1,2}(?:\u2552| |&nbsp;)(?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)\]*(?: |&nbsp;)\[*\d{3,4}\]*)(?: |&nbsp;)r\.(?=\n)/gi, '$1');
		str = str.replace(/(\n *\| *[^\n=]+= *\[*(?:styczeń|luty|marzec|kwiecień|maj|czerwiec|lipiec|sierpień|wrzesień|październik|listopad|grudzień)\]*(?: |&nbsp;)\[*\d{3,4}\]*)(?: |&nbsp;)r\.(?=\n)/gi, '$1');   // usuwa w infoboxie r. na koncu daty z samym miesiacem
		str = str.replace(/(\n\{{2})Disambig(\}{2})/gi, '$1ujednoznacznienie$2');
		str = str.replace(/(dniowo|nocno|środkowo)[-–—−‒― ]*(wschodni|zachodni)/gi, '$1-$2');
		str = str.replace(/(domyśl)e(ć)/gi, '$1i$2');
		str = str.replace(/(dopatrz)e(ć)/gi, '$1y$2');
		str = str.replace(/(d)y(gitaliz)/gi, '$1i$2');
		str = str.replace(/([a-ząćęłńóśźż]\]*)-(elekt|elekta|elektowi|elektem|elekcie|elekci|elektów|elektom|elektami|elektach)([\n ,;:.…!?'’”<)\]])/g, '$1 $2$3');
		str = str.replace(/([Ff]izyczno)[-–—−‒― ]+[Gg](eograficzn)/g, '$1g$2');
		str = str.replace(/(formalno)[-–—−‒― ]+(prawn)/gi, '$1-$2');
		str = str.replace(/([!|] *([BG])\+ *(?:[!|]{2}) *\2)[-–—‒―]( *[!|])/g, '$1−$3');
		str = str.replace(/([^'])\'{2}(\[{2}[^|\]]+\((?:gazeta|pismo)\)\|[^\]]+\]{2})\'{2}([^'])/g, '$1„$2”$3');
		str = str.replace(/([\n (])(Do|do|obrębie|obszarze|Od|od|terenie|Z|z) +(\[{2}Generalne\u2552Gubernatorstwo\|Generaln)ej +Guberni\]{2}/g, '$1$2 $3ego Gubernatorstwa]]');
		str = str.replace(/([\n (])(W|w) +(\[{2}Generalne\u2552Gubernatorstwo\|Generaln)ej +Guberni\]{2}/g, '$1$2 $3ym Gubernatorstwie]]');
		str = str.replace(/(powierzchni[aąę]?(?: ok\.)?(?: |&nbsp;)?[-–—−‒― \d,.]+(?: |&nbsp;)?(?:tys\.|[bm]l[dn])?(?: |&nbsp;)?)\[{2}hektar(?:\|ha)?\]{2}(?:ami|ach|a|em|owi|om|ów|y|ze)?/gi, '$1ha');
		str = str.replace(/(\|\+|\|-|[ !|])href *= *["|foosEpulKZ][- a-ząćęłńóśźż\u00C0-\u017F\u1E00-\u1FBC\d#.,:;()\/]+["|foosEpulKZ]/gi, '$1');
		str = str.replace(/( \(?(?:\d[-–,.\d]*)) *([kMGT])hz(?![a-z])/g, '$1 $2Hz');
		str = str.replace(/(\|\s*imię[\sr\d]*=\s*[A-ZĆŁÓŚŹŻ\u0410-\u042f])([A-ZĆŁÓŚŹŻ\u0410-\u042f])([A-ZĆŁÓŚŹŻ\u0410-\u042f]\.\s*[|}])/g, '$1.$2.$3');
		str = str.replace(/(\|\s*imię[\sr\d]*=\s*[A-ZĆŁÓŚŹŻ\u0410-\u042f])([A-ZĆŁÓŚŹŻ\u0410-\u042f]\.\s*[|}])/g, '$1.$2');
		str = str.replace(/(\| ?imię\d* ?= ?(?:[A-ZĆŁÓŚŹŻ][a-ząćęłńóśźż]{2,} )?[A-ZĆŁÓŚŹŻ\u0410-\u042f]\.) ([A-ZĆŁÓŚŹŻ\u0410-\u042f]\. ?[|}])/g, '$1$2');
		str = str.replace(/(\| ?imię\d* ?= ?[A-ZĆŁÓŚŹŻ\u0410-\u042f]\.) ([A-ZĆŁÓŚŹŻ\u0410-\u042f]\.) ([A-ZĆŁÓŚŹŻ\u0410-\u042f]\. ?[|}])/g, '$1$2$3');
		str = str.replace(/(\[{2}[Ii]nsurekcja\u2552[Kk]ościuszkowska\|)powstani[au] kościuszkowski(?:ego|m)/g, '$1insurekcji kościuszkowskiej');
		str = str.replace(/(\| *)isben( *=)/gi, '$1isbn$2');
		str = str.replace(/(IS[BS]N)[-–—−‒―](\d-*\d-*\d-*\d-*\d-*\d-*\d-*\d-*)/gi, '$1 $2');
		str = str.replace(/(IS[BS]N):( )/gi, '$1$2');
		str = str.replace(/([\n |]IS[BS]N[ =]+[-\d]+) *[-–—−‒―] *([-\d]+) *[-–—−‒―] *([-\d]+)/gi, '$1-$2-$3');
		str = str.replace(/([\n |]IS[BS]N[ =]+[-\d]+) *[-–—−‒―] *([-\d]+) *[-–—−‒―] *([-\d]+)/gi, '$1-$2-$3');
		str = str.replace(/([\n |]IS[BS]N[ =]+[-\d]+) *[-–—−‒―] *([-\d]+)/gi, '$1-$2');
		str = str.replace(/(\{{2}IS[BS]N *\| *[-–—−‒―\dx]+\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(IS[BS]N) *(\|) */g, '$1$2');
		fil = fil.replace(/[-–—−‒―]/g, '-');
		return fil;});
		str = str.replace(/((?:IS[BS]N [-x\d]+)|(?:\{{2}IS[BS]N\|[-x\d]+\}{2})) +(?:pp|p|str|ss|s)(\.) *(\d)/gi, '$1, s$2 $3');
		str = str.replace(/((?:IS[BS]N [-x\d]+)|(?:\{{2}IS[BS]N\|[-x\d]+\}{2}))[,;]?(\n[^|}])/gi, '$1.$2');
		str = str.replace(/;( (?:(?:IS[BS]N [-x\d]+)|(?:\{{2}IS[BS]N\|[-x\d]+\}{2}))\.(?:\n|(?:<\/ref>|<ref (?:group|name)[^>]+\/+>)))/gi, ',$1');
		str = str.replace(/([^\n =(])(\{{2}ISBN\|)/gi, '$1 $2');
		str = str.replace(/(\{{2}cytuj[^{}]+\| ?is[bs]n ?= ?)is[bs]n ?([^{}]+\}{2})/gi, '$1$2');
		str = str.replace(/(\{{2}cytuj\s*(?:grę komputerową|książkę|odcinek|pismo|stronę)*\s*\|[^{}]+?\|\s*)\[*ISBN\]*(\s*)=*(\s*\d[^{}]*\}{2})/gi, '$1isbn$2=$3');
		str = str.replace(/(\{{2}cytuj\s*(?:grę komputerową|książkę|odcinek|pismo|stronę)*\s*\|[^{}]+?\|\s*)\[*ISSN\]*(\s*)=*(\s*\d[^{}]*\}{2})/gi, '$1issn$2=$3');
		str = str.replace(/(\[{2}[^(\]]+\(jezioro\)\|)((?:jeziora|jeziorem|jezioro|jeziorze) )([A-ZĄĆĘŁŃÓŚŹŻ][^\]]+\]{2})/gi, '$2$1$3');
		str = str.replace(/reko-?(katolick)/g, 'recko$1');
		str = str.replace(/(olsko|recko|taro|zymsko)[-–](katolick)/g, '$1$2');
		str = str.replace(/(reko|taro)[-–](katolik)/g, '$1$2');
		str = str.replace(/([\n |][(='‘’"„”“]*[Kk]ongresm)a/g, '$1e');
		str = str.replace(/(\n \| *funkcja *= *)kongreswoman /gi, '$1Kongresmenka ');
		str = str.replace(/k(onstytucj. 3 maja)/g, 'K$1');
		str = str.replace(/(\bkpt)( |&nbsp;)/gi, '$1.$2');
		str = str.replace(/(\d(?: |&nbsp;)km\/godz)([ \n,;:)\]<{])/gi, '$1.$2');
		str = str.replace(/(\[{2}Krasnystaw)(\]{2})ie/g, '$1|Krasnymstawie$2');
		str = str.replace(/\b(krwio)o(bieg)/gi, '$1$2');
		str = str.replace(/([Kk]tó(?:r[aey]|rzy))(by)/g, '$1 $2');
		str = str.replace(/(kulturalno|naukowo)[-–—−‒― ]+(badawcz|dydakt|oświatow|wydawnicz)/g, '$1-$2');
		str = str.replace(/([^\n (/=>])(\{{2}lang\|)/gi, '$1 $2');
		str = str.replace(/\b(lata?c?h? \d0)\'([^'])/gi, '$1.$2');
		str = str.replace(/\b(lata?c?h? \d0. i \d0)\'([^'])/gi, '$1.$2');
		str = str.replace(/(Lexis) +(Nexis)/g, '$1$2');
		str = str.replace(/(\[{2})Liège\|Liege(\]{2})/g, '$1Liège$2');
		str = str.replace(/ +lub\/i +/g, ' i/lub ');
		str = str.replace(/\b(mecz)y\b/g, '$1ów');
		str = str.replace(/((?:doradc|holding|koncern|konglomerat|magnat|patron|patronat|potenat|przedsiębiorc|przemysł|rynek|rynk)(?:a|u|y)? medi)aln(ego|y)/gi, '$1ow$2');
		str = str.replace(/(\bmiejsko)[-– ]+(wiejsk)/g, '$1-$2');
		str = str.replace(/(\{{2}cytuj[^}]+\| *miesiąc *= *)(styczeń|luty|marzec|kwiecień|maj|czerwiec|lipiec|sierpień|wrzesień|październik|listopad|grudzień)/gi, function (a, poc, fil) {
		return poc + fil.toLowerCase();});
		str = str.replace(/(\{{2}cytuj[^}]+\| *data *= *)(styczeń|luty|marzec|kwiecień|maj|czerwiec|lipiec|sierpień|wrzesień|październik|listopad|grudzień)/gi, function (a, poc, fil) {
		return poc + fil.toLowerCase();});
		str = str.replace(/([\n (]\'*[Mm]\.) *(in) *([,:])/g, '$1$2.$3');
		str = str.replace(/([\n (]\'*[Mm]\.) *(in\.)( *)/g, '$1$2 ');
		str = str.replace(/([\n (]\'*[Mm]\.in) /g, '$1. ');
		str = str.replace(/([\n (]\'*[Mm]\.in\.) ([,:])\.* */g, '$1$2 ');
		str = str.replace(/\bm\.in([,:])/g, 'm.in.$1');
		str = str.replace(/(m\.in\.) +(\)|\{{2}(?:[Cc]ytuj |[ru])|<ref)/g, '$1$2');
		str = str.replace(/(\d(?: |&nbsp;)[bm]l[dn])\.([,;:)])/g, '$1$2');
		str = str.replace(/(\d(?: |&nbsp;)[bm]l[dn])\.((?: |&nbsp;)[a-zćłóśźż])/g, '$1$2');
		str = str.replace(/([\n (])(do|dla|ku|nad?|od?|prze[dz]|pod?|u|wraz z|w|za?) (m\.in\.|np\.)([ :])/g, '$1$3 $2$4');
		str = str.replace(/([Nn]adw)y(ręż)/g, '$1e$2');
		str = str.replace(/(arodowo)[-–](wyzwoleńcz)/g, '$1$2');
		str = str.replace(/\[{2}[Nn]aszej[ \u2552]ery\|(n\.e\.)\]{2}/g, '$1');
		str = str.replace(/\[{2}[Pp]rzed[ \u2552]naszą[ \u2552]erą\|(p\.n\.e\.)\]{2}/g, '$1');
		str = str.replace(/(\W[Nn]ie)(naj)/g, '$1 $2');
		str = str.replace(/(N)•(m[^•])/g, '$1·$2');
		str = str.replace(/([ (]m)etr(?:ac?h?|ów|y)?( +\[*[NPnp]\.p\.m\.)/g, '$1$2');
		str = str.replace(/(\[{2})[NPnp]\.p\.m\.\|(m )([np]\.p\.m\.\]{2})/g, '$2$1$3');
		str = str.replace(/(\d)(m(?: |&nbsp;)(?:\[{2})?[np]\.p\.m\.)/g, '$1 $2');
		str = str.replace(/([^\d]\d)(?: |&nbsp;)(\d{3}(?: |&nbsp;)m(?: |&nbsp;)(?:\[{2})?[np]\.p\.m\.)/g, '$1$2');
		str = str.replace(/(\n.+?\[{2}n\.p\.m\.\]{2})(.*(\n.+)*)/g, function(a, poc, fil, ins) {
		fil = fil.replace(/\[{2}(n\.p\.m\.)\]{2}/g, '$1');
		return poc + fil;});
		str = str.replace(/(\n.+?\[{2}p\.p\.m\.\]{2})(.*(\n.+)*)/g, function(a, poc, fil, ins) {
		fil = fil.replace(/\[{2}(p\.p\.m\.)\]{2}/g, '$1');
		return poc + fil;});
		str = str.replace(/(\{{2}Cytuj [^}]+\| ?data ?= ?)Nr/gi, '$1nr');
		str = str.replace(/(\{{2}odn\|[^{}]+\|)[ps]+ *= *(\d[^{|}]+?)[,;.]*(\}{2})/g, '$1s=$2$3');
		str = str.replace(/(\{{2}odn\|[^{}]+s=[^{|}]+) i( [\d–]+\}{2})/g, '$1,$2');
		str = str.replace(/([\n („]ok) /g, '$1. ');
		str = str.replace(/([\n („]ok\.)([^\n &:)])/g, '$1 $2');
		str = str.replace(/([\n („>])Ok\. /g, '$1Około ');
		str = str.replace(/( ['(]*[Oo]p\. ?)[Cc](it)\.*([,;:']?[\n )])/g, '$1c$2.$3');
		str = str.replace(/([\n (]os)(\/km)/g, '$1.$2');
		str = str.replace(/(\[{2}Płyta[ \u2552]gramofonowa\|\d{1,2})(?:["”]|foosEpulKL)/gi, '$1″');
		str = str.replace(/((?: |&nbsp;)w\.)(p\.n\.e\.)/g, '$1 $2');
		str = str.replace(/ pne\.?([\n ,;:!?'’”)\]])/g, ' p.n.e.$1');
		str = str.replace(/[-—−‒―÷]((?:\[{2}\d+[ \u2552]|\d+(?: |&nbsp;))(?:r\.(?: |&nbsp;))?(?:p\.)?n\.e\.)/g, '–$1');
		str = str.replace(/(\[{2})(\d{1,4})([ \u2552]p\.n\.e\.)(\]{2}[-–](?:\[{2})?\d{1,4}[ \u2552]p\.n\.e\.(?:\]{2})?)/g, '$1$2$3|$2$4');
		str = str.replace(/([\n (]\d{1,4}\??)(?: |&nbsp;)p\.n\.e\.(?: |&nbsp;)?([-–])(?: |&nbsp;)?((?:\[{2})?\d{1,4}\??[ \u2552]p\.n\.e\.(?:\]{2})?)/g, '$1$2$3');
		str = str.replace(/((?: |&nbsp;)p\.n\.e\.)([-–])(\d+(?: |&nbsp;)n\.e\.)/g, '$1 $2 $3');
		str = str.replace(/(\[{2})([IVX]+)([ \u2552]wiek[ \u2552](?:p\.)?n\.e\.)(\]{2})[-– ]+(\[{2}[IVX]+[ \u2552]wiek[ \u2552](?:p\.)?n\.e\.\]{2})/g, '$1$2$3|$2$4–$5');
		str = str.replace(/(południow|północ\]*n)((?:y|ego|emu|ym)\]*)[-–](\[*(?:wsch[oó]d|zach[oó]d))/gi, '$1$2 $3');
		str = str.replace(/([ (]p)ó(łn\.)/g, '$1$2');
		str = str.replace(/\b([Pp]ł?[dn])[-–. ]+(wsch|zach)\.?([,;:.)!?]?[\n ])/g, '$1.-$2.$3');
		str = str.replace(/(popularno|fantastyczno)[-– ]+(naukow)/gi, '$1$2');
		str = str.replace(/\b([Pp]o) +(za )/g, '$1$2');
		str = str.replace(/(\()pod (red\.\))/g, '$1$2');
		str = str.replace(/([^[])\[r(ed\.)\]([^\]])/gi, '$1(r$2)$3');
		str = str.replace(/(Powstanie[ \u2552])['‘](44)/g, '$1’$2');
		str = str.replace(/(nr\.? \d+)( poz\. \d)/gi, '$1,$2');
		str = str.replace(/(\d)(?: |&nbsp;)*\[{2}Procent\|(%)\]{2}/gi, '$1$2');
		str = str.replace(/(\d)(?: |&nbsp;)(%[ ,;:.…!?'‘’"„”“)<{])/g, '$1$2');
		str = str.replace(/\bpseud\.((?:\]{2})?:? )/g, 'ps.$1');
		str = str.replace(/(\[{2}Pseudonim\|ps)(\]{2})\./gi, '$1.$2');
		str = str.replace(/([\n (]ps\.:?)(\')/g, '$1 $2');
		str = str.replace(/([\n (]ps\.:?) *(["„”])/g, '$1 „');
		str = str.replace(/((?:\[{2}Pseudonim\|ps\.\]{2}|ps\.):?(?: „[^”]+?”,)* )["„”“]?\'{2}["„”“]?([^']+?)["„”“]?\'{2}["„”“]?(, )["„”“]?\'{2}["„”“]?([^']+?)["„”“]?\'{2}["„”“]?(, )["„”“]?\'{2}["„”“]?([^']+?)["„”“]?\'{2}["„”“]?(, )["„”“]?\'{2}["„”“]?([^']+?)["„”“]?\'{2}["„”“]?/gi, '$1„$2”$3„$4”$5„$6”$7„$8”')
		str = str.replace(/((?:\[{2}Pseudonim\|ps\.\]{2}|ps\.):?(?: „[^”]+?”,)* )["„”“]?\'{2}["„”“]?([^']+?)["„”“]?\'{2}["„”“]?(, )["„”“]?\'{2}["„”“]?([^']+?)["„”“]?\'{2}["„”“]?/gi, '$1„$2”$3„$4”')
		str = str.replace(/((?:\[{2}Pseudonim\|ps\.\]{2}|ps\.):?(?: „[^”]+?”,)* )["„”“]?\'{2}["„”“]?([^']+?)["„”“]?\'{2}["„”“]?/gi, '$1„$2”')
		str = str.replace(/ +pt\.?: */g, ' pt. ');
		str = str.replace(/\b([Pp]ur)e(e)/g, '$1é$2');
		str = str.replace(/([ (]p)\.(w\. )/g, '$1$2');
		str = str.replace(/([\n („']\d{4} +r)([\n )|”'])/g, '$1.$2');
		str = str.replace(/(\d )r(\. \d)/g, '$1foosEpulKA$2');
		str = str.replace(/ r\. +(\[{2}[12]?\d{3}\]{2})\./g, ' $1 r.');
		str = str.replace(/ r\. +(\[{2}[12]?\d{3}\]{2}) /g, ' $1 r. ');
		str = str.replace(/ r\. +(\[{2}[12]?\d{3}\]{2})([\n,;:!?'”<)])/g, ' $1 r.$2');
		str = str.replace(/foosEpulKA/g, 'r');
		str = str.replace(/(\[{2}\d{1,4}\]{2})(r\.)/g, '$1 $2');
		str = str.replace(/(\[{2}\d+)\|\d+( rok(?:iem|u))(\]{2})/g, '$1$3$2');
		str = str.replace(/(\[{2}I\u2552rozbiór\u2552Polski\|)[Pp]ierwsz(?:y|ego|emu|ym)( roz)/g, '$1I$2');
		str = str.replace(/(\[{2}II\u2552rozbiór\u2552Polski\|)[Dd]rug(?:i|iego|iemu|im)( roz)/g, '$1II$2');
		str = str.replace(/(\[{2}III\u2552rozbiór\u2552Polski\|)[Tt]rzec(?:i|iego|iemu|im)( roz)/g, '$1III$2');
		str = str.replace(/( rozdz\.) *(.)/g, '$1 $2');
		str = str.replace(/(\[{2}[^\n\]]+?\|(?:I|II|III|IV) Rzecz)(pospolitej)/g, '$1y$2');
		str = str.replace(/(\[{2}(?:I|II|III|IV)\u2552Rzeczpospolita\|Rzecz)(pospolitej)/g, '$1y$2');
		str = str.replace(/((?:I|II|III|IV|ierwszej|rugiej|rzeciej|zwartej) Rzecz)(pospolitej ==)/g, '$1y$2');
		str = str.replace(/(Rzecz)(pospolitej Ludowej ==)/g, '$1y$2');
		str = str.replace(/(\[{2}Rzeczpospolita\u2552Obojga\u2552Narodów\|Rzecz)(pospolitej)/g, '$1y$2');
		str = str.replace(/(\|Rzecz)(pospolitej Polskiej)/g, '$1y$2');
		str = str.replace(/(\[{2}Rzeczpospolita\u2552(?:Polska|Szlachecka)\|Rzecz)(pospolitej)/g, '$1y$2');
		str = str.replace(/(Rzeczpospolita\u2552Ludowa\|Polskiej Rzecz)(pospolitej)/g, '$1y$2');
		str = str.replace(/(Prezydenci i premierzy Drugiej Rzecz)(pospolitej)/g, '$1y$2');
		str = str.replace(/(\[{2}[^[|\]]*Rzeczypospolitej[^[|\]]*\|[^[|\]]*Rzecz)(pospolitej[^[|\]]*\]{2})/g, '$1y$2');
		str = str.replace(/( [Ss])s?(\.)(\d+[-–]?\d*\.<\/ref>)/g, '$1$2 $3');
		str = str.replace(/([ (](?:skala|skali) 1) *(:) */g, '$1$2');
		str = str.replace(/( 1:\d{1,3})(\d{3})(000[^\d])/g, '$1 $2 $3');
		str = str.replace(/( 1:\d{2,3})(000[^\d])/g, '$1 $2');
		str = str.replace(/(społeczno) *[-–—−‒―]+ *([a-ząćęłńóśźż])/gi, '$1-$2');
		str = str.replace(/(sportowo)[-–—−‒― ]+(pożarnicz|rehabilitacyjn|rekreacyjn|szkole?n|techniczn|treningow|turystyczn|użytkow|widowiskow|wychowawcz|wypoczynkow)/gi, '$1-$2');
		str = str.replace(/(stan (?:na|w(?: |&nbsp;)dniu):? )\[*(\d{1,2}(?: |&nbsp;|\u2552)(?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia))\]*( )\[*(\d{4})(\]{2})?/gi, '$1$2$3$4');
		str = str.replace(/(Statystyczny Rzecz)(pospolitej Polskiej)/g, '$1y$2');
		str = str.replace(/ +z +(\[{2}[^[|]+?\|Rzecz)(pospolitą)/g, ' z $1ą$2');
		str = str.replace(/(\n[ #*:;]*\[https?:.+ )Oficjalna strona(\]\n)/g, '$1Strona oficjalna$2');
		str = str.replace(/((?:[\n (]|&nbsp;)(?:obr|strz))(\/min)/g, '$1.$2');
		str = str.replace(/((?:obr|strz)\.\/min)\.([,;:!?'’”{)])/g, '$1$2');
		str = str.replace(/(szkol(?:no|eniowo))[-–—−‒― ]+(akrobacyjn|badawcz|bojow|gimnazjaln|łącznikow|myśliwsk|przedszkoln|sportow|treningow|wychowawcz|wyczynow|wypoczynk|zapasow)/gi, '$1-$2');
		str = str.replace(/([\n >]['"„(]*(?:[Nn]a|[Oo]|[Pp]rzez|[Ww]) )tą /g, '$1tę ');
		str = str.replace(/([\n |]['"„]*[Tt])ą( ['"„]*[-\wąćęłńóśźż]+?(?:ę|ść)['"”]*[\n ,;:.…!?)])/g, '$1ę$2');
		str = str.replace(/([\n (][Tt]el)(\/[Ff]a(?:ks|x))/g, '$1.$2');
		str = str.replace(/(, tym bardziej),( że )/g, '$1$2');
		str = str.replace(/(\d) +tyś\./g, '$1 tys.');
		str = str.replace(/(\[{2})(\d+)\|\2([^\]]+)(\]{2})/g, '$1$2$4$3');
		str = str.replace(/([ (](?:ur|zm)\.) *(ok)oło( |&nbsp;)/g, '$1 $2.$3');
		str = str.replace(/([ (](?:ur|zm))( |&nbsp;)(w(?: |&nbsp;)|(?:\[{2})?\d)/g, '$1.$2$3');
		str = str.replace(/([ (](?:ur|zm)\.)((?:\[{2})?\d)/g, '$1 $2');
		str = str.replace(/((?:\(|[-–,] )(?:ur|zm)\.) *w* *((?:ok\.(?: |&nbsp;))?(?:\[{2})?\d{3,4}(?:\]{2})?)(?: |&nbsp;)*(?:r\.|roku)?(?=\)|, zm\.| –)/g, '$1 $2');
		str = str.replace(/([ (](?:ur|zm)\.)(?: |&nbsp;)w((?: |&nbsp;)(?:\[{2})?\d{1,2}(?: |&nbsp;)(?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia))/g, '$1$2')
		str = str.replace(/(\((?:ur|zm)\.[ \u2552[?\dok.]+?(?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)*\]* ?\[*\d*\]*)(?: |&nbsp;)+(?:r\.|roku)([^\w])/g, '$1$2');
		str = str.replace(/(\(ur\. +(?:ok\.(?: |&nbsp;)*)?(?:(?:\[{2})?(?:\d{1,2}[ \u2552](?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia))(?:\]{2})? ?)?(?:\[{2})?\d{3,4}(?:\]{2})?) *[-–—−;] *(zm\.)/g, '$1, $2');
		str = str.replace(/(\(ur\.(?: |&nbsp;)(?:(?:ok\.|przed|po)(?: |&nbsp;))*(?:(?:\[{2})?\d{1,2}(?: |\u2552|&nbsp;)(?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)(?:\]{2})?(?: |&nbsp;))?(?:\[{2})?\d{3,4}(?:(?: |\u2552|&nbsp;)(?:(?:p\.)?n\.e\.))?(?:\]{2})?(?: we? .+?)?(?:<ref(?: (?:group|name)[^\/>]+)?>[^<]+<\/ref>|<ref (?:group|name)[^\/>]+\/>|\{{2}(?:odn|[ru])\|[^}]+\}{2})*)(?:,| –)( zm\.(?: |&nbsp;)(?:(?:ok\.|przed|po)(?: |&nbsp;))*(?:(?:\[{2})?\d{1,2}(?: |\u2552|&nbsp;)(?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)(?:\]{2})?(?: |&nbsp;))?(?:\[{2})?\d{3,4}(?:(?: |\u2552|&nbsp;)(?:(?:p\.)?n\.e\.))?(?:\]{2})?)(?:(?: |&nbsp;)(?:roku|r\.))?([ )])/g, '$1,$2$3');
		str = str.replace(/vis[-– ]+[aà][-– ]+vis/g, 'vis-à-vis');
		str = str.replace(/\(w:\) */g, '[w:] ');
		str = str.replace(/\(w\): */g, '[w:] ');
		str = str.replace(/\[w\]: */g, '[w:] ');
		str = str.replace(/\[w\}: */g, '[w:] ');
		str = str.replace(/\', *\[w\.\] */g, '\', [w:] ');
		str = str.replace(/\', *\[w\] */g, '\', [w:] ');
		str = str.replace(/([^,;:.=]) (\[w:\]) */g, '$1, $2 ');
		str = str.replace(/ (wrestling)/gi, '\x01$1');
		str = str.replace(/([\n '"”(][Ww]) +(['"„]*(?:\[{2}[^|\]]+\|)?['"„]*(?:[FVWfvw][bcdgjklłmnpqrstvwxz]+[aąeęioóuy]))/g, '$1e $2');
		str = str.replace(/([\n '"”(][Ww]) +(['"„]*\[{2}(?:[FVWfvw][bcdgjklłmnpqrstvwxz]+[aąeęioóuy])[^|\]]*\]{2})/g, '$1e $2');
		str = str.replace(/\x01/gi, ' ');
		str = str.replace(/\b(w\/g|wg\.) /g, 'wg ');
		str = str.replace(/\bWg.? /g, 'Według ');
		str = str.replace(/(\[{2}Wi-Fi)\|WiFi(\]{2})/g, '$1$2');
		str = str.replace(/W\. +(Brytani)/g, 'Wlk. $1');
		str = str.replace(/(widowiskowo)[-–—−‒― ]+(sportow)/gi, '$1-$2');
		str = str.replace(/–(wiecz)/gi, '-$1');
		str = str.replace(/( w)e( \[{2}Wiedeń\|Wiedniu\]{2})/gi, '$1$2');
		str = str.replace(/(wietrzno)[-–—−‒― ]*[Dd](esantow)/g, '$1d$2');
		str = str.replace(/([(| ]właś)ć\./g, '$1c.');
		str = str.replace(/(\n\'{2,5}[^']+\'{2,5})( właśc\.)/g, '$1,$2');
		str = str.replace(/(\[{2}I\u2552wojna\u2552światowa\|)pierwsz(?:a|ą|ej)( woj)/gi, '$1I$2');
		str = str.replace(/(\[{2}II\u2552wojna\u2552światowa\|)drug(?:a|ą|iej)( woj)/gi, '$1II$2');
		str = str.replace(/(wojn(?:a|ą|ę|ie|y) )30-(letni)/g, '$1trzydziesto$2');
		str = str.replace(/([^\w][Ww]) +(skutek)/g, '$1$2');
		str = str.replace(/(Wyd)\.( Nauk)(?:\.|owe)( PWN)/g, '$1awnictwo$2owe$3');
		str = str.replace(/Wydawn?\. /g, 'Wyd. ');
		str = str.replace(/Państwowe Wyd\. Naukowe/g, 'Państwowe Wydawnictwo Naukowe');
		str = str.replace(/Uczelniane Wydawnictw[ao] Naukowo[-– ]+Dydaktyczne AGH/gi, 'Uczelniane Wydawnictwa Naukowo-Dydaktyczne AGH');
		str = str.replace(/Wydawnictw[ao] Naukow[eo](?:[-– i]|&nbsp;)+Techniczne/gi , 'Wydawnictwa Naukowo-Techniczne');
		str = str.replace(/(Wyd)[a-z.]+ (Artystyczne i(?: |&nbsp;)Filmowe|Komunikacji i(?: |&nbsp;)Łączności|Szkolne i(?: |&nbsp;)Pedagogiczne|Naukowo-Techniczne)/g, '$1awnictwa $2');
		str = str.replace(/(Zakład Narodowy im\. Ossolińskich )[-–]( Wyd)(?:awn)?\./gi, '$1–$2awnictwo');
		str = str.replace(/(\[{2}YouTube)\|youtube(\]{2})/gi, '$1$2');
		str = str.replace(/( z) (['’‘"„”“«»[]*(?:\[{2}[^|\]]+\|)?St\.?[- \u2552])/g, '$1foosEpulKA$2');
		str = str.replace(/([\n '"”(][Zz]) +(['"„]*(?:\[{2}[^|\]]+\|)?['"„]*(?:[Rr]z|[Ss][hz]|[Śś]|[Zz]|[Źź]|[Żż])[bcćdfgjklłmnńpqrsśtvwxzźż])/g, '$1e $2');
		str = str.replace(/([\n '"”(][Zz]) +(['"„]*\[{2}(?:[Rr]z|[Ss][hz]|[Śś]|[Zz]|[Źź]|[Żż])[bcćdfgjklłmnńpqrsśtvwxzźż][^|\]]*\]{2})/g, '$1e $2');
		str = str.replace(/([\n '"”(][Zz]) +(['"„]*(?:\[{2}[^|\]]+\|)?['"„]*(?:[Ss])(?:[bćfgjklłmnńpqrsśtvwxźż]|ch[^aeiouyäöü]))/g, '$1e $2');
		str = str.replace(/([\n '"”(][Zz]) +(['"„]*\[{2}(?:[Ss])(?:[bćfgjklłmnńpqrsśtvwxźż]|ch[^aeiouyäöü])[^|\]]*\]{2})/g, '$1e $2');
		str = str.replace(/([\n '"”(][Zz]) +(['"„]*(?:\[{2}[^|\]]+\|)?['"„]*(?:[Ww]s(?:ch|p|t)))/g, '$1e $2');
		str = str.replace(/([\n '"”(][Zz]) +(['"„]*\[{2}(?:[Ww]s(?:ch|p|t))[^|\]]*\]{2})/g, '$1e $2');
		str = str.replace(/([\n '"”(][Zz]) +(['"„]*(?:\[{2}[^|\]]+\|)?['"„]*(?:[Zz][bdgjlłmnrwz]))/g, '$1e $2');
		str = str.replace(/([\n '"”(][Zz]) +(['"„]*\[{2}(?:[Zz][bdgjlłmnrwz])[^|\]]*\]{2})/g, '$1e $2');
		str = str.replace(/foosEpulKA/g, ' ');
		str = str.replace(/(Zasługi Rzecz)(pospolitej Polskiej)/gi, '$1y$2');
		str = str.replace(/([\n '"„”(][Zz]) +((?:\[{2}|\[{2}[^\n\]]+?\|)?(?:Lwowa))/g, '$1e $2');
		str = str.replace(/([\n (]['„]*[Zz])(wolna)/g, '$1 $2');
		str = str.replace(/\bZ[Bb][Oo][Ww][Ii][Dd]\b/g, 'ZBoWiD');
		str = str.replace(/(Zobacz też:)(\[)/gi, '$1 $2');
		str = str.replace(/(\n==+ Zobacz) *(?:r[oó]wnie[zźż]|tak[zźż]e|te[zźż])? *(==)/gi, '$1 też $2');
		str = str.replace(/(Związek Mostowców Rzecz)(pospolitej)/gi, '$1y$2');

		str = str.replace(/(\n \|[^\n=]+= *)<!-- *(?:podpis grafiki|z http:\/\/) *--> *(?=\n)/gi, '$1');

		str = str.replace(/(\| *(?:czasopismo|rozdział|tytuł|wydawca) *= *)["„”“]([^"„”“|}]+|\[{2}[^\]]+\]{2})["„”“]( *[|}])/gi, '$1$2$3');
		str = str.replace(/(\| *(?:czasopismo) *= *)\'{2}([^'|}]+|\[{2}[^\]]+\]{2})\'{2}( *[|}])/gi, '$1$2$3');
		str = str.replace(/(\{{2}cytuj (?:książkę|pismo)[^}]+?\| *(?:tytuł|seria) *= *)\'{2}([^'|}]+)\'{2}( *[|}])/gi, '$1$2$3');

		str = str.replace(/(\n \| *(?:gęstość|liczba ludności|ląd|ludn|populacja|pow_dorzecza|powierzchnia|woda) *= *(?:ok\.)* *\d{2,3})(\d{3}[^\d ])/g, '$1 $2');
		str = str.replace(/(\n \| *(?:gęstość|liczba ludności|ląd|ludn|populacja|pow_dorzecza|powierzchnia|woda) *= *(?:ok\.)* *\d{2,3})(\d{3}[^\d ])/g, '$1 $2');

		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)[^}]*?\| *strony *=[^|}]+)(?:str|s)\.([\n ]*[|}])/gi, '$1$2');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)[^}]*?\| *strony *= *)(?:str|s)\. */gi, '$1');
		// 166
		str = str.replace(/[Ff]oosEpulKX/g, '');
		str = str.replace(/(\[{2}[^[\]|]*)\|/g, '$1\u2553');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)\s*(?:\|(?:\{{2}[^{}]*\}{2}|[^{|}])*?)*?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\|\s*(?:nazwisko|imię|autor|autor link|język)) (\d+[\sr]*=)/g, '$1$2');
		fil = fil.replace(/(\|\s*)link autor(\d*\s*=\s*\|)/g, '$1autor link$2');
		fil = fil.replace(/(\|\s*autor)(\d+)( link)(\s*=)/g, '$1$3$2$4');
		fil = fil.replace(/(\|\s*s)(\s*=)/g, '$1trony$2');
		return fil;});
		str = str.replace(/(\{{2}cytuj pismo\s*\|(?:(?:\{{2}[^{}]*\}{2}|[^}])*?)\|\s*)(pismo\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1czaso$2');
		str = str.replace(/(\{{2}cytuj (?:stronę)(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)archiveurl(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1archiwum$2');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)authorlink(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1autor link$2');
		str = str.replace(/(\{{2}cytuj(?: (?:grę komputerową|książkę|odcinek|pismo|stronę))?(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)quote(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1cytat$2');
		str = str.replace(/(\{{2}cytuj(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)(?:date|datum)(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1data$2');
		str = str.replace(/(\{{2}cytuj(?: (?:grę komputerową|książkę|odcinek|pismo|stronę))?(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)(?:date|datum)(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1data$2');
		str = str.replace(/(\{{2}cytuj(?: (?:grę komputerową|książkę|odcinek|pismo|stronę))?(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)(?:access-?date|zugriff)(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1data dostępu$2');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)(?:first|imie)(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1imię$2');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)lang(?:uage)?(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1język$2');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)(?:location|ort)(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1miejsce$2');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)last(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1nazwisko$2');
		str = str.replace(/(\{{2}cytuj(?: (?:stronę))?(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)publisher(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1opublikowany$2');
		str = str.replace(/(\{{2}cytuj(?: (?:stronę))?(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)work(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1praca$2');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)(?:jahr|year)(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1rok$2');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)series(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1seria$2');
		str = str.replace(/(\{{2}cytuj(?: (?:książkę|pismo))?(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)(?:publisher|verlag)(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1wydawca$2');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)(?:\s*\|(?:\{{2}[^{}]*\}{2}|[^}])*?)?\s*\|\s*)archive-?date(\d*\s*=(?:(?:\{{2}[^{}]*\}{2}|[^}])*)\}{2})/gi, '$1zarchiwizowano$2');
		str = str.replace(/(\{{2}cytuj książkę[^{}]+\| *)autor( *=(?:(?:\[{2}[^[|\]]+\|[^[|\]]+\]{2})|[^|])+\(red\.\) *\|)/gi, '$1inni$2');
		str = str.replace(/(\{{2}cytuj (?:książkę)\s*\|(?:\{{2}[^{}]+\}{2}|\{[^{}]+\}|[^{}]|<math>.+?<\/math>)+\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\|\s*(data|issn)\s*=\s*)(?=\||\}{2})/g, '');
		return fil;});
		str = str.replace(/(\{{2}cytuj (?:pismo)\s*\|(?:\{{2}[^{}]+\}{2}|\{[^{}]+\}|[^{}]|<math>.+?<\/math>)+\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\|\s*(adres czasopisma|isbn|miejsce|odpowiedzialność|oznaczenie|wydawca)\s*=\s*)(?=\||\}{2})/g, '');
		return fil;});
		str = str.replace(/(\{{2}cytuj (?:stronę)\s*\|(?:\{{2}[^{}]+\}{2}|\{[^{}]+\}|[^{}]|<math>.+?<\/math>)+\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\|\s*(oznaczenie|praca|strony)\s*=\s*)(?=\||\}{2})/g, '');
		return fil;});
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)\s*\|(?:\{{2}[^{}]+\}{2}|\{[^{}]+\}|[^{}]|<math>.+?<\/math>)+\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\|\s*(arxiv|bibcode|cytat|część|tytuł części|doi|doietykieta|format|id|inni|język\d+| jstor|lccn|miesiąc|oclc|pmc|pmid|seria|tom|tytuł tomu)\s*=\s*)(?=\||\}{2})/g, '');
		return fil;});
		// 172
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)\s*(?:\|(?:\{{2}[^{}]*\}{2}|[^{|}])*?)*?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\|\s*imię(\d*)\s*=[^|}]*)(\|\s*nazwisko\2\s*=[^|}]*)/g, '$3$1');
		return fil;});
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)\s*(?:\|(?:\{{2}[^{}]*\}{2}|[^{|}])*?)*?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\|\s*imię(\d*) r\s*=[^|}]*)(\|\s*nazwisko\2 r\s*=[^|}]*)/g, '$3$1');
		return fil;});
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)\s*(?:\|(?:\{{2}[^{}]*\}{2}|[^{|}])*?)*?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\|\s*autor(\d*)\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)(\|\s*nazwisko\2\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*\|\s*imię\2\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)/g, '$3$1');
		return fil;});
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)\s*(?:\|(?:\{{2}[^{}]*\}{2}|[^{|}])*?)*?\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\|\s*nazwisko(\d*)\s*=\s?[^\s|](?:\{{2}[^{}]*\}{2}|[^|}])*\|\s*imię\2\s*=\s?[^\s|](?:\{{2}[^{}]*\}{2}|[^|}])*)(\|\s*autor\2\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)/g, '$1');
		return fil;});
		// 170
		str = str.replace(/(\{{2}cytuj (?:pismo)\s*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)(\|\s*czasopismo\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?\}{2})/gi, '$1$3$2$4');
		str = str.replace(/(\{{2}cytuj (?:książkę)\s*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)(\|\s*inni\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?\}{2})/gi, '$1$3$2$4');
		str = str.replace(/(\{{2}cytuj (?:książkę|pismo)\s*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)(\|\s*url\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?\}{2})/gi, '$1$3$2$4');
		str = str.replace(/(\{{2}cytuj (?:książkę|pismo)\s*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)(\|\s*tytuł\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?\}{2})/gi, '$1$3$2$4');
		str = str.replace(/(\{{2}cytuj (?:książkę|pismo)\s*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)((?:\|\s*(?:autor\d*|autor link\d*|imię\d*|nazwisko\d*)\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)+)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?\}{2})/gi, '$1$3$2$4');
		str = str.replace(/(\{{2}cytuj (?:stronę)\s*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)((?:\|\s*(?:autor\d*|autor link\d*|imię\d*|nazwisko\d*)\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)+)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?\}{2})/gi, '$1$3$2$4');
		str = str.replace(/(\{{2}cytuj (?:stronę)\s*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)(\|\s*tytuł\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?\}{2})/gi, '$1$3$2$4');
		str = str.replace(/(\{{2}cytuj (?:stronę)\s*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)(\|\s*url\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*)((?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?\}{2})/gi, '$1$3$2$4');
		// 171
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)\s*(?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)[ \u2552]+(\}{2})/gi, '$1$2');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)\s*(?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)(\n*\s*\|\s*data dostępu\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*?)((?:\n*\s*\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)(\n*\s*\}{2})/gi, '$1$3$2$4');
		str = str.replace(/(\{{2}cytuj (?:grę komputerową|książkę|odcinek|pismo|stronę)\s*(?:\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)(\n*\s*\|\s*odn\s*=(?:\{{2}[^{}]*\}{2}|[^|}])*?)((?:\n*\s*\|(?:\{{2}[^{}]*\}{2}|[^|}])*?)*?)(\n*\s*\}{2})/gi, '$1$3$2$4');
		str = str.replace(/\u2553/g, '|');
		// 168
		str = str.replace(/(\{{2}cytuj pismo[^{]*?\| *autor\d* *=[^|}]+[^.](?:\.{2})?)\.((?: *\| *autor link\d* *=[^|}]*)? *\| *tytuł)/gi, '$1$2');
		str = str.replace(/(\{{2}cytuj (?:książkę|pismo)[^}]*?\| *(?:data|strony)[^|}]+)(?:\.{3}|…)([\n ]*[|}])/gi, '$1..$2');
		str = str.replace(/(\{{2}cytuj (?:stronę)[^}]*?\| *(?:data|opublikowany|strony)[^|}]+)(?:\.{3}|…)([\n ]*[|}])/gi, '$1..$2');
		str = str.replace(/\.{2}/g, '\u2553');
		str = str.replace(/(\{{2}cytuj (?:książkę|pismo)[^}]*?\| *(?:data|strony|tytuł)[^|}]+?)[,:]+([\n ]*[|}])/gi, '$1$2');
		str = str.replace(/(\{{2}cytuj (?:książkę|pismo)[^}]*?\| *(?:data|strony)[^|}]+?)[.]+([\n ]*[|}])/gi, '$1$2');
		str = str.replace(/url/g, '\u2554');
		str = str.replace(/(\{{2}cytuj (?:książkę|pismo)[^}]*?\| *(?:tytuł) *=[^|}]+?)[.]([\n ]*\|[\n ]*[^\n \u2554][^=|}]+=)/gi, '$1$2');
		str = str.replace(/\u2554/g, 'url');
		str = str.replace(/(\{{2}cytuj (?:stronę)[^}]*?\| *(?:autor|data|opublikowany|strony)[^|}]+?)[,:.]+([\n ]*[|}])/gi, '$1$2');
		str = str.replace(/\u2553/g, '..');

		str = str.replace(/(\{{2}cytuj (grę komputerową|książkę|odcinek|pismo|stronę))([^\n}]+)(\}{2})/gi, function(a, poc, ins, fil, kon) {
		fil = fil.replace(/ +=/g, ' =');
		fil = fil.replace(/= +/g, '= ');
		return poc + fil + kon;});
		str = str.replace(/(\n +\|.+?= )(?=\n)/g, '$1foosEpulKX');

		str = str.replace(/(\n[!|] *)j(ednostka.+\n\|-\n[!|] *)p(opulacja.+\n\|-\n[!|] *)g(ęstość zaludnienia<br \/>)[([](mieszk\.\/km²)[)\]]/gi, '$1J$2P$3G$4[$5]');

		str = str.replace(/(foopROteZa\n+\'{3,5}[^']+\'{3,5} )jest to( )/g, '$1–$2');
		str = str.replace(/(\n)-([^-])/g, '$1–$2');

		str = str.replace(/(\n[ \u2552]\|zdjęcie[ \u2552]+=.+\.(?:gif|jpe?g|og[agv]|png|svg|tiff?))/gi, function(a, fil) {
		fil = fil.replace(/%C4%84/g, 'Ą');
		fil = fil.replace(/%C4%86/g, 'Ć');
		fil = fil.replace(/%C4%98/g, 'Ę');
		fil = fil.replace(/%C5%81/g, 'Ł');
		fil = fil.replace(/%C5%83/g, 'Ń');
		fil = fil.replace(/%C3%93/g, 'Ó');
		fil = fil.replace(/%C5%9A/g, 'Ś');
		fil = fil.replace(/%C5%B9/g, 'Ź');
		fil = fil.replace(/%C5%BB/g, 'Ż');
		fil = fil.replace(/%C4%85/g, 'ą');
		fil = fil.replace(/%C4%87/g, 'ć');
		fil = fil.replace(/%C4%99/g, 'ę');
		fil = fil.replace(/%C5%82/g, 'ł');
		fil = fil.replace(/%C5%84/g, 'ń');
		fil = fil.replace(/%C3%B3/g, 'ó');
		fil = fil.replace(/%C5%9B/g, 'ś');
		fil = fil.replace(/%C5%BA/g, 'ź');
		fil = fil.replace(/%C5%BC/g, 'ż');
		return fil;});

		// UNLOCKI
		str = str.replace(/foosEpulKB/g, ')');
		str = str.replace(/foosEpulKC/g, '\'');
		str = str.replace(/foosEpulKD/g, '-');
		str = str.replace(/foosEpulKE/g, '−');
		str = str.replace(/foosEpulKG/g, '`');
		str = str.replace(/foosEpulKK/g, '.');
		str = str.replace(/foosEpulKL/g, '"');
		str = str.replace(/foosEpulKM/g, '—');
		str = str.replace(/foosEpulKN/g, '–');
		str = str.replace(/foosEpulKP,/g, ',');
		str = str.replace(/foosEpulKP/g, ',');
		str = str.replace(/\u2552/g, ' ');
		str = str.replace(/foosEpulKW/g, 'x');
		str = str.replace(/foosEpulKY/g, '”');
		str = str.replace(/foosEpulKZ/g, '"');

		// LAST
		str = str.replace(/(<code>[\s\S]+?<\/code>|<graph>[\s\S]+?<\/graph>|<math[^>]*>[\s\S]+?<\/math>|<pre>[\s\S]+?<\/pre>|<(?:source|syntaxhighlight)[^>]*>[\s\S]+?<\/(?:source|syntaxhighlight)>)/gi, function(a, fil) {
		fil = fil.replace(/(\n)([#*:;])/g, '$1\u2553$2');
		return fil;});
		str = str.replace(/(\n[#*:;]+)([^ #*:;])/g, '$1 $2');
		str = str.replace(/(\n[#*:;]+ ), /g, '$1');
		str = str.replace(/\u2553/g, '');
		str = str.replace(/;(\n+=.+=\n)/g, '.$1');

		// CODEFIX
		str = str.replace(/(\n\|-)([<{]|align|bgcolor|border|class|colspan|rowspan|style|valign|width)/g, '$1 $2');
		str = str.replace(/(\n *\|)! ([^\n<>[\]{|}]+\|[^|])/g, '$1$2');
		str = str.replace(/(\n\|)!align="?center"?([\n |])/g, '$1$2');
		str = str.replace(/(\n *!) *(?:style="text-align: ?center;?"|align *= *"?(?:left|center|right)"?) *[!|] */g, '$1 ');
		str = str.replace(/(\n *!) *(?:style="text-align: ?center;?"|align *= *"?(?:left|center|right)"?) */g, '$1');
		str = str.replace(/(\n *! *style=")text-align: ?center; *([a-z])/g, '$1$2');
		str = str.replace(/(\{\|) +(class)/g, '$1 $2');
		str = str.replace(/(\{\|)+/g, '$1');
		str = str.replace(/(\{\|)\|/g, '$1');
		str = str.replace(/(\{\| ) +/g, '$1');
		str = str.replace(/(\n \| )( *)([^=]+)/g, '$1$3$2');
		str = str.replace(/(\n \|) ([^\n=]+=)/g, '$1$2');
		str = str.replace(/(\n +\|[^\n=]+?) ?= */g, '$1 = ');
		str = str.replace(/(\n *\|) +(\'*)-+(?=\'*[\n ])/g, '$1 $2–');
		str = str.replace(/(<\/?) *(small) *(>)/g, '$1$2$3');
		// 150
		str = str.replace(/\{{2}/g, '\u2553');
		str = str.replace(/\}{2}/g, '\u2554');
		str = str.replace(/(\u2553([^\u2553\u2554]|\u2553[^\u2553\u2554]*?\u2554|(\u2553([^\u2553\u2554]|\u2553[^\u2553\u2554]*?\u2554)*\u2554)|(\u2553([^\u2553\u2554]|\u2553[^\u2553\u2554]*?\u2554|(\u2553([^\u2553\u2554]|\u2553[^\u2553\u2554]*?\u2554)*\u2554))*\u2554))*\u2554)/g, function(a, fil) {
		fil = fil.replace(/\|/g, '\u2555');
		return fil;});
		str = str.replace(/(\n[!|])([–—−‒―÷?…])/g, '$1 $2');
		str = str.replace(/(\n[!|] )[‒―]/g, '$1–');
		str = str.replace(/(\n!)-/g, '$1 –');
		str = str.replace(/(\|{2})(?=[^\n ])/g, '$1 ');
		str = str.replace(/(\n *!.+)/g, function(a, fil) {
		fil = fil.replace(/(!{2})(?=[^\n ])/g, '$1 ');
		return fil;});
		str = str.replace(/([^\n]) *(\|{2}) */g, '$1 $2 ');
		str = str.replace(/(\n *!.+)/g, function(a, fil) {
		fil = fil.replace(/([^\n ])(!{2})/g, '$1 $2');
		return fil;});
		str = str.replace(/(!{2}|\|{2}) +([^\n[{!|]+[!|][^!|])/g, '$1$2');
		// 164
		str = str.replace(/((?:\n[!|]|!{2}|\|{2})[^\n[!|\]]+?) +(?=\|[^|])/g, '$1');
		str = str.replace(/((?:\n[!|]|!{2}|\|{2})[^\n[!|\]]+\|) *([^\n |])/g, '$1 $2');
		str = str.replace(/\u2555/g, '|');
		str = str.replace(/\u2554/g, '}}');
		str = str.replace(/\u2553/g, '{{');
		str = str.replace(/(\n\||\|{2}) +\| +/g, '$1 ');
		// 156
		str = str.replace(/(\{{2}[ru]\|[^\n}]+\}{2})/gi, function(a, fil) {
		fil = fil.replace(/[‘’]/g, '\'');
		fil = fil.replace(/["„”“]/g, '');
		return fil;});
		str = str.replace(/(<ref.*?>)/gi, function(a, fil) {
		fil = fil.replace(/[‘’]/g, '\'');
		fil = fil.replace(/[„”“]/g, '');
		return fil;});

		// LATKI
		str = str.replace(/„– „ /g, '„–” ');
		str = str.replace(/([^=])\n\* *(\n\n)/g, '$1$2');
		str = str.replace(/(Br|Rh|\+\/)[-–]([\n ,;:.…!?&|'’”<)\]])/g, '$1−$2');
		str = str.replace(/(\n *\| *[^\n"„“”]+?\d)”(\n)/g, '$1"$2');
		str = str.replace(/ +(\'*\n)/g, '$1');
		str = str.replace(/(\n#) +(patrz|redirect|tam)/gi, '$1$2');
		str = str.replace(/(\n<!--\n)\n+/g, '$1');
		str = str.replace(/( ={2}\n)(={2} )/g, '$1\n$2');
		str = str.replace(/( ={3}\n)(={2,3} )/g, '$1\n$2');
		str = str.replace(/( ={4}\n)(={2,4} )/g, '$1\n$2');
		str = str.replace(/( ={5}\n)(={2,5} )/g, '$1\n$2');
		str = str.replace(/( ={6}\n)(={2,6} )/g, '$1\n$2');
		str = str.replace(/(\{{2}[Bb]ibliografia)\n\|([#*])/g, '$1|\n$2');
		str = str.replace(/–(\d+px)/g, '-$1');
		str = str.replace(/(\d shift:\()–(\d)/g, '$1-$2');
		str = str.replace(/(Zobacz też =+\n)\* (\[{2}Plik:)/g, '$1$2');
		str = str.replace(/ +(\n)/g, '$1');
		str = str.replace(/(\n \|stopni[ENSW]2) (=)/g, '$1$2');
		str = str.replace(/\b((?:ur|zm)\.)(\?)/g, '$1 $2');
		str = str.replace(/(\n\{{2}Układ wielokolumnowy.+)(\n)(\|)/g, '$1$3$2');
		str = str.replace(/(\n \|[^\n=]+=.*?) *[,:]+ *(\n *[|}])/g, '$1$2');
		str = str.replace(/(\n \|[^\n=]+=.*?) *[,:]+ *(\n *[|}])/g, '$1$2');
		str = str.replace(/(\{{2}Inne znaczenia\|[^\n}]+\}{2})/g, function(a, fil) {
		fil = fil.replace(/\'{3}/g, '');
		return fil;});
		str = str.replace(/<!-- św. i bł. w Kościele (?:sort. po imieniu|sortowani są wg imienia) -->/g, '<!-- św. i bł. w Kościele są sortowani po imieniu -->');
		str = str.replace(/\n{2}( <!-- św. i bł. w Kościele są sortowani po imieniu -->)([\s\S]+?\[{2}Kategoria:Błogosławieni katoliccy\|.+?\]{2})/g, '$2$1');
		str = str.replace(/([ !|]bgcolor) *= *([a-z])/gi, '$1=$2');
		str = str.replace(/((?:bgcolor|colspan|rowspan) *= *)["„”“]([#a-f\d]+|[ #]*\{{2}.+?\}{2})["„”“]/gi, '$1"$2"');
		str = str.replace(/(\{{2}wzór\|(?:<math[^>]*>.+?<\/math>\s*)*<math[^>]*>.+?<\/math>)(\|\d+\}{2})([.,;:])/g, '$1$3$2');
		str = str.replace(/([^\\],(?:\{\}|\\qq?uad|\\[ ,;])*<\/math>),+/g, '$1');

		// 178
		str = str.replace(/(\{{2}(?:[Mm]ini )?(?:[Pp]rzypisy|[Uu]wagi).+?|<references.*?>)(<ref )/g, '$1\n$2');
		str = str.replace(/(\{{2}(?:[Mm]ini )?(?:[Pp]rzypisy|[Uu]wagi).*(?:\n.+)+<\/ref>(?:\n*\| *l\. *kolumn *= *\d)?)\n*(\}{2}\n)/g, '$1\n$2');
		str = str.replace(/(\{{2}[Pp]rzypisy-lista)(\|)((?:\n|(?:<!-- *)?<ref.+?<\/ref>(?: *-->)?)+?)(\|l\. kolumn *= *\d)\s*(\}{2})/g, '$1$4$2$3$5');
		str = str.replace(/(\{{2}(?:[Mm]ini )?(?:[Pp]rzypisy|[Uu]wagi).+?[\s\S]+?\n\}{2}|<references.*?>[\s\S]+?<\/references>)/g, function(a, fil) {
		fil = fil.replace(/((?: \/>|<\/ref>)(?: *-->)?)[\n ]*((?:<!-- *)?<ref)/g, '$1\n$2');
		return fil;});
		str = str.replace(/[\n ]*(<\/references>)[\n ]*/g, '\n$1\n\n');

		str = str.replace(/(\n=+ Zobacz też =+\n(\{{2}[^\n}]+\}{2}\n)*)((\*+ \[{2}[^\n\]]+\]{2}.*[,;.]?\n)+)(\n)/g, function(a, poc, pocb, fil, filb, kon) {
		fil = fil.replace(/[,;.]\n/g, '\n');
		return poc + fil + kon;});
		// 175
		str = str.replace(/(\n==)[ =]*(Zobacz też|Uwagi|Przypisy|Bibliografia|Linki zewnętrzne)[ =]*(==\n)/gi, '$1 $2 $3');
		str = str.replace(/(\n== (?:Przypisy|Uwagi) ==)(?:[\n ])*(\{{2}(?:przypisy|uwagi)\}{2})(?:[\n ])*/gi, '$1\n$2\n\n');
		str = str.replace(/\n+(== (?:Uwagi|Przypisy|Bibliografia|Linki zewnętrzne) ==[\s\S]+?)\n+(== Zobacz też ==[\s\S]+?)\n\n+/gi, '\n\n$2\n\n$1\n\n');
		str = str.replace(/\n+(== (?:Przypisy|Bibliografia|Linki zewnętrzne) ==[\s\S]+?)\n+(== Uwagi ==[\s\S]+?)\n\n+/gi, '\n\n$2\n\n$1\n\n');
		str = str.replace(/\n+(== (?:Bibliografia|Linki zewnętrzne) ==[\s\S]+?)\n+(== Przypisy ==[\s\S]+?)\n\n+/gi, '\n\n$2\n\n$1\n\n');
		str = str.replace(/\n+(== (?:Linki zewnętrzne) ==[\s\S]+?)\n+(== Bibliografia ==[\s\S]+?)\n\n+/gi, '\n\n$2\n\n$1\n\n');
		str = str.replace(/\n+(== Linki zewnętrzne ==[\s\S]+?)\n+(== Literatura (?:dodatkowa|uzupełniająca) ==[\s\S]+?)\n\n+/g, '\n\n$2\n\n$1\n\n');

		str = str.replace(/(\[{2}.+?\]{2})/gi, function(a, fil) {
		fil = fil.replace(/  +/g, ' ');
		return fil;});

		str = str.replace(/ +(<br \/>)/g, '$1');
		str = str.replace(/(\| *(?:group|grupa) *= *)„(uwaga)”( *\|)/g, '$1"$2"$3');

		str = str.replace(/foosEpulKF/g, '|');
		str = str.replace(/[Ff]oosEpulKX/g, '');

		// OSTRZEZENIA
		str = str.replace(/(<timeline>[\s\S]+?<\/timeline>)/g, function(a, fil) {
		fil = fil.replace(/[„”]/g, '"');
		return fil;});
		str = str.replace(/&nbsp;/g, '\u2553');
		str = str.replace(/([,;:.][\u2553 ][,;:.])([\u2553\n '])/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (BIAŁE WEWNĄTRZ INTERPUNKCJI) -->$2');
		str = str.replace(/([,;]\))/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (INTERPUNKCJA PRZED NAWIASEM) -->');
		str = str.replace(/(\.\'*\]{2,}\'*\.)/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (ZA DUŻO KROPEK) -->');
		str = str.replace(/([\u2553 ],,)/g, '$1<!-- SPRAWDŹ TO MIEJSCE! („?) -->');
		str = str.replace(/(\{{2}cytat\|)„((?:[^{}„”]|\{{2}[^{}]+\}{2}|„[^„”]+”)+)”((?:\{{2}[^{}]+\}{2}|<ref(?: +(?:group|name)[^\/>]+)?>[^<]+<\/ref>)*\}{2})/gi, '$1$2$3');
		str = str.replace(/([^-–—−\u2553\n '+=([{}|#>\/])(„)/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (ODSTĘP?) -->$2');
		str = str.replace(/(”)([^-–—−\u2553\n ,;:.…!?'+={})\]|#†<\/])/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (ODSTĘP? „?) -->$2');
		str = str.replace(/([\n ]„)([\n ])/g, '$1<!-- SPRAWDŹ TO MIEJSCE! -->$2');
		str = str.replace(/(„)<!-- SPRAWDŹ TO MIEJSCE! --> ([^\n„"]+”)/g, '$1$2');
		str = str.replace(/((?:<\/ref>|<ref (?:group|name)[^>]+\/+>)„)/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (spacja lub górny cudz.?)-->');
		str = str.replace(/(’’)/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (”?) -->');
		str = str.replace(/(-–|–-|-−|−-)/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (DYWIZ I INNA KRESKA) -->');
		str = str.replace(/(‒)/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (znak po lewej to kreska liczbowa, czyli figure dash, #2012) -->');

		str = str.replace(/(<math[^>]*>[\s\S]+?<\/math>|http.+?[\s<\]|}]|\{{2}familytree[\s\S]+?\}{2})/g, function(a, fil) {
		fil = fil.replace(/\(/g, '\x01');
		fil = fil.replace(/\)/g, '\x02');
		return fil;});
		str = str.replace(/\(\)/g, '\x01\x02');
		str = str.replace(/\(([^()]+)\)/g, '\x01$1\x02');
		str = str.replace(/\(([^()]+)\)/g, '\x01$1\x02');
		str = str.replace(/\(([^()]+)\)/g, '\x01$1\x02');
		str = str.replace(/\(([^()]+)\)/g, '\x01$1\x02');
		str = str.replace(/\(([^()]+)\)/g, '\x01$1\x02');
		str = str.replace(/\(([^()]+)\)/g, '\x01$1\x02');
		str = str.replace(/(\n \|SMILES += .+)/g, function (a, fil) {
		fil = fil.replace(/\(/g, '\x01');
		fil = fil.replace(/\)/g, '\x02');
		return fil;});
		str = str.replace(/([\n '>|„][A-Za-zŁł\d*]{1,3})\)/g, '$1\x02');
		str = str.replace(/([()])/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (NIESPAROWANE NAWIASY OKRĄGŁE) -->');
		str = str.replace(/<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY OKRĄGŁE\) -->([()]<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY OKRĄGŁE\) -->)/g, '$1');
		str = str.replace(/(:\))<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY OKRĄGŁE\) -->/g, '$1');
		str = str.replace(/\x02/g, ')');
		str = str.replace(/\x01/g, '(');

		str = str.replace(/\[([^[\]]*)\]/g, '\u2554$1\u2555');
		str = str.replace(/\[([^[\]]*)\]/g, '\u2554$1\u2555');
		str = str.replace(/\[([^[\]]*)\]/g, '\u2554$1\u2555');
		str = str.replace(/\[([^[\]]*)\]/g, '\u2554$1\u2555');
		str = str.replace(/\[([^[\]]*)\]/g, '\u2554$1\u2555');
		str = str.replace(/\[([^[\]]*)\]/g, '\u2554$1\u2555');
		str = str.replace(/\[([^[\]]*)\]/g, '\u2554$1\u2555');
		str = str.replace(/\[([^[\]]*)\]/g, '\u2554$1\u2555');
		str = str.replace(/\[([^[\]]*)\]/g, '\u2554$1\u2555');
		str = str.replace(/\[([^[\]]*)\]/g, '\u2554$1\u2555');
		str = str.replace(/\[(plik[\s\S]+?)\]/gi, '\u2554$1\u2555');
		str = str.replace(/\[(\u2554plik[\s\S]+?)\]/gi, '\u2554$1\u2555');
		str = str.replace(/\[([^[\]]*)(?:&#93;|&#x5D;)/g, '\u2554$1\u2556');
		str = str.replace(/(<math[^>]*>[\s\S]+?<\/math>)/g, function(a, fil) {
		fil = fil.replace(/<!-- SPRAWDŹ TO MIEJSCE! \(INTERPUNKCJA PRZED NAWIASEM\) -->/g, '');
		fil = fil.replace(/\[/g, '\u2554');
		fil = fil.replace(/\]/g, '\u2555');
		return fil;});
		str = str.replace(/([[\]])/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (NIESPAROWANE NAWIASY KWADRATOWE) -->');
		str = str.replace(/<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY KWADRATOWE\) -->([[\]]<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY KWADRATOWE\) -->)/g, '$1');
		str = str.replace(/\u2556/g, '&#93;');
		str = str.replace(/\u2555/g, ']');
		str = str.replace(/\u2554/g, '[');

		str = str.replace(/((?:<ref>|<ref (?:group|name)[^\/>]+>)[-–—−‒―÷'‘’"„”“′″‴,;:.…!?#*<>^()][ \u2552\u2553])/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (COŚ + BIAŁE NA POCZ. PRZYPISU) -->');
		str = str.replace(/([ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯ℃℉])/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (ZAMIEŃ NIEUŻYWANE ZNAKI UNIKODU NA PROSTSZY ZAPIS) -->');

		str = str.replace(/<([^<>]+\/)>/g, '\x01$1\x02');
		str = str.replace(/<([^<>]+)([^<>]*)>([\s\S]*?)<(\/\1)>/g, '\x01$1$2\x02$3\x01$4\x02');
		str = str.replace(/<([^<>]+)([^<>]*)>([\s\S]*?)<(\/\1)>/g, '\x01$1$2\x02$3\x01$4\x02');
		str = str.replace(/<([^<>]+)([^<>]*)>([\s\S]*?)<(\/\1)>/g, '\x01$1$2\x02$3\x01$4\x02');
		str = str.replace(/<([^<>]+)([^<>]*)>([\s\S]*?)<(\/\1)>/g, '\x01$1$2\x02$3\x01$4\x02');
		str = str.replace(/<([^<>]+)([^<>]*)>([\s\S]*?)<(\/\1)>/g, '\x01$1$2\x02$3\x01$4\x02');
		str = str.replace(/<([^<>]+)([^<>]*)>([\s\S]*?)<(\/\1)>/g, '\x01$1$2\x02$3\x01$4\x02');
		str = str.replace(/<([^<>]+)([^<>]*)>([\s\S]*?)<(\/\1)>/g, '\x01$1$2\x02$3\x01$4\x02');
		str = str.replace(/(<\/[^<>]+>)/g, '$1<!-- SPRAWDŹ TO MIEJSCE! (TAG ZAMYKAJĄCY BEZ OTWIERAJĄCEGO?) -->');
		str = str.replace(/\x02/g, '>');
		str = str.replace(/\x01/g, '<');

		str = str.replace(/([^A-Za-z\u00C0-\u017F\u1E00-\u1FBC.\/[\]_#+-=’]([A-Za-z\u00C0-\u017F\u1E00-\u1FBC]+) \2)([^A-Za-z\u00C0-\u017F\u1E00-\u1FBC])/gi, '$1<!-- SPRAWDŹ TO MIEJSCE! (POWTÓRZENIE?) -->$3');
		str = str.replace(/([A-Za-z\u00C0-\u017F]+) (\1)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) --> (\1)/gi, '$1 $2 $3');
		str = str.replace(/([A-Za-z\u00C0-\u017F]+) (\1) (\1)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->/gi, '$1 $2 $3');
		str = str.replace(/([A-Z][a-z]+) (\1)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->/g, '$1 $2');
		str = str.replace(/([AIOUWZ] [AIOUWZ])<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->([\s\S])/g, '$1$2');
		str = str.replace(/([AIOUWZ] [aiouwz])<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->([\s\S])/g, '$1$2');
		str = str.replace(/([aiouwz] [AIOUWZ])<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->([\s\S])/g, '$1$2');
		str = str.replace(/(\'\'|")([a-z]+) (\2)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->(\1)/gi, '$1$2 $3$4');
		str = str.replace(/([a-z]+) (\1)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->([,.:;!?]*(?:\'{2}|”))/gi, '$1 $2$3');
		str = str.replace(/(„)([a-z]+) (\2)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->/gi, '$1$2 $3');
		str = str.replace(/(‘)([a-z]+) (\2)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->(’)/gi, '$1$2 $3$4');
		str = str.replace(/(\()([a-z]+) (\2)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->(\))/gi, '$1$2 $3$4');
		str = str.replace(/(\[{2}[^|\]]*?)([^|\]]+) (\2)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->(\]{2})/g, '$1$2 $3$4');
		str = str.replace(/([Pp]lik:)<!-- SPRAWDŹ TO MIEJSCE! \(ODSTĘP\?\) -->(„)/g, '$1$2');
		str = str.replace(/,,<!-- SPRAWDŹ TO MIEJSCE! \(„\?\) -->([^\n„]+”)/g, '„$1');
		str = str.replace(/( to to)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->(,)/g, '$1$2');
		str = str.replace(/<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->(.*?\.(?:gif|jpe?g|og[agv]|png|svg|tiff?))/g, '$1');
		str = str.replace(/(\|tytuł = [- a-z’]+)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->/gi, '$1');
		str = str.replace(/<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->([\]])/gi, '$1');
		str = str.replace(/(\n\[{2}Kategoria:.+)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->/gi, '$1');
		str = str.replace(/(\n!)<!-- SPRAWDŹ TO MIEJSCE! \(ODSTĘP\?\) -->(„)/gi, '$1 $2');
		str = str.replace(/(\|n=\[)<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY KWADRATOWE\) -->(\||\}{2})/gi, '$1$2');
		str = str.replace(/(\[{2}[^\n[\]]+)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->/gi, '$1');
		str = str.replace(/,<!-- SPRAWDŹ TO MIEJSCE! \(ODSTĘP\?\) -->„/gi, ', „');
		str = str.replace(/([:;]-\))<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY OKRĄGŁE\) -->/g, '$1');
		str = str.replace(/(\{{2}SgKP.+?)<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY OKRĄGŁE\) -->(.*?\}{2})/g, '$1$2');
		str = str.replace(/(\()<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY OKRĄGŁE\) -->(\[?htt?p:\/\/)/g, '$1$2');
		str = str.replace(/(none|solid)( \1)<!-- SPRAWDŹ TO MIEJSCE! \(POWTÓRZENIE\?\) -->/g, '$1$2');

		str = str.replace(/(<math[^>]*>[\s\S]+?<\/math>)/g, function(a, fil) {
		fil = fil.replace(/<!-- SPRAWDŹ TO MIEJSCE! \(.+?\) -->/g, '');
		return fil;});
		str = str.replace(/(<!-- SPRAWDŹ TO MIEJSCE! [^\n>]*-->) *<!-- SPRAWDŹ TO MIEJSCE! [^\n>]*-->/g, '$1');
		str = str.replace(/\u2553/g, '&nbsp;');

		str = str.replace(/([a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u017F])(<math>)/gi, '$1<!-- SPRAWDŹ TO MIEJSCE! (BRAK SPACJI?) -->$2');
		str = str.replace(/(<\/math>)([a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u017F])/gi, '$1<!-- SPRAWDŹ TO MIEJSCE! (BRAK SPACJI?) -->$2');
		str = str.replace(/(<\/math>[-–=+])([\s])/gi, '$1<!-- SPRAWDŹ TO MIEJSCE! (BRAK SPACJI?) -->$2');

		// ODWOLANIA OSTRZEZEN
		str = str.replace(/((?:&#91;|&#x5B;)(?:\[{2}[^[\]]+\]{2}|[^\]])*\])<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY KWADRATOWE\) -->/g, '$1');
		str = str.replace(/(Plik:[^\n|\]]+?)<!-- SPRAWDŹ TO MIEJSCE![^>]+?>/g, '$1');
		str = str.replace(/(\[{2}[a-z]+:)<!-- SPRAWDŹ TO MIEJSCE![^>]+?>/g, '$1');
		str = str.replace(/(&.{2,6};(?:.{2,6};)?\))<!-- SPRAWDŹ TO MIEJSCE! \(INTERPUNKCJA PRZED NAWIASEM\) -->/g, '$1');
		str = str.replace(/(\.{3})<!-- SPRAWDŹ TO MIEJSCE! \(ODSTĘP\?\) -->(„)/g, '$1$2');
		str = str.replace(/<!-- SPRAWDŹ TO MIEJSCE! \(ODSTĘP\? „\?\) -->(י)/g, '$1');
		str = str.replace(/(\| *nawiasy *= *[[\]])<!-- SPRAWDŹ TO MIEJSCE! \(NIESPAROWANE NAWIASY KWADRATOWE\) -->/g, '$1');

		str = str.replace(/\u251C/g, ' ');
		str = str.replace(/foosE56pulKA/g, '\u2556');
		str = str.replace(/foosE55pulKA/g, '\u2555');
		str = str.replace(/foosE54pulKA/g, '\u2554');
		str = str.replace(/foosE53pulKA/g, '\u2553');
		str = str.replace(/foosE52pulKA/g, '\u2552');
		str = str.replace(/foosE1CpulKA/g, '\u251C');
		str = str.replace(/\\righd/g, '\\right.');

		str = str.replace(/\[{2}([^|\]])([^|\]]*)\|([^\]])\2([a-ząćęłńóśźż]*)\]{2}/g, function (a, w1_1, w_rest, w2_1, poza) {
		return (w1_1.toUpperCase()==w2_1.toUpperCase()) ? '[['+w2_1+w_rest+']]'+poza : a;});

		str = str.replace(/\[{2}( *(?:plik|file):)/gi, 'foosEpulKA$1');
		str = str.replace(/(\[{2})([ A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż]+)(-)([ A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż]+)(\|)\2 \4(\]{2})/g, '$1$2$3$4$6');
		str = str.replace(/(\[{2})([ A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż]+)(-)([ A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż]+)(-)([ A-Za-zĄĆĘŁŃÓŚŹŻąćęłńóśźż]+)(\|)\2 \4 \6(\]{2})/g, '$1$2$3$4$5$6$8');
		str = str.replace(/(<ref(?: +(?:group|name)[^\/>]+)?>[^<]+<\/ref>)/gi, function(a, fil) {
		fil = fil.replace(/\[{2}/g, 'foosEpulKal');
		fil = fil.replace(/\]{2}/g, 'foosEpulKar');
		return fil;});
		str = str.replace(/(\[{2}[^#\d][^|\]]+\|)([^\]]+)\]{2}(.+?)(?:\1)(\2)\]{2}(.+?)(?:\1)(\2)\]{2}(.+?)(?:\1)(\2)\]{2}/g, '$1$2]]$3$4$5$6$7$8');
		str = str.replace(/(\[{2}[^#\d][^|\]]+\|)([^\]]+)\]{2}(.+?)(?:\1)(\2)\]{2}(.+?)(?:\1)(\2)\]{2}/g, '$1$2]]$3$4$5$6');
		str = str.replace(/(\[{2}[^#\d][^|\]]+\|)([^\]]+)\]{2}(.+?)(?:\1)(\2)\]{2}(.+?)(?:\1)(\2)\]{2}/g, '$1$2]]$3$4$5$6');
		str = str.replace(/(\[{2}[^#\d][^|\]]+\|)([^\]]+)\]{2}(.+?)(?:\1)(\2)\]{2}/g, '$1$2]]$3$4');
		str = str.replace(/(\[{2}[^#\d][^|\]]+\|)([^\]]+)\]{2}(.+?)(?:\1)(\2)\]{2}/g, '$1$2]]$3$4');
		str = str.replace(/(\[{2}[^#\d][^|\]]+\|)([^\]]+)\]{2}(.+?)(?:\1)(\2)\]{2}/g, '$1$2]]$3$4');
		str = str.replace(/\[{2}([^#\d][^|\]]+)\]{2}(.+?)\[{2}(\1)\]{2}(.+?)\[{2}(\1)\]{2}(.+?)\[{2}(\1)\]{2}(.+?)\[{2}(\1)\]{2}/gi, '[[$1]]$2$3$4$5$6$7$8$9');
		str = str.replace(/\[{2}([^#\d][^|\]]+)\]{2}(.+?)\[{2}(\1)\]{2}(.+?)\[{2}(\1)\]{2}(.+?)\[{2}(\1)\]{2}/gi, '[[$1]]$2$3$4$5$6$7');
		str = str.replace(/\[{2}([^#\d][^|\]]+)\]{2}(.+?)\[{2}(\1)\]{2}(.+?)\[{2}(\1)\]{2}/gi, '[[$1]]$2$3$4$5');
		str = str.replace(/\[{2}([^#\d][^|\]]+)\]{2}(.+?)\[{2}(\1)\]{2}(.+?)\[{2}(\1)\]{2}/gi, '[[$1]]$2$3$4$5');
		str = str.replace(/\[{2}([^#\d][^|\]]+)\]{2}(.+?)\[{2}(\1)\]{2}/gi, '[[$1]]$2$3');
		str = str.replace(/\[{2}([^#\d][^|\]]+)\]{2}(.+?)\[{2}(\1)\]{2}/gi, '[[$1]]$2$3');
		str = str.replace(/\[{2}([^#\d][^|\]]+)\]{2}(.+?)\[{2}(\1)\]{2}/gi, '[[$1]]$2$3');
		str = str.replace(/foosEpulKar/g, ']]');
		str = str.replace(/foosEpulKal/g, '[[');
		str = str.replace(/foosEpulKA/gi, '[[');

		// przypisy+uwagi > uwagi+przypisy
		str = str.replace(/((?:\{{2}r\|[^{}]+\}{2}|\{{2}odn[^{}]+\}{2}|<ref(?: name[^\/>]+)?>.+?<\/ref>|<ref name[^\/>]+\/>)+)((?:\{{2}u\|[^{}]+\}{2}|<ref group[^\/>]+>.+?<\/ref>|<ref group[^\/>]+\/>)+)/gi, '$2$1');

		// usuwa puste w infoboxie
		str = str.replace(/(\{{2}państwo infobox(?:[^{}]|\{{2}[^{}]*\}{2})+\}{2})/gi, function(a, fil) {
		fil = fil.replace(/(\n \|[nps]\d+ *=.*\n \|[nps]\d+_flaga *=.*)(\n \|[nps]\d+ *= \n \|[nps]\d+_flaga *= )+(?=\n)/g, '$1');
		return fil;});

		str = str.replace(/(\{{2}cytuj pismo\s*\|\s*tytuł\s*=\s*Powierzchnia i ludność w przekroju terytorialnym w.+?\|\s*url\s*=.*?\|\s*czasopismo\s*=)\s*(\|\s*wydawca\s*=\s*Główny Urząd Statystyczny\s*\|\s*miejsce\s*=\s*Warszawa\s*\|\s*data\s*=.*?\|\s*issn\s*=\s*1505-5507\}{2})/g, '$1 Powierzchnia i Ludność w Przekroju Terytorialnym $2');

		str = str.replace(/(\{{2}(?:album muzyczny|czasopismo|obraz|singel|utwór muzyczny) infobox(?:\n.+)+\n\}{2}(?:\n__BEZSPISU__)?(?:\n(?:\{{2}.+\}{2}|\[{2}Plik.+))*\n+)[„”“]?(\'{3})(?:\'{2})?[„”“]?([^'„”“]+?)[”“]?(\'{3})(?:\'{2})?[”“]?/gi, '$1$2$3$4');
		str = str.replace(/(\{\| class="wikitable[- a-z]*"\n! )#([\n ])/g, '$1Lp.$2');
		str = str.replace(/(\[{2}(\d{1,2}) (?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia))\|\2(\]{2}) (stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)/g, '$1$3');
		str = str.replace(/( \|tytuł = (?:\[{2}[^[\]]+\]{2}|[^[|\]])+? )-( (?:\[{2}[^[\]]+\]{2}|[^[|\]])+? )-( (?:\[{2}[^[\]]+\]{2}|[^[|\]])+\|)/g, '$1–$2–$3');
		str = str.replace(/( \|tytuł = (?:\[{2}[^[\]]+\]{2}|[^[|\]])+? )-( (?:\[{2}[^[\]]+\]{2}|[^[|\]])+\|)/g, '$1–$2');
		str = str.replace(/([„“])(\'{5})((?:„[^\n\'"„”“]+”|[^\n\'"„”“])+)(\'{5})(”)/g, '$2$1$3$5$4');
		str = str.replace(/([„“])(\'{3})((?:„[^\n\'"„”“]+”|[^\n\'"„”“])+)(\'{3})(”)/g, '$2$1$3$5$4');
		str = str.replace(/([„“])(\'{2})((?:„[^\n\'"„”“]+”|[^\n\'"„”“])+)(\'{2})(”)/g, '$2$1$3$5$4');
		str = str.replace(/(\n\* )\[(http)(.+?) http\3\]([\n ])/g, '$1$2$3$4');
		str = str.replace(/(\n\* )\[(http)(.+?) http\3\]([\n ])/g, '$1$2$3$4');
		str = str.replace(/(\|name=)„(uwaga\d*)”(\|)/g, '$1"$2"$3');
		str = str.replace(/(\[{2}Plik:.+?) *\| *(?:alt|link) *=(\]{2})/g, '$1$2');
		str = str.replace(/(\[{2}Plik:.+?) *\| *(?:alt|link) *=(\]{2})/g, '$1$2');
		str = str.replace(/(\{{2}odn[^}]+?) *\| *strony *= */g, '$1|s=');
		str = str.replace(/\| N\/o([\n ])/gi, '| Nr$1');
		str = str.replace(/(\n *\|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|Year)_(?:Hi|Lo|MEAN)_°C += +-?\d+)\.(\d)/g, '$1,$2');
		str = str.replace(/(\n *\|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|Year)_(?:REC_(?:Hi|Lo))_°C += +-?\d+)\.(\d)/g, '$1,$2');
		str = str.replace(/(\n *\|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|Year)_Precip_(?:mm|days) += +\d+)\.(\d)/g, '$1,$2');
		str = str.replace(/(\n *\|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|Year)_Rain_days += +\d+)\.(\d)/g, '$1,$2');
		str = str.replace(/(\n *\|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|Year)_Snow_cm = \d+)\.(\d)/g, '$1,$2');
		str = str.replace(/\|<nowiki>-<\/nowiki>/g, '| –');
		str = str.replace(/\|<nowiki>\+<\/nowiki>/g, '| +');
		str = str.replace(/(\n\|\+.+):(\n[!|])/g, '$1$2');
		str = str.replace(/(\n[#*]* *'''[^']+)(''')(:)/g, '$1$3$2');
		str = str.replace(/ cellspacing="?\d+"?(.+?(?:border-collapse: *collapse|rules *= *"?(?:all|cols|rows)"?))/g, '$1');
		str = str.replace(/((?:border-collapse: *collapse|rules *= *"?(?:all|cols|rows)"?).+?) cellspacing="?\d+"?/g, '$1');

		str = str.replace(/(style=".*(border|margin|padding).+?[;"])/gi, function(a, fil) {
		fil = fil.replace(/([: ]0)(em|ex|pt|px)([ ;"])/gi, '$1$3');
		fil = fil.replace(/([: ]0)(em|ex|pt|px)([ ;"])/gi, '$1$3');
		fil = fil.replace(/(: ?0) 0 0 0([;"])/gi, '$1$2');
		fil = fil.replace(/(: ?0) 0([;"])/gi, '$1$2');
		return fil;});
		str = str.replace(/ cellPadovading=0/g, '');
		str = str.replace(/([ !|])align *= *cleft([ !|])/g, '$1$2');
		str = str.replace(/(\n *(?:\{\||[!|]).+?) class="?bright"?/g, '$1');
		str = str.replace(/([ !|])(?:v?align|bgcolor|bordercolor|border|cellpadding|cellspacing|class|colspan|height|rowspan|scope|style|width) *= *""[,;:.]*([\n !|])/g, '$1$2');
		str = str.replace(/([ !|]) *(?:v?align|bgcolor|bordercolor|border|cellpadding|cellspacing|class|colspan|height|rowspan|scope|style|width) *= *[,;:.]*([\n!|])/g, '$1$2');
		str = str.replace(/(\n\|) *\| *(\n)/g, '$1$2');
		str = str.replace(/<ref name="">/g, '<ref>');
		str = str.replace(/(\n[!|]) ((?:v?align|bgcolor|bordercolor|border|cellpadding|cellspacing|class|colspan|height|nowrap|rowspan|scope|style|width)=)/g, '$1$2');
		str = str.replace(/([!|] *\'*(?:Konkurencja|Złoto|Srebro|Brąz)\'*):(\'*(?:\n| [!|]))/g, '$1$2');
		str = str.replace(/(\[{2}Tempo \(muzyka\)\|)['’](\]{2})/gi, '$1`$2');
		str = str.replace(/¹\/<sub>/g, '<sup>1</sup>/<sub>');
		str = str.replace(/²\/<sub>/g, '<sup>2</sup>/<sub>');
		str = str.replace(/³\/<sub>/g, '<sup>3</sup>/<sub>');
		str = str.replace(/([ !|]align) *(=) *((?:left|center|right)[\n !|])/g, '$1$2$3');
		str = str.replace(/(\n\|) *<center>(.+?)<\/center>/g, '$1align=center| $2');
		str = str.replace(/(\n\|[^\n|]+?)(\| )<center>(.+?)<\/center>/g, '$1 align=center$2$3');
		str = str.replace(/ *\| *group *= *["„”“] *uwaga *["„”“] *\| *name *= *["„”“](.+?)["„”“] *\}{2}/g, '|group="uwaga"|name="$1"}}');
		str = str.replace(/ąc że /g, 'ąc, że ');
		str = str.replace(/(\n *\|gatunek *=.+?blues) (rock)/g, '$1-$2');
		str = str.replace(/(\{{2}cytuj \|[^{]*autor = )„([^|}]+)”( *[|}])/gi, '$1"$2"$3');
		str = str.replace(/(#) ((?:PATRZ|REDIRECT) \[{2})/gi, '$1$2');
		str = str.replace(/&nbsp;(mieszkańców|osoby|osób)/gi, ' $1');
		str = str.replace(/(\|lang=)„([a-z]+)”(\}{2})/g, '$1"$2"$3');
		str = str.replace(/(\|group=)„(uwaga)”(\}{2})/g, '$1"$2"$3');
		str = str.replace(/([!|] ?Imię i )N(azwisko)/g, '$1n$2');
		str = str.replace(/(\.) (<ref)/gi, '$1$2');
		str = str.replace(/<sub><\/sub>/gi, '');
		str = str.replace(/<sup><\/sup>/gi, '');
		str = str.replace(/(\{{2}Auto infobox(?:\{{2}[^{}]+\}{2}|[^{}])+\n \|ładowność +=.+)\n \|wyposażenie dodatkowe *=.+(\n \|modele bliźniacze +=)/gi, '$1$2');

		str = str.replace(/((\{{2}odn\|[^{}]+)(\|s=[^{}]+)(\}{2}))/gi, function(a, fil, insa, insb, insc) {
		insb = insb.replace(/(\d)-(\d)/g, '$1–$2');
		return insa + insb + insc;});

		str = str.replace(/(\n== Linki zewnętrzne ==(\n+\*.+)+)/gi, function(a, fil, ins) {
		fil = fil.replace(/\n\n+/g, '\n');
		return fil;});
		str = str.replace(/(\n \|układ osi += [ABCDEoT\d'’´′]+)/gi, function(a, fil) {
		fil = fil.replace(/['’´′]/g, '′');
		return fil;});

		str = str.replace(/<\/math>/g, '\x02');
		str = str.replace(/(\()(<math[^>]*>)([^\x02]+)(\x02)(\)[.,;:]*)/g, '$2$1$3$5$4');
		str = str.replace(/\'{3}( *<math[^\x02]+\x02 *)\'{3}/g, '$1');
		str = str.replace(/([^'])\'{2}( *<math[^\x02]+\x02 *)\'{2}([^'])/g, '$1$2$3');
		str = str.replace(/\x02/g, '<\/math>');
		str = str.replace(/(:)(<\/math>)/g, '{$1}$2');
		str = str.replace(/ +(<\/math>)/g, '$1');
		str = str.replace(/(<\/math>[ ,.]*)\n+(gdzie):?\n+([*:])/gi, '$1\n\n$2:\n$3');

		str = str.replace(/(\{{2}Numerowanie w tabeli.+)/gi, function(a, fil) {
		fil = fil.replace(/[„”]/g, '"');
		fil = fil.replace(/<!--.+?>/g, '');
		return fil;});

		str = str.replace(/<!-- *NIE *DODAWAJ *NIEPOTRZEBNYCH, *W *TYM *REKLAMOWYCH *LINKÓW *-->/g, '<!--     NIE DODAWAJ NIEPOTRZEBNYCH, W TYM REKLAMOWYCH LINKÓW     -->');
		str = str.replace(/<!-- *WIKIPEDIA *NIE *JEST *ZBIOREM *LINKÓW *-->/g, '<!--               WIKIPEDIA NIE JEST ZBIOREM LINKÓW              -->');
		str = str.replace(/<!-- *ANI *MIEJSCEM *NA *TWOJĄ *\(LUB *CZYJĄKOLWIEK\) *REKLAMĘ *!! *! *-->/g, '<!-- ANI  MIEJSCEM   NA  TWOJĄ   (LUB  CZYJĄKOLWIEK)   REKLAMĘ!!! -->');
		str = str.replace(/<!-- *umieść *go *(?:najpierw|wpierw) *na *stronie *dyskusji *tego *artykułu. *Linki *-->/g, '<!-- umieść go najpierw na stronie dyskusji tego artykułu.  Linki -->');
		str = str.replace(/<!-- *WCZEŚNIEJ *przeczytaj *http:\/\/pl.wikipedia.org\/wiki\/WP:LZ *-->/g, '<!-- WCZEŚNIEJ przeczytaj http://pl.wikipedia.org/wiki/WP:LZ      -->');
		str = str.replace(/<!-- *WIKIPEDIA *NIE *JEST *ZBIOREM *LINKÓW *-->\n<!-- Jeśli chcesz dodac tutaj link, do strony -->\n<!-- musi mieć ona odpowiedni "PAGE RANK". -->/g, '<!-- WIKIPEDIA NIE JEST ZBIOREM LINKÓW        -->\n<!-- Jeśli chcesz dodac tutaj link, do strony -->\n<!-- musi mieć ona odpowiedni "PAGE RANK".    -->');

		str = str.replace(/\n@<ref name/gi, '\n<ref name');
		str = str.replace(/FoosEpulKQ/g, '');
		str = str.replace(/\n+foopROteZb/g, '');
		str = str.replace(/foopROteZa\n+/g, '');
		str = str.replace(/^\n+/g, '');
		return str;
	}

	wp_sk.mm_rTempldecode = function(a,name,end)
	{
		try
		{
			name=decodeURIComponent(name)
			a='{{'+name+end;
		}
		catch(err){}
		return a.replace(/_/g,' ');
	}
});
// </nowiki>