extwee 2.3.10 → 2.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.Extwee=r():e.Extwee=r()}(this,(()=>(()=>{var e={117:function(e,r){!function(e){"use strict";class r{constructor(e){this._utf8Decoder=new TextDecoder("utf-8"),this._asciiDecoder=new TextDecoder("ascii"),this._buffer=e,this._dataView=new DataView(e.buffer,e.byteOffset,e.byteLength),this._position=0}get length(){return this._buffer.byteLength}get position(){return this._position}byte(){const e=this._position;return this.skip(1),this._dataView.getUint8(e)}bytes(e){const r=this._position;return this.skip(e),this._buffer.subarray(r,this._position)}uint16(){const e=this.position;return this.skip(2),this._dataView.getUint16(e,!0)}int32(){const e=this.position;return this.skip(4),this._dataView.getInt32(e,!0)}uint32(){const e=this.position;return this.skip(4),this._dataView.getUint32(e,!0)}uint64(){const e=this.position;this.skip(8);const r=this._dataView.getUint32(e,!0)+2**32*this._dataView.getUint32(e+4,!0);return Number.isSafeInteger(r)||console.warn(r,"exceeds MAX_SAFE_INTEGER. Precision may be lost"),r}float64(){const e=this.position;return this.skip(8),this._dataView.getFloat64(e,!1)}skip(e){if(this._position+=e,this._position>this._buffer.length)throw new Error("Expected "+(this._position-this._buffer.length)+" more bytes. The file might be corrupted. Unexpected end of file.")}string(e,r){const t=this.bytes(e);return"utf-8"==r?this._utf8Decoder.decode(t):this._asciiDecoder.decode(t)}line(){const e=this._buffer.indexOf(10,this._position);if(-1==e)throw new Error("Could not find end of line.");const r=e-this._position,t=this.string(r,"ascii");return this.skip(1),t}hasNext(){return this.position<this.length}}function t(e){if(e.length>8)throw new Error("Value too large to unpickling");const t=new ArrayBuffer(8),s=new Uint8Array(t);return s.set(e),new r(s).uint64()}function s(e){let r=0,t=0;for(;r<e.length;)r+=4,t+=1;const s=new ArrayBuffer(r);new Uint8Array(s).set(e);const a=new DataView(s,0,r);let o=BigInt(0);for(let e=0;e<t;e++)o|=BigInt(a.getUint32(4*e,!0))<<BigInt(32*e);return o}const a={create:()=>[],createWithItems:e=>Array.from(e),addMethod:function(e,r){e.push(r)}},o={create:()=>new Set,createWithItems:e=>new Set(e),addMethod:function(e,r){e.add(r)}},i={create:()=>({}),setMethod:function(e,r,t){e[r]=t}},n={create:()=>new Map,setMethod:function(e,r,t){e.set(r,t)}};function c(e,r){const t=function(...t){if(!new.target){const s=function(...e){Object.defineProperty(this,"args",{value:e,enumerable:!1,configurable:!1,writable:!1})};return s.prototype.__module__=e,s.prototype.__name__=r,Reflect.construct(s,t)}Object.defineProperty(this,"args",{value:t,enumerable:!1,configurable:!1,writable:!1})};return t.prototype.__module__=e,t.prototype.__name__=r,t.prototype.__setnewargs_ex__=function(...e){Object.defineProperty(this,"kwargs",{value:e,enumerable:!1,configurable:!1,writable:!1})},t}const l={nameResolver:{resolve:(e,r)=>c(e,r)},persistentResolver:{resolve:e=>{throw new Error(`Unregistered persistent id: \`${e}\`.`)}},extensionResolver:{resolve:e=>{throw new Error(`Unregistered extension code: \`${e.toString(16)}\`.`)}},unpicklingTypeOfSet:"array",unpicklingTypeOfDictionary:"object"};class u{constructor(){this._registry=new Map}register(e,r,t){const s=u.getFullyQualifiedName(e,r);if(this._registry.has(s))throw new Error(`'${s}' is already registered.`);return this._registry.set(s,t),this}resolve(e,r){const t=u.getFullyQualifiedName(e,r);return this._registry.get(t)??this.onMissingName(e,r)}onMissingName(e,r){return c(e,r)}static getFullyQualifiedName(e,r){return e+"."+r}}e.BufferReader=r,e.NameRegistry=u,e.Parser=class{constructor(e){this._options={...l,...e},this._nameResolver=this._options.nameResolver,this._persistentResolver=this._options.persistentResolver,this._extensionResolver=this._options.extensionResolver,this._setProvider=(e=>{switch(e){case"Set":return o;case"array":return a;default:throw new Error(`Unknown unpickling type [${e}] of Set.`)}})(this._options.unpicklingTypeOfSet),this._dictionaryProvider=(e=>{switch(e){case"Map":return n;case"object":return i;default:throw new Error(`Unknown unpickling type [${e}] of Dictionary.`)}})(this._options.unpicklingTypeOfDictionary),this._buffers=e?.buffers}parse(e){const t=new r(e);return this.read(t)}read(e){let r=[];const a=[],o=new Map;for(;e.hasNext();){const i=e.byte();switch(i){case 128:{const r=e.byte();if(r>5)throw new Error(`Unsupported protocol version '${r}'.`);break}case 46:return r.pop();case 149:e.skip(8);break;case 40:a.push(r),r=[];break;case 49:r=a.pop();break;case 48:r.pop();break;case 50:r.push(r[r.length-1]);break;case 112:{const t=parseInt(e.line(),10);o.set(t,r[r.length-1]);break}case 113:o.set(e.byte(),r[r.length-1]);break;case 114:o.set(e.uint32(),r[r.length-1]);break;case 148:o.set(o.size,r[r.length-1]);break;case 103:{const t=parseInt(e.line(),10);r.push(o.get(t));break}case 104:r.push(o.get(e.byte()));break;case 106:r.push(o.get(e.uint32()));break;case 78:r.push(null);break;case 136:r.push(!0);break;case 137:r.push(!1);break;case 73:{const t=e.line();"01"==t?r.push(!0):"00"==t?r.push(!1):r.push(parseInt(t,10));break}case 76:r.push(parseInt(e.line(),10));break;case 70:r.push(parseFloat(e.line()));break;case 83:{const t=e.line();if(t.length>=2&&t[0]==t.slice(-1)&&['"',"'"].includes(t[0])){r.push(t.slice(1,-1));break}throw new Error("Insecure string pickle.")}case 86:r.push(e.line());break;case 74:r.push(e.int32());break;case 75:r.push(e.byte());break;case 77:r.push(e.uint16());break;case 138:{const s=e.byte(),a=t(e.bytes(s));r.push(a);break}case 139:{const t=e.uint32(),a=s(e.bytes(t));r.push(a);break}case 71:r.push(e.float64());break;case 66:r.push(e.bytes(e.int32()));break;case 67:r.push(e.bytes(e.byte()));break;case 142:case 150:r.push(e.bytes(e.uint64()));break;case 84:r.push(e.string(e.uint32(),"ascii"));break;case 85:r.push(e.string(e.byte(),"ascii"));break;case 88:r.push(e.string(e.uint32(),"utf-8"));break;case 140:r.push(e.string(e.byte(),"utf-8"));break;case 141:r.push(e.string(e.uint64(),"utf-8"));break;case 41:case 93:r.push([]);break;case 116:{const e=r;r=a.pop(),r.push(e);break}case 133:r.push([r.pop()]);break;case 134:{const e=r.pop(),t=r.pop();r.push([t,e]);break}case 135:{const e=r.pop(),t=r.pop(),s=r.pop();r.push([s,t,e]);break}case 108:{const e=r;r=a.pop(),r.push(e);break}case 97:{const e=r.pop();r[r.length-1].push(e);break}case 101:{const e=r;r=a.pop(),r[r.length-1].push(...e);break}case 125:{const e=this._dictionaryProvider.create();r.push(e);break}case 100:{const e=r;r=a.pop();const t=this._dictionaryProvider.create();for(let r=0;r<e.length;r+=2)t[e[r]]=e[r+1];r.push(t);break}case 115:{const e=r.pop(),t=r.pop(),s=r[r.length-1];this._dictionaryProvider.setMethod(s,t,e);break}case 117:{const e=r;r=a.pop();const t=r[r.length-1];for(let r=0;r<e.length;r+=2)this._dictionaryProvider.setMethod(t,e[r],e[r+1]);break}case 143:{const e=this._setProvider.create();r.push(e);break}case 145:{const e=r;r=a.pop();const t=this._setProvider.createWithItems(e);r.push(t);break}case 144:{const e=r;r=a.pop();const t=r[r.length-1];for(let r=0;r<e.length;r++)this._setProvider.addMethod(t,e[r]);break}case 130:{const t=e.byte(),s=this._extensionResolver.resolve(t);r.push(s);break}case 131:{const t=e.uint16(),s=this._extensionResolver.resolve(t);r.push(s);break}case 132:{const t=e.uint32(),s=this._extensionResolver.resolve(t);r.push(s);break}case 99:{const t=e.line(),s=e.line(),a=this._nameResolver.resolve(t,s);r.push(a);break}case 147:{const e=r.pop(),t=r.pop(),s=this._nameResolver.resolve(t,e);r.push(s);break}case 105:{const t=e.line(),s=e.line(),o=r;r=a.pop();const i=this._nameResolver.resolve(t,s),n=Reflect.construct(i,o);r.push(n);break}case 111:{const e=r,t=e.pop();r=a.pop();const s=Reflect.construct(t,e);r.push(s);break}case 129:{const e=r.pop(),t=r.pop(),s=Reflect.construct(t,e);r.push(s);break}case 146:{const e=r.pop(),t=r.pop(),s=r.pop(),a=Reflect.construct(s,t);a.__setnewargs_ex__&&a.__setnewargs_ex__(e),r.push(a);break}case 80:{const t=e.line(),s=this._persistentResolver.resolve(t);r.push(s);break}case 81:{const e=r.pop(),t=this._persistentResolver.resolve(e);r.push(t);break}case 82:{const e=r.pop(),t=r.pop();r.push(t(...e));break}case 98:{const e=r.pop(),t=r[r.length-1];if(t.__setstate__){t.__setstate__(e);break}if(t instanceof Map){if(e instanceof Map&&e.has("__dict__")){for(const[r,s]of e.get("__dict__"))t.set(r,s);break}if(e.__dict__){for(const r in e.__dict__)t.set(r,e.__dict__[r]);break}}else e instanceof Map?Object.assign(t,Object.fromEntries(e)):Object.assign(t,e);break}case 151:{if(null==this._buffers)throw new Error("pickle stream refers to out-of-band data but no *buffers* argument was given");const e=this._buffers.next();if(e.done)throw new Error("not enough out-of-band buffers");r.push(e.value);break}case 152:r.push(r.pop());break;default:throw new Error(`Unsupported opcode '${i}'.`)}}throw new Error("Unexpected end of file.")}}}(r)}},r={};function t(s){var a=r[s];if(void 0!==a)return a.exports;var o=r[s]={exports:{}};return e[s].call(o.exports,o,o.exports,t),o.exports}t.d=(e,r)=>{for(var s in r)t.o(r,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:r[s]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r);var s={};return(()=>{"use strict";t.d(s,{default:()=>q});var e=function(){return e=Object.assign||function(e){for(var r,t=1,s=arguments.length;t<s;t++)for(var a in r=arguments[t])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e},e.apply(this,arguments)};function r(r,t){for(var s={},a={},o=r.split("~~"),i=!1,n=0;o.length>n;n++){for(var c=o[n].split("~"),l=0;l<c.length;l+=2){var u=c[l],p=c[l+1],h="&"+u+";";s[h]=p,i&&(s["&"+u]=p),a[p]=h}i=!0}return t?{entities:e(e({},s),t.entities),characters:e(e({},a),t.characters)}:{entities:s,characters:a}}var a={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&notin;|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&centerdot;|&copysr;|&divideontimes;|&gtcc;|&gtcir;|&gtdot;|&gtlPar;|&gtquest;|&gtrapprox;|&gtrarr;|&gtrdot;|&gtreqless;|&gtreqqless;|&gtrless;|&gtrsim;|&ltcc;|&ltcir;|&ltdot;|&lthree;|&ltimes;|&ltlarr;|&ltquest;|&ltrPar;|&ltri;|&ltrie;|&ltrif;|&notin;|&notinE;|&notindot;|&notinva;|&notinvb;|&notinvc;|&notni;|&notniva;|&notnivb;|&notnivc;|&parallel;|&timesb;|&timesbar;|&timesd;|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g},o={};o.xml=r("lt~<~gt~>~quot~\"~apos~'~amp~&"),o.html4=r("apos~'~OElig~Œ~oelig~œ~Scaron~Š~scaron~š~Yuml~Ÿ~circ~ˆ~tilde~˜~ensp~ ~emsp~ ~thinsp~ ~zwnj~‌~zwj~‍~lrm~‎~rlm~‏~ndash~–~mdash~—~lsquo~‘~rsquo~’~sbquo~‚~ldquo~“~rdquo~”~bdquo~„~dagger~†~Dagger~‡~permil~‰~lsaquo~‹~rsaquo~›~euro~€~fnof~ƒ~Alpha~Α~Beta~Β~Gamma~Γ~Delta~Δ~Epsilon~Ε~Zeta~Ζ~Eta~Η~Theta~Θ~Iota~Ι~Kappa~Κ~Lambda~Λ~Mu~Μ~Nu~Ν~Xi~Ξ~Omicron~Ο~Pi~Π~Rho~Ρ~Sigma~Σ~Tau~Τ~Upsilon~Υ~Phi~Φ~Chi~Χ~Psi~Ψ~Omega~Ω~alpha~α~beta~β~gamma~γ~delta~δ~epsilon~ε~zeta~ζ~eta~η~theta~θ~iota~ι~kappa~κ~lambda~λ~mu~μ~nu~ν~xi~ξ~omicron~ο~pi~π~rho~ρ~sigmaf~ς~sigma~σ~tau~τ~upsilon~υ~phi~φ~chi~χ~psi~ψ~omega~ω~thetasym~ϑ~upsih~ϒ~piv~ϖ~bull~•~hellip~…~prime~′~Prime~″~oline~‾~frasl~⁄~weierp~℘~image~ℑ~real~ℜ~trade~™~alefsym~ℵ~larr~←~uarr~↑~rarr~→~darr~↓~harr~↔~crarr~↵~lArr~⇐~uArr~⇑~rArr~⇒~dArr~⇓~hArr~⇔~forall~∀~part~∂~exist~∃~empty~∅~nabla~∇~isin~∈~notin~∉~ni~∋~prod~∏~sum~∑~minus~−~lowast~∗~radic~√~prop~∝~infin~∞~ang~∠~and~∧~or~∨~cap~∩~cup~∪~int~∫~there4~∴~sim~∼~cong~≅~asymp~≈~ne~≠~equiv~≡~le~≤~ge~≥~sub~⊂~sup~⊃~nsub~⊄~sube~⊆~supe~⊇~oplus~⊕~otimes~⊗~perp~⊥~sdot~⋅~lceil~⌈~rceil~⌉~lfloor~⌊~rfloor~⌋~lang~〈~rang~〉~loz~◊~spades~♠~clubs~♣~hearts~♥~diams~♦~~nbsp~ ~iexcl~¡~cent~¢~pound~£~curren~¤~yen~¥~brvbar~¦~sect~§~uml~¨~copy~©~ordf~ª~laquo~«~not~¬~shy~­~reg~®~macr~¯~deg~°~plusmn~±~sup2~²~sup3~³~acute~´~micro~µ~para~¶~middot~·~cedil~¸~sup1~¹~ordm~º~raquo~»~frac14~¼~frac12~½~frac34~¾~iquest~¿~Agrave~À~Aacute~Á~Acirc~Â~Atilde~Ã~Auml~Ä~Aring~Å~AElig~Æ~Ccedil~Ç~Egrave~È~Eacute~É~Ecirc~Ê~Euml~Ë~Igrave~Ì~Iacute~Í~Icirc~Î~Iuml~Ï~ETH~Ð~Ntilde~Ñ~Ograve~Ò~Oacute~Ó~Ocirc~Ô~Otilde~Õ~Ouml~Ö~times~×~Oslash~Ø~Ugrave~Ù~Uacute~Ú~Ucirc~Û~Uuml~Ü~Yacute~Ý~THORN~Þ~szlig~ß~agrave~à~aacute~á~acirc~â~atilde~ã~auml~ä~aring~å~aelig~æ~ccedil~ç~egrave~è~eacute~é~ecirc~ê~euml~ë~igrave~ì~iacute~í~icirc~î~iuml~ï~eth~ð~ntilde~ñ~ograve~ò~oacute~ó~ocirc~ô~otilde~õ~ouml~ö~divide~÷~oslash~ø~ugrave~ù~uacute~ú~ucirc~û~uuml~ü~yacute~ý~thorn~þ~yuml~ÿ~quot~\"~amp~&~lt~<~gt~>"),o.html5=r('Abreve~Ă~Acy~А~Afr~𝔄~Amacr~Ā~And~⩓~Aogon~Ą~Aopf~𝔸~ApplyFunction~⁡~Ascr~𝒜~Assign~≔~Backslash~∖~Barv~⫧~Barwed~⌆~Bcy~Б~Because~∵~Bernoullis~ℬ~Bfr~𝔅~Bopf~𝔹~Breve~˘~Bscr~ℬ~Bumpeq~≎~CHcy~Ч~Cacute~Ć~Cap~⋒~CapitalDifferentialD~ⅅ~Cayleys~ℭ~Ccaron~Č~Ccirc~Ĉ~Cconint~∰~Cdot~Ċ~Cedilla~¸~CenterDot~·~Cfr~ℭ~CircleDot~⊙~CircleMinus~⊖~CirclePlus~⊕~CircleTimes~⊗~ClockwiseContourIntegral~∲~CloseCurlyDoubleQuote~”~CloseCurlyQuote~’~Colon~∷~Colone~⩴~Congruent~≡~Conint~∯~ContourIntegral~∮~Copf~ℂ~Coproduct~∐~CounterClockwiseContourIntegral~∳~Cross~⨯~Cscr~𝒞~Cup~⋓~CupCap~≍~DD~ⅅ~DDotrahd~⤑~DJcy~Ђ~DScy~Ѕ~DZcy~Џ~Darr~↡~Dashv~⫤~Dcaron~Ď~Dcy~Д~Del~∇~Dfr~𝔇~DiacriticalAcute~´~DiacriticalDot~˙~DiacriticalDoubleAcute~˝~DiacriticalGrave~`~DiacriticalTilde~˜~Diamond~⋄~DifferentialD~ⅆ~Dopf~𝔻~Dot~¨~DotDot~⃜~DotEqual~≐~DoubleContourIntegral~∯~DoubleDot~¨~DoubleDownArrow~⇓~DoubleLeftArrow~⇐~DoubleLeftRightArrow~⇔~DoubleLeftTee~⫤~DoubleLongLeftArrow~⟸~DoubleLongLeftRightArrow~⟺~DoubleLongRightArrow~⟹~DoubleRightArrow~⇒~DoubleRightTee~⊨~DoubleUpArrow~⇑~DoubleUpDownArrow~⇕~DoubleVerticalBar~∥~DownArrow~↓~DownArrowBar~⤓~DownArrowUpArrow~⇵~DownBreve~̑~DownLeftRightVector~⥐~DownLeftTeeVector~⥞~DownLeftVector~↽~DownLeftVectorBar~⥖~DownRightTeeVector~⥟~DownRightVector~⇁~DownRightVectorBar~⥗~DownTee~⊤~DownTeeArrow~↧~Downarrow~⇓~Dscr~𝒟~Dstrok~Đ~ENG~Ŋ~Ecaron~Ě~Ecy~Э~Edot~Ė~Efr~𝔈~Element~∈~Emacr~Ē~EmptySmallSquare~◻~EmptyVerySmallSquare~▫~Eogon~Ę~Eopf~𝔼~Equal~⩵~EqualTilde~≂~Equilibrium~⇌~Escr~ℰ~Esim~⩳~Exists~∃~ExponentialE~ⅇ~Fcy~Ф~Ffr~𝔉~FilledSmallSquare~◼~FilledVerySmallSquare~▪~Fopf~𝔽~ForAll~∀~Fouriertrf~ℱ~Fscr~ℱ~GJcy~Ѓ~Gammad~Ϝ~Gbreve~Ğ~Gcedil~Ģ~Gcirc~Ĝ~Gcy~Г~Gdot~Ġ~Gfr~𝔊~Gg~⋙~Gopf~𝔾~GreaterEqual~≥~GreaterEqualLess~⋛~GreaterFullEqual~≧~GreaterGreater~⪢~GreaterLess~≷~GreaterSlantEqual~⩾~GreaterTilde~≳~Gscr~𝒢~Gt~≫~HARDcy~Ъ~Hacek~ˇ~Hat~^~Hcirc~Ĥ~Hfr~ℌ~HilbertSpace~ℋ~Hopf~ℍ~HorizontalLine~─~Hscr~ℋ~Hstrok~Ħ~HumpDownHump~≎~HumpEqual~≏~IEcy~Е~IJlig~IJ~IOcy~Ё~Icy~И~Idot~İ~Ifr~ℑ~Im~ℑ~Imacr~Ī~ImaginaryI~ⅈ~Implies~⇒~Int~∬~Integral~∫~Intersection~⋂~InvisibleComma~⁣~InvisibleTimes~⁢~Iogon~Į~Iopf~𝕀~Iscr~ℐ~Itilde~Ĩ~Iukcy~І~Jcirc~Ĵ~Jcy~Й~Jfr~𝔍~Jopf~𝕁~Jscr~𝒥~Jsercy~Ј~Jukcy~Є~KHcy~Х~KJcy~Ќ~Kcedil~Ķ~Kcy~К~Kfr~𝔎~Kopf~𝕂~Kscr~𝒦~LJcy~Љ~Lacute~Ĺ~Lang~⟪~Laplacetrf~ℒ~Larr~↞~Lcaron~Ľ~Lcedil~Ļ~Lcy~Л~LeftAngleBracket~⟨~LeftArrow~←~LeftArrowBar~⇤~LeftArrowRightArrow~⇆~LeftCeiling~⌈~LeftDoubleBracket~⟦~LeftDownTeeVector~⥡~LeftDownVector~⇃~LeftDownVectorBar~⥙~LeftFloor~⌊~LeftRightArrow~↔~LeftRightVector~⥎~LeftTee~⊣~LeftTeeArrow~↤~LeftTeeVector~⥚~LeftTriangle~⊲~LeftTriangleBar~⧏~LeftTriangleEqual~⊴~LeftUpDownVector~⥑~LeftUpTeeVector~⥠~LeftUpVector~↿~LeftUpVectorBar~⥘~LeftVector~↼~LeftVectorBar~⥒~Leftarrow~⇐~Leftrightarrow~⇔~LessEqualGreater~⋚~LessFullEqual~≦~LessGreater~≶~LessLess~⪡~LessSlantEqual~⩽~LessTilde~≲~Lfr~𝔏~Ll~⋘~Lleftarrow~⇚~Lmidot~Ŀ~LongLeftArrow~⟵~LongLeftRightArrow~⟷~LongRightArrow~⟶~Longleftarrow~⟸~Longleftrightarrow~⟺~Longrightarrow~⟹~Lopf~𝕃~LowerLeftArrow~↙~LowerRightArrow~↘~Lscr~ℒ~Lsh~↰~Lstrok~Ł~Lt~≪~Map~⤅~Mcy~М~MediumSpace~ ~Mellintrf~ℳ~Mfr~𝔐~MinusPlus~∓~Mopf~𝕄~Mscr~ℳ~NJcy~Њ~Nacute~Ń~Ncaron~Ň~Ncedil~Ņ~Ncy~Н~NegativeMediumSpace~​~NegativeThickSpace~​~NegativeThinSpace~​~NegativeVeryThinSpace~​~NestedGreaterGreater~≫~NestedLessLess~≪~NewLine~\n~Nfr~𝔑~NoBreak~⁠~NonBreakingSpace~ ~Nopf~ℕ~Not~⫬~NotCongruent~≢~NotCupCap~≭~NotDoubleVerticalBar~∦~NotElement~∉~NotEqual~≠~NotEqualTilde~≂̸~NotExists~∄~NotGreater~≯~NotGreaterEqual~≱~NotGreaterFullEqual~≧̸~NotGreaterGreater~≫̸~NotGreaterLess~≹~NotGreaterSlantEqual~⩾̸~NotGreaterTilde~≵~NotHumpDownHump~≎̸~NotHumpEqual~≏̸~NotLeftTriangle~⋪~NotLeftTriangleBar~⧏̸~NotLeftTriangleEqual~⋬~NotLess~≮~NotLessEqual~≰~NotLessGreater~≸~NotLessLess~≪̸~NotLessSlantEqual~⩽̸~NotLessTilde~≴~NotNestedGreaterGreater~⪢̸~NotNestedLessLess~⪡̸~NotPrecedes~⊀~NotPrecedesEqual~⪯̸~NotPrecedesSlantEqual~⋠~NotReverseElement~∌~NotRightTriangle~⋫~NotRightTriangleBar~⧐̸~NotRightTriangleEqual~⋭~NotSquareSubset~⊏̸~NotSquareSubsetEqual~⋢~NotSquareSuperset~⊐̸~NotSquareSupersetEqual~⋣~NotSubset~⊂⃒~NotSubsetEqual~⊈~NotSucceeds~⊁~NotSucceedsEqual~⪰̸~NotSucceedsSlantEqual~⋡~NotSucceedsTilde~≿̸~NotSuperset~⊃⃒~NotSupersetEqual~⊉~NotTilde~≁~NotTildeEqual~≄~NotTildeFullEqual~≇~NotTildeTilde~≉~NotVerticalBar~∤~Nscr~𝒩~Ocy~О~Odblac~Ő~Ofr~𝔒~Omacr~Ō~Oopf~𝕆~OpenCurlyDoubleQuote~“~OpenCurlyQuote~‘~Or~⩔~Oscr~𝒪~Otimes~⨷~OverBar~‾~OverBrace~⏞~OverBracket~⎴~OverParenthesis~⏜~PartialD~∂~Pcy~П~Pfr~𝔓~PlusMinus~±~Poincareplane~ℌ~Popf~ℙ~Pr~⪻~Precedes~≺~PrecedesEqual~⪯~PrecedesSlantEqual~≼~PrecedesTilde~≾~Product~∏~Proportion~∷~Proportional~∝~Pscr~𝒫~Qfr~𝔔~Qopf~ℚ~Qscr~𝒬~RBarr~⤐~Racute~Ŕ~Rang~⟫~Rarr~↠~Rarrtl~⤖~Rcaron~Ř~Rcedil~Ŗ~Rcy~Р~Re~ℜ~ReverseElement~∋~ReverseEquilibrium~⇋~ReverseUpEquilibrium~⥯~Rfr~ℜ~RightAngleBracket~⟩~RightArrow~→~RightArrowBar~⇥~RightArrowLeftArrow~⇄~RightCeiling~⌉~RightDoubleBracket~⟧~RightDownTeeVector~⥝~RightDownVector~⇂~RightDownVectorBar~⥕~RightFloor~⌋~RightTee~⊢~RightTeeArrow~↦~RightTeeVector~⥛~RightTriangle~⊳~RightTriangleBar~⧐~RightTriangleEqual~⊵~RightUpDownVector~⥏~RightUpTeeVector~⥜~RightUpVector~↾~RightUpVectorBar~⥔~RightVector~⇀~RightVectorBar~⥓~Rightarrow~⇒~Ropf~ℝ~RoundImplies~⥰~Rrightarrow~⇛~Rscr~ℛ~Rsh~↱~RuleDelayed~⧴~SHCHcy~Щ~SHcy~Ш~SOFTcy~Ь~Sacute~Ś~Sc~⪼~Scedil~Ş~Scirc~Ŝ~Scy~С~Sfr~𝔖~ShortDownArrow~↓~ShortLeftArrow~←~ShortRightArrow~→~ShortUpArrow~↑~SmallCircle~∘~Sopf~𝕊~Sqrt~√~Square~□~SquareIntersection~⊓~SquareSubset~⊏~SquareSubsetEqual~⊑~SquareSuperset~⊐~SquareSupersetEqual~⊒~SquareUnion~⊔~Sscr~𝒮~Star~⋆~Sub~⋐~Subset~⋐~SubsetEqual~⊆~Succeeds~≻~SucceedsEqual~⪰~SucceedsSlantEqual~≽~SucceedsTilde~≿~SuchThat~∋~Sum~∑~Sup~⋑~Superset~⊃~SupersetEqual~⊇~Supset~⋑~TRADE~™~TSHcy~Ћ~TScy~Ц~Tab~\t~Tcaron~Ť~Tcedil~Ţ~Tcy~Т~Tfr~𝔗~Therefore~∴~ThickSpace~  ~ThinSpace~ ~Tilde~∼~TildeEqual~≃~TildeFullEqual~≅~TildeTilde~≈~Topf~𝕋~TripleDot~⃛~Tscr~𝒯~Tstrok~Ŧ~Uarr~↟~Uarrocir~⥉~Ubrcy~Ў~Ubreve~Ŭ~Ucy~У~Udblac~Ű~Ufr~𝔘~Umacr~Ū~UnderBar~_~UnderBrace~⏟~UnderBracket~⎵~UnderParenthesis~⏝~Union~⋃~UnionPlus~⊎~Uogon~Ų~Uopf~𝕌~UpArrow~↑~UpArrowBar~⤒~UpArrowDownArrow~⇅~UpDownArrow~↕~UpEquilibrium~⥮~UpTee~⊥~UpTeeArrow~↥~Uparrow~⇑~Updownarrow~⇕~UpperLeftArrow~↖~UpperRightArrow~↗~Upsi~ϒ~Uring~Ů~Uscr~𝒰~Utilde~Ũ~VDash~⊫~Vbar~⫫~Vcy~В~Vdash~⊩~Vdashl~⫦~Vee~⋁~Verbar~‖~Vert~‖~VerticalBar~∣~VerticalLine~|~VerticalSeparator~❘~VerticalTilde~≀~VeryThinSpace~ ~Vfr~𝔙~Vopf~𝕍~Vscr~𝒱~Vvdash~⊪~Wcirc~Ŵ~Wedge~⋀~Wfr~𝔚~Wopf~𝕎~Wscr~𝒲~Xfr~𝔛~Xopf~𝕏~Xscr~𝒳~YAcy~Я~YIcy~Ї~YUcy~Ю~Ycirc~Ŷ~Ycy~Ы~Yfr~𝔜~Yopf~𝕐~Yscr~𝒴~ZHcy~Ж~Zacute~Ź~Zcaron~Ž~Zcy~З~Zdot~Ż~ZeroWidthSpace~​~Zfr~ℨ~Zopf~ℤ~Zscr~𝒵~abreve~ă~ac~∾~acE~∾̳~acd~∿~acy~а~af~⁡~afr~𝔞~aleph~ℵ~amacr~ā~amalg~⨿~andand~⩕~andd~⩜~andslope~⩘~andv~⩚~ange~⦤~angle~∠~angmsd~∡~angmsdaa~⦨~angmsdab~⦩~angmsdac~⦪~angmsdad~⦫~angmsdae~⦬~angmsdaf~⦭~angmsdag~⦮~angmsdah~⦯~angrt~∟~angrtvb~⊾~angrtvbd~⦝~angsph~∢~angst~Å~angzarr~⍼~aogon~ą~aopf~𝕒~ap~≈~apE~⩰~apacir~⩯~ape~≊~apid~≋~approx~≈~approxeq~≊~ascr~𝒶~ast~*~asympeq~≍~awconint~∳~awint~⨑~bNot~⫭~backcong~≌~backepsilon~϶~backprime~‵~backsim~∽~backsimeq~⋍~barvee~⊽~barwed~⌅~barwedge~⌅~bbrk~⎵~bbrktbrk~⎶~bcong~≌~bcy~б~becaus~∵~because~∵~bemptyv~⦰~bepsi~϶~bernou~ℬ~beth~ℶ~between~≬~bfr~𝔟~bigcap~⋂~bigcirc~◯~bigcup~⋃~bigodot~⨀~bigoplus~⨁~bigotimes~⨂~bigsqcup~⨆~bigstar~★~bigtriangledown~▽~bigtriangleup~△~biguplus~⨄~bigvee~⋁~bigwedge~⋀~bkarow~⤍~blacklozenge~⧫~blacksquare~▪~blacktriangle~▴~blacktriangledown~▾~blacktriangleleft~◂~blacktriangleright~▸~blank~␣~blk12~▒~blk14~░~blk34~▓~block~█~bne~=⃥~bnequiv~≡⃥~bnot~⌐~bopf~𝕓~bot~⊥~bottom~⊥~bowtie~⋈~boxDL~╗~boxDR~╔~boxDl~╖~boxDr~╓~boxH~═~boxHD~╦~boxHU~╩~boxHd~╤~boxHu~╧~boxUL~╝~boxUR~╚~boxUl~╜~boxUr~╙~boxV~║~boxVH~╬~boxVL~╣~boxVR~╠~boxVh~╫~boxVl~╢~boxVr~╟~boxbox~⧉~boxdL~╕~boxdR~╒~boxdl~┐~boxdr~┌~boxh~─~boxhD~╥~boxhU~╨~boxhd~┬~boxhu~┴~boxminus~⊟~boxplus~⊞~boxtimes~⊠~boxuL~╛~boxuR~╘~boxul~┘~boxur~└~boxv~│~boxvH~╪~boxvL~╡~boxvR~╞~boxvh~┼~boxvl~┤~boxvr~├~bprime~‵~breve~˘~bscr~𝒷~bsemi~⁏~bsim~∽~bsime~⋍~bsol~\\~bsolb~⧅~bsolhsub~⟈~bullet~•~bump~≎~bumpE~⪮~bumpe~≏~bumpeq~≏~cacute~ć~capand~⩄~capbrcup~⩉~capcap~⩋~capcup~⩇~capdot~⩀~caps~∩︀~caret~⁁~caron~ˇ~ccaps~⩍~ccaron~č~ccirc~ĉ~ccups~⩌~ccupssm~⩐~cdot~ċ~cemptyv~⦲~centerdot~·~cfr~𝔠~chcy~ч~check~✓~checkmark~✓~cir~○~cirE~⧃~circeq~≗~circlearrowleft~↺~circlearrowright~↻~circledR~®~circledS~Ⓢ~circledast~⊛~circledcirc~⊚~circleddash~⊝~cire~≗~cirfnint~⨐~cirmid~⫯~cirscir~⧂~clubsuit~♣~colon~:~colone~≔~coloneq~≔~comma~,~commat~@~comp~∁~compfn~∘~complement~∁~complexes~ℂ~congdot~⩭~conint~∮~copf~𝕔~coprod~∐~copysr~℗~cross~✗~cscr~𝒸~csub~⫏~csube~⫑~csup~⫐~csupe~⫒~ctdot~⋯~cudarrl~⤸~cudarrr~⤵~cuepr~⋞~cuesc~⋟~cularr~↶~cularrp~⤽~cupbrcap~⩈~cupcap~⩆~cupcup~⩊~cupdot~⊍~cupor~⩅~cups~∪︀~curarr~↷~curarrm~⤼~curlyeqprec~⋞~curlyeqsucc~⋟~curlyvee~⋎~curlywedge~⋏~curvearrowleft~↶~curvearrowright~↷~cuvee~⋎~cuwed~⋏~cwconint~∲~cwint~∱~cylcty~⌭~dHar~⥥~daleth~ℸ~dash~‐~dashv~⊣~dbkarow~⤏~dblac~˝~dcaron~ď~dcy~д~dd~ⅆ~ddagger~‡~ddarr~⇊~ddotseq~⩷~demptyv~⦱~dfisht~⥿~dfr~𝔡~dharl~⇃~dharr~⇂~diam~⋄~diamond~⋄~diamondsuit~♦~die~¨~digamma~ϝ~disin~⋲~div~÷~divideontimes~⋇~divonx~⋇~djcy~ђ~dlcorn~⌞~dlcrop~⌍~dollar~$~dopf~𝕕~dot~˙~doteq~≐~doteqdot~≑~dotminus~∸~dotplus~∔~dotsquare~⊡~doublebarwedge~⌆~downarrow~↓~downdownarrows~⇊~downharpoonleft~⇃~downharpoonright~⇂~drbkarow~⤐~drcorn~⌟~drcrop~⌌~dscr~𝒹~dscy~ѕ~dsol~⧶~dstrok~đ~dtdot~⋱~dtri~▿~dtrif~▾~duarr~⇵~duhar~⥯~dwangle~⦦~dzcy~џ~dzigrarr~⟿~eDDot~⩷~eDot~≑~easter~⩮~ecaron~ě~ecir~≖~ecolon~≕~ecy~э~edot~ė~ee~ⅇ~efDot~≒~efr~𝔢~eg~⪚~egs~⪖~egsdot~⪘~el~⪙~elinters~⏧~ell~ℓ~els~⪕~elsdot~⪗~emacr~ē~emptyset~∅~emptyv~∅~emsp13~ ~emsp14~ ~eng~ŋ~eogon~ę~eopf~𝕖~epar~⋕~eparsl~⧣~eplus~⩱~epsi~ε~epsiv~ϵ~eqcirc~≖~eqcolon~≕~eqsim~≂~eqslantgtr~⪖~eqslantless~⪕~equals~=~equest~≟~equivDD~⩸~eqvparsl~⧥~erDot~≓~erarr~⥱~escr~ℯ~esdot~≐~esim~≂~excl~!~expectation~ℰ~exponentiale~ⅇ~fallingdotseq~≒~fcy~ф~female~♀~ffilig~ffi~fflig~ff~ffllig~ffl~ffr~𝔣~filig~fi~fjlig~fj~flat~♭~fllig~fl~fltns~▱~fopf~𝕗~fork~⋔~forkv~⫙~fpartint~⨍~frac13~⅓~frac15~⅕~frac16~⅙~frac18~⅛~frac23~⅔~frac25~⅖~frac35~⅗~frac38~⅜~frac45~⅘~frac56~⅚~frac58~⅝~frac78~⅞~frown~⌢~fscr~𝒻~gE~≧~gEl~⪌~gacute~ǵ~gammad~ϝ~gap~⪆~gbreve~ğ~gcirc~ĝ~gcy~г~gdot~ġ~gel~⋛~geq~≥~geqq~≧~geqslant~⩾~ges~⩾~gescc~⪩~gesdot~⪀~gesdoto~⪂~gesdotol~⪄~gesl~⋛︀~gesles~⪔~gfr~𝔤~gg~≫~ggg~⋙~gimel~ℷ~gjcy~ѓ~gl~≷~glE~⪒~gla~⪥~glj~⪤~gnE~≩~gnap~⪊~gnapprox~⪊~gne~⪈~gneq~⪈~gneqq~≩~gnsim~⋧~gopf~𝕘~grave~`~gscr~ℊ~gsim~≳~gsime~⪎~gsiml~⪐~gtcc~⪧~gtcir~⩺~gtdot~⋗~gtlPar~⦕~gtquest~⩼~gtrapprox~⪆~gtrarr~⥸~gtrdot~⋗~gtreqless~⋛~gtreqqless~⪌~gtrless~≷~gtrsim~≳~gvertneqq~≩︀~gvnE~≩︀~hairsp~ ~half~½~hamilt~ℋ~hardcy~ъ~harrcir~⥈~harrw~↭~hbar~ℏ~hcirc~ĥ~heartsuit~♥~hercon~⊹~hfr~𝔥~hksearow~⤥~hkswarow~⤦~hoarr~⇿~homtht~∻~hookleftarrow~↩~hookrightarrow~↪~hopf~𝕙~horbar~―~hscr~𝒽~hslash~ℏ~hstrok~ħ~hybull~⁃~hyphen~‐~ic~⁣~icy~и~iecy~е~iff~⇔~ifr~𝔦~ii~ⅈ~iiiint~⨌~iiint~∭~iinfin~⧜~iiota~℩~ijlig~ij~imacr~ī~imagline~ℐ~imagpart~ℑ~imath~ı~imof~⊷~imped~Ƶ~in~∈~incare~℅~infintie~⧝~inodot~ı~intcal~⊺~integers~ℤ~intercal~⊺~intlarhk~⨗~intprod~⨼~iocy~ё~iogon~į~iopf~𝕚~iprod~⨼~iscr~𝒾~isinE~⋹~isindot~⋵~isins~⋴~isinsv~⋳~isinv~∈~it~⁢~itilde~ĩ~iukcy~і~jcirc~ĵ~jcy~й~jfr~𝔧~jmath~ȷ~jopf~𝕛~jscr~𝒿~jsercy~ј~jukcy~є~kappav~ϰ~kcedil~ķ~kcy~к~kfr~𝔨~kgreen~ĸ~khcy~х~kjcy~ќ~kopf~𝕜~kscr~𝓀~lAarr~⇚~lAtail~⤛~lBarr~⤎~lE~≦~lEg~⪋~lHar~⥢~lacute~ĺ~laemptyv~⦴~lagran~ℒ~langd~⦑~langle~⟨~lap~⪅~larrb~⇤~larrbfs~⤟~larrfs~⤝~larrhk~↩~larrlp~↫~larrpl~⤹~larrsim~⥳~larrtl~↢~lat~⪫~latail~⤙~late~⪭~lates~⪭︀~lbarr~⤌~lbbrk~❲~lbrace~{~lbrack~[~lbrke~⦋~lbrksld~⦏~lbrkslu~⦍~lcaron~ľ~lcedil~ļ~lcub~{~lcy~л~ldca~⤶~ldquor~„~ldrdhar~⥧~ldrushar~⥋~ldsh~↲~leftarrow~←~leftarrowtail~↢~leftharpoondown~↽~leftharpoonup~↼~leftleftarrows~⇇~leftrightarrow~↔~leftrightarrows~⇆~leftrightharpoons~⇋~leftrightsquigarrow~↭~leftthreetimes~⋋~leg~⋚~leq~≤~leqq~≦~leqslant~⩽~les~⩽~lescc~⪨~lesdot~⩿~lesdoto~⪁~lesdotor~⪃~lesg~⋚︀~lesges~⪓~lessapprox~⪅~lessdot~⋖~lesseqgtr~⋚~lesseqqgtr~⪋~lessgtr~≶~lesssim~≲~lfisht~⥼~lfr~𝔩~lg~≶~lgE~⪑~lhard~↽~lharu~↼~lharul~⥪~lhblk~▄~ljcy~љ~ll~≪~llarr~⇇~llcorner~⌞~llhard~⥫~lltri~◺~lmidot~ŀ~lmoust~⎰~lmoustache~⎰~lnE~≨~lnap~⪉~lnapprox~⪉~lne~⪇~lneq~⪇~lneqq~≨~lnsim~⋦~loang~⟬~loarr~⇽~lobrk~⟦~longleftarrow~⟵~longleftrightarrow~⟷~longmapsto~⟼~longrightarrow~⟶~looparrowleft~↫~looparrowright~↬~lopar~⦅~lopf~𝕝~loplus~⨭~lotimes~⨴~lowbar~_~lozenge~◊~lozf~⧫~lpar~(~lparlt~⦓~lrarr~⇆~lrcorner~⌟~lrhar~⇋~lrhard~⥭~lrtri~⊿~lscr~𝓁~lsh~↰~lsim~≲~lsime~⪍~lsimg~⪏~lsqb~[~lsquor~‚~lstrok~ł~ltcc~⪦~ltcir~⩹~ltdot~⋖~lthree~⋋~ltimes~⋉~ltlarr~⥶~ltquest~⩻~ltrPar~⦖~ltri~◃~ltrie~⊴~ltrif~◂~lurdshar~⥊~luruhar~⥦~lvertneqq~≨︀~lvnE~≨︀~mDDot~∺~male~♂~malt~✠~maltese~✠~map~↦~mapsto~↦~mapstodown~↧~mapstoleft~↤~mapstoup~↥~marker~▮~mcomma~⨩~mcy~м~measuredangle~∡~mfr~𝔪~mho~℧~mid~∣~midast~*~midcir~⫰~minusb~⊟~minusd~∸~minusdu~⨪~mlcp~⫛~mldr~…~mnplus~∓~models~⊧~mopf~𝕞~mp~∓~mscr~𝓂~mstpos~∾~multimap~⊸~mumap~⊸~nGg~⋙̸~nGt~≫⃒~nGtv~≫̸~nLeftarrow~⇍~nLeftrightarrow~⇎~nLl~⋘̸~nLt~≪⃒~nLtv~≪̸~nRightarrow~⇏~nVDash~⊯~nVdash~⊮~nacute~ń~nang~∠⃒~nap~≉~napE~⩰̸~napid~≋̸~napos~ʼn~napprox~≉~natur~♮~natural~♮~naturals~ℕ~nbump~≎̸~nbumpe~≏̸~ncap~⩃~ncaron~ň~ncedil~ņ~ncong~≇~ncongdot~⩭̸~ncup~⩂~ncy~н~neArr~⇗~nearhk~⤤~nearr~↗~nearrow~↗~nedot~≐̸~nequiv~≢~nesear~⤨~nesim~≂̸~nexist~∄~nexists~∄~nfr~𝔫~ngE~≧̸~nge~≱~ngeq~≱~ngeqq~≧̸~ngeqslant~⩾̸~nges~⩾̸~ngsim~≵~ngt~≯~ngtr~≯~nhArr~⇎~nharr~↮~nhpar~⫲~nis~⋼~nisd~⋺~niv~∋~njcy~њ~nlArr~⇍~nlE~≦̸~nlarr~↚~nldr~‥~nle~≰~nleftarrow~↚~nleftrightarrow~↮~nleq~≰~nleqq~≦̸~nleqslant~⩽̸~nles~⩽̸~nless~≮~nlsim~≴~nlt~≮~nltri~⋪~nltrie~⋬~nmid~∤~nopf~𝕟~notinE~⋹̸~notindot~⋵̸~notinva~∉~notinvb~⋷~notinvc~⋶~notni~∌~notniva~∌~notnivb~⋾~notnivc~⋽~npar~∦~nparallel~∦~nparsl~⫽⃥~npart~∂̸~npolint~⨔~npr~⊀~nprcue~⋠~npre~⪯̸~nprec~⊀~npreceq~⪯̸~nrArr~⇏~nrarr~↛~nrarrc~⤳̸~nrarrw~↝̸~nrightarrow~↛~nrtri~⋫~nrtrie~⋭~nsc~⊁~nsccue~⋡~nsce~⪰̸~nscr~𝓃~nshortmid~∤~nshortparallel~∦~nsim~≁~nsime~≄~nsimeq~≄~nsmid~∤~nspar~∦~nsqsube~⋢~nsqsupe~⋣~nsubE~⫅̸~nsube~⊈~nsubset~⊂⃒~nsubseteq~⊈~nsubseteqq~⫅̸~nsucc~⊁~nsucceq~⪰̸~nsup~⊅~nsupE~⫆̸~nsupe~⊉~nsupset~⊃⃒~nsupseteq~⊉~nsupseteqq~⫆̸~ntgl~≹~ntlg~≸~ntriangleleft~⋪~ntrianglelefteq~⋬~ntriangleright~⋫~ntrianglerighteq~⋭~num~#~numero~№~numsp~ ~nvDash~⊭~nvHarr~⤄~nvap~≍⃒~nvdash~⊬~nvge~≥⃒~nvgt~>⃒~nvinfin~⧞~nvlArr~⤂~nvle~≤⃒~nvlt~<⃒~nvltrie~⊴⃒~nvrArr~⤃~nvrtrie~⊵⃒~nvsim~∼⃒~nwArr~⇖~nwarhk~⤣~nwarr~↖~nwarrow~↖~nwnear~⤧~oS~Ⓢ~oast~⊛~ocir~⊚~ocy~о~odash~⊝~odblac~ő~odiv~⨸~odot~⊙~odsold~⦼~ofcir~⦿~ofr~𝔬~ogon~˛~ogt~⧁~ohbar~⦵~ohm~Ω~oint~∮~olarr~↺~olcir~⦾~olcross~⦻~olt~⧀~omacr~ō~omid~⦶~ominus~⊖~oopf~𝕠~opar~⦷~operp~⦹~orarr~↻~ord~⩝~order~ℴ~orderof~ℴ~origof~⊶~oror~⩖~orslope~⩗~orv~⩛~oscr~ℴ~osol~⊘~otimesas~⨶~ovbar~⌽~par~∥~parallel~∥~parsim~⫳~parsl~⫽~pcy~п~percnt~%~period~.~pertenk~‱~pfr~𝔭~phiv~ϕ~phmmat~ℳ~phone~☎~pitchfork~⋔~planck~ℏ~planckh~ℎ~plankv~ℏ~plus~+~plusacir~⨣~plusb~⊞~pluscir~⨢~plusdo~∔~plusdu~⨥~pluse~⩲~plussim~⨦~plustwo~⨧~pm~±~pointint~⨕~popf~𝕡~pr~≺~prE~⪳~prap~⪷~prcue~≼~pre~⪯~prec~≺~precapprox~⪷~preccurlyeq~≼~preceq~⪯~precnapprox~⪹~precneqq~⪵~precnsim~⋨~precsim~≾~primes~ℙ~prnE~⪵~prnap~⪹~prnsim~⋨~profalar~⌮~profline~⌒~profsurf~⌓~propto~∝~prsim~≾~prurel~⊰~pscr~𝓅~puncsp~ ~qfr~𝔮~qint~⨌~qopf~𝕢~qprime~⁗~qscr~𝓆~quaternions~ℍ~quatint~⨖~quest~?~questeq~≟~rAarr~⇛~rAtail~⤜~rBarr~⤏~rHar~⥤~race~∽̱~racute~ŕ~raemptyv~⦳~rangd~⦒~range~⦥~rangle~⟩~rarrap~⥵~rarrb~⇥~rarrbfs~⤠~rarrc~⤳~rarrfs~⤞~rarrhk~↪~rarrlp~↬~rarrpl~⥅~rarrsim~⥴~rarrtl~↣~rarrw~↝~ratail~⤚~ratio~∶~rationals~ℚ~rbarr~⤍~rbbrk~❳~rbrace~}~rbrack~]~rbrke~⦌~rbrksld~⦎~rbrkslu~⦐~rcaron~ř~rcedil~ŗ~rcub~}~rcy~р~rdca~⤷~rdldhar~⥩~rdquor~”~rdsh~↳~realine~ℛ~realpart~ℜ~reals~ℝ~rect~▭~rfisht~⥽~rfr~𝔯~rhard~⇁~rharu~⇀~rharul~⥬~rhov~ϱ~rightarrow~→~rightarrowtail~↣~rightharpoondown~⇁~rightharpoonup~⇀~rightleftarrows~⇄~rightleftharpoons~⇌~rightrightarrows~⇉~rightsquigarrow~↝~rightthreetimes~⋌~ring~˚~risingdotseq~≓~rlarr~⇄~rlhar~⇌~rmoust~⎱~rmoustache~⎱~rnmid~⫮~roang~⟭~roarr~⇾~robrk~⟧~ropar~⦆~ropf~𝕣~roplus~⨮~rotimes~⨵~rpar~)~rpargt~⦔~rppolint~⨒~rrarr~⇉~rscr~𝓇~rsh~↱~rsqb~]~rsquor~’~rthree~⋌~rtimes~⋊~rtri~▹~rtrie~⊵~rtrif~▸~rtriltri~⧎~ruluhar~⥨~rx~℞~sacute~ś~sc~≻~scE~⪴~scap~⪸~sccue~≽~sce~⪰~scedil~ş~scirc~ŝ~scnE~⪶~scnap~⪺~scnsim~⋩~scpolint~⨓~scsim~≿~scy~с~sdotb~⊡~sdote~⩦~seArr~⇘~searhk~⤥~searr~↘~searrow~↘~semi~;~seswar~⤩~setminus~∖~setmn~∖~sext~✶~sfr~𝔰~sfrown~⌢~sharp~♯~shchcy~щ~shcy~ш~shortmid~∣~shortparallel~∥~sigmav~ς~simdot~⩪~sime~≃~simeq~≃~simg~⪞~simgE~⪠~siml~⪝~simlE~⪟~simne~≆~simplus~⨤~simrarr~⥲~slarr~←~smallsetminus~∖~smashp~⨳~smeparsl~⧤~smid~∣~smile~⌣~smt~⪪~smte~⪬~smtes~⪬︀~softcy~ь~sol~/~solb~⧄~solbar~⌿~sopf~𝕤~spadesuit~♠~spar~∥~sqcap~⊓~sqcaps~⊓︀~sqcup~⊔~sqcups~⊔︀~sqsub~⊏~sqsube~⊑~sqsubset~⊏~sqsubseteq~⊑~sqsup~⊐~sqsupe~⊒~sqsupset~⊐~sqsupseteq~⊒~squ~□~square~□~squarf~▪~squf~▪~srarr~→~sscr~𝓈~ssetmn~∖~ssmile~⌣~sstarf~⋆~star~☆~starf~★~straightepsilon~ϵ~straightphi~ϕ~strns~¯~subE~⫅~subdot~⪽~subedot~⫃~submult~⫁~subnE~⫋~subne~⊊~subplus~⪿~subrarr~⥹~subset~⊂~subseteq~⊆~subseteqq~⫅~subsetneq~⊊~subsetneqq~⫋~subsim~⫇~subsub~⫕~subsup~⫓~succ~≻~succapprox~⪸~succcurlyeq~≽~succeq~⪰~succnapprox~⪺~succneqq~⪶~succnsim~⋩~succsim~≿~sung~♪~supE~⫆~supdot~⪾~supdsub~⫘~supedot~⫄~suphsol~⟉~suphsub~⫗~suplarr~⥻~supmult~⫂~supnE~⫌~supne~⊋~supplus~⫀~supset~⊃~supseteq~⊇~supseteqq~⫆~supsetneq~⊋~supsetneqq~⫌~supsim~⫈~supsub~⫔~supsup~⫖~swArr~⇙~swarhk~⤦~swarr~↙~swarrow~↙~swnwar~⤪~target~⌖~tbrk~⎴~tcaron~ť~tcedil~ţ~tcy~т~tdot~⃛~telrec~⌕~tfr~𝔱~therefore~∴~thetav~ϑ~thickapprox~≈~thicksim~∼~thkap~≈~thksim~∼~timesb~⊠~timesbar~⨱~timesd~⨰~tint~∭~toea~⤨~top~⊤~topbot~⌶~topcir~⫱~topf~𝕥~topfork~⫚~tosa~⤩~tprime~‴~triangle~▵~triangledown~▿~triangleleft~◃~trianglelefteq~⊴~triangleq~≜~triangleright~▹~trianglerighteq~⊵~tridot~◬~trie~≜~triminus~⨺~triplus~⨹~trisb~⧍~tritime~⨻~trpezium~⏢~tscr~𝓉~tscy~ц~tshcy~ћ~tstrok~ŧ~twixt~≬~twoheadleftarrow~↞~twoheadrightarrow~↠~uHar~⥣~ubrcy~ў~ubreve~ŭ~ucy~у~udarr~⇅~udblac~ű~udhar~⥮~ufisht~⥾~ufr~𝔲~uharl~↿~uharr~↾~uhblk~▀~ulcorn~⌜~ulcorner~⌜~ulcrop~⌏~ultri~◸~umacr~ū~uogon~ų~uopf~𝕦~uparrow~↑~updownarrow~↕~upharpoonleft~↿~upharpoonright~↾~uplus~⊎~upsi~υ~upuparrows~⇈~urcorn~⌝~urcorner~⌝~urcrop~⌎~uring~ů~urtri~◹~uscr~𝓊~utdot~⋰~utilde~ũ~utri~▵~utrif~▴~uuarr~⇈~uwangle~⦧~vArr~⇕~vBar~⫨~vBarv~⫩~vDash~⊨~vangrt~⦜~varepsilon~ϵ~varkappa~ϰ~varnothing~∅~varphi~ϕ~varpi~ϖ~varpropto~∝~varr~↕~varrho~ϱ~varsigma~ς~varsubsetneq~⊊︀~varsubsetneqq~⫋︀~varsupsetneq~⊋︀~varsupsetneqq~⫌︀~vartheta~ϑ~vartriangleleft~⊲~vartriangleright~⊳~vcy~в~vdash~⊢~vee~∨~veebar~⊻~veeeq~≚~vellip~⋮~verbar~|~vert~|~vfr~𝔳~vltri~⊲~vnsub~⊂⃒~vnsup~⊃⃒~vopf~𝕧~vprop~∝~vrtri~⊳~vscr~𝓋~vsubnE~⫋︀~vsubne~⊊︀~vsupnE~⫌︀~vsupne~⊋︀~vzigzag~⦚~wcirc~ŵ~wedbar~⩟~wedge~∧~wedgeq~≙~wfr~𝔴~wopf~𝕨~wp~℘~wr~≀~wreath~≀~wscr~𝓌~xcap~⋂~xcirc~◯~xcup~⋃~xdtri~▽~xfr~𝔵~xhArr~⟺~xharr~⟷~xlArr~⟸~xlarr~⟵~xmap~⟼~xnis~⋻~xodot~⨀~xopf~𝕩~xoplus~⨁~xotime~⨂~xrArr~⟹~xrarr~⟶~xscr~𝓍~xsqcup~⨆~xuplus~⨄~xutri~△~xvee~⋁~xwedge~⋀~yacy~я~ycirc~ŷ~ycy~ы~yfr~𝔶~yicy~ї~yopf~𝕪~yscr~𝓎~yucy~ю~zacute~ź~zcaron~ž~zcy~з~zdot~ż~zeetrf~ℨ~zfr~𝔷~zhcy~ж~zigrarr~⇝~zopf~𝕫~zscr~𝓏~~AMP~&~COPY~©~GT~>~LT~<~QUOT~"~REG~®',o.html4),String.fromCodePoint;var i=String.prototype.codePointAt?function(e,r){return e.codePointAt(r)}:function(e,r){return 1024*(e.charCodeAt(r)-55296)+e.charCodeAt(r+1)-56320+65536},n=function(){return n=Object.assign||function(e){for(var r,t=1,s=arguments.length;t<s;t++)for(var a in r=arguments[t])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e},n.apply(this,arguments)},c=n(n({},o),{all:o.html5}),l={specialChars:/[<>'"&]/g,nonAscii:/[<>'"&\u0080-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintable:/[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintableOnly:/[\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,extensive:/[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g},u={mode:"specialChars",level:"all",numeric:"decimal"};function p(e,r){var t=void 0===r?u:r,s=t.mode,a=void 0===s?"specialChars":s,o=t.numeric,n=void 0===o?"decimal":o,p=t.level;if(!e)return"";var h=l[a],g=c[void 0===p?"all":p].characters,d="hexadecimal"===n;return String.prototype.replace.call(e,h,(function(e){var r=g[e];if(!r){var t=e.length>1?i(e,0):e.charCodeAt(0);r=(d?"&#x"+t.toString(16):"&#"+t)+";"}return r}))}var h=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g,g=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g,d={xml:{strict:h,attribute:g,body:a.xml},html4:{strict:h,attribute:g,body:a.html4},html5:{strict:h,attribute:g,body:a.html5}};function f(e){return"string"!=typeof e?e:e.replace(/\\/g,"\\\\").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/\{/g,"\\{").replace(/\}/g,"\\}")}(n(n({},d),{all:d.html5}),String.fromCharCode)(65533);class m{#e="";#r=[];#t={};#s="";constructor(e="",r="",t=[],s={}){this.name=e,this.tags=t,this.metadata=s,this.text=r}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new Error("Name must be a String!");this.#e=e}get tags(){return this.#r}set tags(e){if(!Array.isArray(e))throw new Error("Tags must be an array!");this.#r=e}get metadata(){return this.#t}set metadata(e){if("object"!=typeof e)throw new Error("Metadata should be an object literal!");this.#t=e}get text(){return this.#s}set text(e){if("string"!=typeof e)throw new Error("Text should be a String!");this.#s=e}toTwee(){let e="";e+=`:: ${f(this.name)}`,this.tags.length>0&&(e+=` [${this.tags.map((e=>f(e))).join(" ")}]`),Object.keys(this.metadata).length>0&&(e+=` ${JSON.stringify(this.metadata)}`);const r=this.text.split("\n");for(let e=0;e<r.length;e++)r[e].startsWith("::")&&(r[e]=`\\${r[e]}`);return e+=`\n${r.join("\n")}\n\n`,e}toJSON(){const e={name:this.name,tags:this.tags,metadata:this.metadata,text:this.text};return JSON.stringify(e)}toTwine2HTML(e=1){let r="\t<tw-passagedata";return r+=` pid="${e}"`,r+=` name="${p(this.name)}"`,r+=` tags="${p(this.#r.join(" "))}" `,Object.prototype.hasOwnProperty.call(this.#t,"position")&&(r+=` position="${this.#t.position}" `),Object.prototype.hasOwnProperty.call(this.#t,"size")&&(r+=`size="${this.#t.size}" `),r+=`>${this.text}</tw-passagedata>\n`,r}toTwine1HTML(){let e="\t<div";return e+=` tiddler="${p(this.name)}"`,e+=` tags="${p(this.#r.join(" "))}" `,e+=' modifier="extwee"',Object.prototype.hasOwnProperty.call(this.#t,"position")?e+=` twine-position="${this.#t.position}"`:e+=' twine-position="10,10"',e+=`>${this.#s}</div>`,e}}function b(){return crypto.randomUUID().toUpperCase()}class y{#e="Untitled Story";#a="";#o="";#i="";#n="";#c=1;#l=[];#u="";#p="";#t=null;#h={};#g="";#d="";constructor(e="Untitled Story"){this.name=e,this.#u="extwee",this.#p="2.3.9",this.#t={}}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new Error("Story name must be a string");this.#e=e}get tagColors(){return this.#h}set tagColors(e){if(!(e instanceof Object))throw new Error("Tag colors must be an object!");this.#h=e}get IFID(){return this.#o}set IFID(e){if("string"!=typeof e)throw new Error("IFID must be a String!");this.#o=e}get start(){return this.#a}set start(e){if("string"!=typeof e)throw new Error("start (passage name) must be a String!");this.#a=e}get formatVersion(){return this.#n}set formatVersion(e){if("string"!=typeof e)throw new Error("Story format version must be a String!");this.#n=e}get metadata(){return this.#t}set metadata(e){if("object"!=typeof e)throw new Error("Story metadata must be Object!");this.#t=e}get format(){return this.#i}set format(e){if("string"!=typeof e)throw new Error("Story format must be a String!");this.#i=e}get creator(){return this.#u}set creator(e){if("string"!=typeof e)throw new Error("Creator must be String");this.#u=e}get creatorVersion(){return this.#p}set creatorVersion(e){if("string"!=typeof e)throw new Error("Creator version must be a string!");this.#p=e}get zoom(){return this.#c}set zoom(e){if("number"!=typeof e)throw new Error("Zoom level must be a Number!");this.#c=Number(Number.parseFloat(e).toFixed(2))}get passages(){return this.#l}set passages(e){if(!Array.isArray(e))throw new Error("Passages must be an Array!");if(!e.every((e=>e instanceof m)))throw new Error("Passages must be an Array of Passage objects!");this.#l=e}get storyStylesheet(){return this.#d}set storyStylesheet(e){if("string"!=typeof e)throw new Error("Story stylesheet must be a string!");this.#d=e}get storyJavaScript(){return this.#g}set storyJavaScript(e){if("string"!=typeof e)throw new Error("Story JavaScript must be a string!");this.#g=e}addPassage(e){if(!(e instanceof m))throw new Error("Can only add Passages to the story!");if(null!==this.getPassageByName(e.name))return console.warn(`Warning: A passage with the name "${e.name}" already exists!`),this.#l.length;if("StoryData"===e.name){try{const r=JSON.parse(e.text);Object.prototype.hasOwnProperty.call(r,"ifid")&&(this.IFID=r.ifid),Object.prototype.hasOwnProperty.call(r,"format")&&(this.format=r.format),Object.prototype.hasOwnProperty.call(r,"format-version")&&(this.formatVersion=r["format-version"]),Object.prototype.hasOwnProperty.call(r,"zoom")&&(this.zoom=r.zoom),Object.prototype.hasOwnProperty.call(r,"start")&&(this.start=r.start),Object.prototype.hasOwnProperty.call(r,"tag-colors")&&(this.tagColors=r["tag-colors"])}catch(e){}return this.#l.length}return"StoryTitle"===e.name?(this.name=e.text,this.#l.length):("Start"===e.name&&""==this.start&&(this.start=e.name),e.tags.includes("script")?(this.#g+=e.text,this.#l.length):e.tags.includes("stylesheet")?(this.#d+=e.text,this.#l.length):this.#l.push(e))}removePassageByName(e){return this.#l=this.#l.filter((r=>r.name!==e)),this.#l.length}getPassagesByTag(e){return this.#l.filter((r=>r.tags.some((r=>e===r))))}getPassageByName(e){const r=this.#l.find((r=>r.name===e));return void 0!==r?r:null}size(){return this.#l.length}toJSON(){const e={name:this.name,tagColors:this.tagColors,ifid:this.IFID,start:this.start,formatVersion:this.formatVersion,metadata:this.metadata,format:this.format,creator:this.creator,creatorVersion:this.creatorVersion,zoom:this.zoom,style:this.storyStylesheet,script:this.storyJavaScript,passages:[]};return this.passages.forEach((r=>{e.passages.push({name:r.name,tags:r.tags,metadata:r.metadata,text:r.text})})),JSON.stringify(e,null,4)}toTwee(){let e=":: StoryData\n";const r={};return null===this.IFID.match(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/)?(r.ifid=b(),console.warn("Warning: IFID is not in UUIDv4 format! A new IFID was generated.")):r.ifid=this.IFID,""!==this.format&&(r.format=this.format),""!==this.formatVersion&&(r["format-version"]=this.formatVersion),0!==this.zoom&&(r.zoom=this.zoom),""!==this.start&&(r.start=this.start),Object.keys(this.tagColors).length>0&&(r["tag-colors"]=this.tagColors),e+=`${JSON.stringify(r,void 0,2)}`,e+="\n\n",e+=":: StoryTitle\n"+this.name,e+="\n\n",this.#d.length>0&&(e+=":: StoryStylesheet [stylesheet]\n"+this.#d+"\n\n"),this.#g.length>0&&(e+=":: StoryJavaScript [script]\n"+this.#g+"\n\n"),this.passages.forEach((r=>{e+=r.toTwee()})),e}toTwine2HTML(){let e=this.passages,r=`<tw-storydata name="${p(this.name)}"`;""!==this.IFID?r+=` ifid="${this.IFID}"`:r+=` ifid="${b()}"`;let t=1,s=1;e.forEach((e=>{e.name===this.start&&(s=t),t++})),0===e.length&&(s=0),r+=` startnode="${s}"`,""!==this.creator&&(r+=` creator="${p(this.creator)}"`),""!==this.creatorVersion&&(r+=` creator-version="${this.creatorVersion}"`),1!==this.zoom&&(r+=` zoom="${this.zoom}"`),""!==this.format&&(r+=` format="${this.format}"`),""!==this.formatVersion&&(r+=` format-version="${this.formatVersion}"`),r+=" options hidden>\n";const a=e.filter((e=>e.tags.includes("stylesheet")));e=e.filter((e=>!e.tags.includes("stylesheet"))),a.length>0&&(r+='\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">',a.forEach((e=>{r+=e.text})),r+="</style>\n"),this.#d.length>0&&(r+=`\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">${this.#d}</style>\n`);const o=e.filter((e=>e.tags.includes("script")));return e=e.filter((e=>!e.tags.includes("script"))),o.length>0&&(r+='\t<script role="script" id="twine-user-script" type="text/twine-javascript">',o.forEach((e=>{r+=e.text})),r+="<\/script>\n"),this.#g.length>0&&(r+=`\t<script role="script" id="twine-user-script" type="text/twine-javascript">${this.#g}<\/script>\n`),t=1,this.passages.forEach((e=>{r+=e.toTwine2HTML(t),t++})),Object.keys(this.tagColors).forEach((e=>{r+=`\t<tw-tag name="${e}" color="${this.tagColors[e]}"></tw-tag>\n`})),r+="</tw-storydata>",r}toTwine1HTML(){let e="";return this.passages.forEach((r=>{e+=`\t${r.toTwine1HTML()}`})),e}}var w=t(117);function v(e){if(!Buffer.isBuffer(e))throw new Error("Only parsing of Buffer is allowed!");const r=new w.Parser;let t=null;try{t=r.parse(e)}catch(e){throw new TypeError(`Error: Buffer does not contain Python pickle data! ${e}`)}const s=new y;if(Object.prototype.hasOwnProperty.call(t,"storyPanel")&&(Object.prototype.hasOwnProperty.call(t.storyPanel,"scale")&&(s.zoom=t.storyPanel.scale),Object.prototype.hasOwnProperty.call(t.storyPanel,"widgets")))for(const e of t.storyPanel.widgets){const r=new m;r.name=e.passage.title,r.tags=e.passage.tags,r.text=e.passage.text,"Start"===r.name&&(s.start=r.name),"StoryTitle"===r.name&&(s.name=r.text),s.addPassage(r)}return s}const q={parseTWS:v,parse:v},_="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==t.g?t.g:"undefined"!=typeof self?self:null;_&&(_.Extwee=_.Extwee||{},_.Extwee.parseTWS=v)})(),s.default})()));
1
+ !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.Extwee=r():e.Extwee=r()}(this,(()=>(()=>{var e={117:function(e,r){!function(e){"use strict";class r{constructor(e){this._utf8Decoder=new TextDecoder("utf-8"),this._asciiDecoder=new TextDecoder("ascii"),this._buffer=e,this._dataView=new DataView(e.buffer,e.byteOffset,e.byteLength),this._position=0}get length(){return this._buffer.byteLength}get position(){return this._position}byte(){const e=this._position;return this.skip(1),this._dataView.getUint8(e)}bytes(e){const r=this._position;return this.skip(e),this._buffer.subarray(r,this._position)}uint16(){const e=this.position;return this.skip(2),this._dataView.getUint16(e,!0)}int32(){const e=this.position;return this.skip(4),this._dataView.getInt32(e,!0)}uint32(){const e=this.position;return this.skip(4),this._dataView.getUint32(e,!0)}uint64(){const e=this.position;this.skip(8);const r=this._dataView.getUint32(e,!0)+2**32*this._dataView.getUint32(e+4,!0);return Number.isSafeInteger(r)||console.warn(r,"exceeds MAX_SAFE_INTEGER. Precision may be lost"),r}float64(){const e=this.position;return this.skip(8),this._dataView.getFloat64(e,!1)}skip(e){if(this._position+=e,this._position>this._buffer.length)throw new Error("Expected "+(this._position-this._buffer.length)+" more bytes. The file might be corrupted. Unexpected end of file.")}string(e,r){const t=this.bytes(e);return"utf-8"==r?this._utf8Decoder.decode(t):this._asciiDecoder.decode(t)}line(){const e=this._buffer.indexOf(10,this._position);if(-1==e)throw new Error("Could not find end of line.");const r=e-this._position,t=this.string(r,"ascii");return this.skip(1),t}hasNext(){return this.position<this.length}}function t(e){if(e.length>8)throw new Error("Value too large to unpickling");const t=new ArrayBuffer(8),s=new Uint8Array(t);return s.set(e),new r(s).uint64()}function s(e){let r=0,t=0;for(;r<e.length;)r+=4,t+=1;const s=new ArrayBuffer(r);new Uint8Array(s).set(e);const a=new DataView(s,0,r);let o=BigInt(0);for(let e=0;e<t;e++)o|=BigInt(a.getUint32(4*e,!0))<<BigInt(32*e);return o}const a={create:()=>[],createWithItems:e=>Array.from(e),addMethod:function(e,r){e.push(r)}},o={create:()=>new Set,createWithItems:e=>new Set(e),addMethod:function(e,r){e.add(r)}},i={create:()=>({}),setMethod:function(e,r,t){e[r]=t}},n={create:()=>new Map,setMethod:function(e,r,t){e.set(r,t)}};function c(e,r){const t=function(...t){if(!new.target){const s=function(...e){Object.defineProperty(this,"args",{value:e,enumerable:!1,configurable:!1,writable:!1})};return s.prototype.__module__=e,s.prototype.__name__=r,Reflect.construct(s,t)}Object.defineProperty(this,"args",{value:t,enumerable:!1,configurable:!1,writable:!1})};return t.prototype.__module__=e,t.prototype.__name__=r,t.prototype.__setnewargs_ex__=function(...e){Object.defineProperty(this,"kwargs",{value:e,enumerable:!1,configurable:!1,writable:!1})},t}const l={nameResolver:{resolve:(e,r)=>c(e,r)},persistentResolver:{resolve:e=>{throw new Error(`Unregistered persistent id: \`${e}\`.`)}},extensionResolver:{resolve:e=>{throw new Error(`Unregistered extension code: \`${e.toString(16)}\`.`)}},unpicklingTypeOfSet:"array",unpicklingTypeOfDictionary:"object"};class u{constructor(){this._registry=new Map}register(e,r,t){const s=u.getFullyQualifiedName(e,r);if(this._registry.has(s))throw new Error(`'${s}' is already registered.`);return this._registry.set(s,t),this}resolve(e,r){const t=u.getFullyQualifiedName(e,r);return this._registry.get(t)??this.onMissingName(e,r)}onMissingName(e,r){return c(e,r)}static getFullyQualifiedName(e,r){return e+"."+r}}e.BufferReader=r,e.NameRegistry=u,e.Parser=class{constructor(e){this._options={...l,...e},this._nameResolver=this._options.nameResolver,this._persistentResolver=this._options.persistentResolver,this._extensionResolver=this._options.extensionResolver,this._setProvider=(e=>{switch(e){case"Set":return o;case"array":return a;default:throw new Error(`Unknown unpickling type [${e}] of Set.`)}})(this._options.unpicklingTypeOfSet),this._dictionaryProvider=(e=>{switch(e){case"Map":return n;case"object":return i;default:throw new Error(`Unknown unpickling type [${e}] of Dictionary.`)}})(this._options.unpicklingTypeOfDictionary),this._buffers=e?.buffers}parse(e){const t=new r(e);return this.read(t)}read(e){let r=[];const a=[],o=new Map;for(;e.hasNext();){const i=e.byte();switch(i){case 128:{const r=e.byte();if(r>5)throw new Error(`Unsupported protocol version '${r}'.`);break}case 46:return r.pop();case 149:e.skip(8);break;case 40:a.push(r),r=[];break;case 49:r=a.pop();break;case 48:r.pop();break;case 50:r.push(r[r.length-1]);break;case 112:{const t=parseInt(e.line(),10);o.set(t,r[r.length-1]);break}case 113:o.set(e.byte(),r[r.length-1]);break;case 114:o.set(e.uint32(),r[r.length-1]);break;case 148:o.set(o.size,r[r.length-1]);break;case 103:{const t=parseInt(e.line(),10);r.push(o.get(t));break}case 104:r.push(o.get(e.byte()));break;case 106:r.push(o.get(e.uint32()));break;case 78:r.push(null);break;case 136:r.push(!0);break;case 137:r.push(!1);break;case 73:{const t=e.line();"01"==t?r.push(!0):"00"==t?r.push(!1):r.push(parseInt(t,10));break}case 76:r.push(parseInt(e.line(),10));break;case 70:r.push(parseFloat(e.line()));break;case 83:{const t=e.line();if(t.length>=2&&t[0]==t.slice(-1)&&['"',"'"].includes(t[0])){r.push(t.slice(1,-1));break}throw new Error("Insecure string pickle.")}case 86:r.push(e.line());break;case 74:r.push(e.int32());break;case 75:r.push(e.byte());break;case 77:r.push(e.uint16());break;case 138:{const s=e.byte(),a=t(e.bytes(s));r.push(a);break}case 139:{const t=e.uint32(),a=s(e.bytes(t));r.push(a);break}case 71:r.push(e.float64());break;case 66:r.push(e.bytes(e.int32()));break;case 67:r.push(e.bytes(e.byte()));break;case 142:case 150:r.push(e.bytes(e.uint64()));break;case 84:r.push(e.string(e.uint32(),"ascii"));break;case 85:r.push(e.string(e.byte(),"ascii"));break;case 88:r.push(e.string(e.uint32(),"utf-8"));break;case 140:r.push(e.string(e.byte(),"utf-8"));break;case 141:r.push(e.string(e.uint64(),"utf-8"));break;case 41:case 93:r.push([]);break;case 116:{const e=r;r=a.pop(),r.push(e);break}case 133:r.push([r.pop()]);break;case 134:{const e=r.pop(),t=r.pop();r.push([t,e]);break}case 135:{const e=r.pop(),t=r.pop(),s=r.pop();r.push([s,t,e]);break}case 108:{const e=r;r=a.pop(),r.push(e);break}case 97:{const e=r.pop();r[r.length-1].push(e);break}case 101:{const e=r;r=a.pop(),r[r.length-1].push(...e);break}case 125:{const e=this._dictionaryProvider.create();r.push(e);break}case 100:{const e=r;r=a.pop();const t=this._dictionaryProvider.create();for(let r=0;r<e.length;r+=2)t[e[r]]=e[r+1];r.push(t);break}case 115:{const e=r.pop(),t=r.pop(),s=r[r.length-1];this._dictionaryProvider.setMethod(s,t,e);break}case 117:{const e=r;r=a.pop();const t=r[r.length-1];for(let r=0;r<e.length;r+=2)this._dictionaryProvider.setMethod(t,e[r],e[r+1]);break}case 143:{const e=this._setProvider.create();r.push(e);break}case 145:{const e=r;r=a.pop();const t=this._setProvider.createWithItems(e);r.push(t);break}case 144:{const e=r;r=a.pop();const t=r[r.length-1];for(let r=0;r<e.length;r++)this._setProvider.addMethod(t,e[r]);break}case 130:{const t=e.byte(),s=this._extensionResolver.resolve(t);r.push(s);break}case 131:{const t=e.uint16(),s=this._extensionResolver.resolve(t);r.push(s);break}case 132:{const t=e.uint32(),s=this._extensionResolver.resolve(t);r.push(s);break}case 99:{const t=e.line(),s=e.line(),a=this._nameResolver.resolve(t,s);r.push(a);break}case 147:{const e=r.pop(),t=r.pop(),s=this._nameResolver.resolve(t,e);r.push(s);break}case 105:{const t=e.line(),s=e.line(),o=r;r=a.pop();const i=this._nameResolver.resolve(t,s),n=Reflect.construct(i,o);r.push(n);break}case 111:{const e=r,t=e.pop();r=a.pop();const s=Reflect.construct(t,e);r.push(s);break}case 129:{const e=r.pop(),t=r.pop(),s=Reflect.construct(t,e);r.push(s);break}case 146:{const e=r.pop(),t=r.pop(),s=r.pop(),a=Reflect.construct(s,t);a.__setnewargs_ex__&&a.__setnewargs_ex__(e),r.push(a);break}case 80:{const t=e.line(),s=this._persistentResolver.resolve(t);r.push(s);break}case 81:{const e=r.pop(),t=this._persistentResolver.resolve(e);r.push(t);break}case 82:{const e=r.pop(),t=r.pop();r.push(t(...e));break}case 98:{const e=r.pop(),t=r[r.length-1];if(t.__setstate__){t.__setstate__(e);break}if(t instanceof Map){if(e instanceof Map&&e.has("__dict__")){for(const[r,s]of e.get("__dict__"))t.set(r,s);break}if(e.__dict__){for(const r in e.__dict__)t.set(r,e.__dict__[r]);break}}else e instanceof Map?Object.assign(t,Object.fromEntries(e)):Object.assign(t,e);break}case 151:{if(null==this._buffers)throw new Error("pickle stream refers to out-of-band data but no *buffers* argument was given");const e=this._buffers.next();if(e.done)throw new Error("not enough out-of-band buffers");r.push(e.value);break}case 152:r.push(r.pop());break;default:throw new Error(`Unsupported opcode '${i}'.`)}}throw new Error("Unexpected end of file.")}}}(r)}},r={};function t(s){var a=r[s];if(void 0!==a)return a.exports;var o=r[s]={exports:{}};return e[s].call(o.exports,o,o.exports,t),o.exports}t.d=(e,r)=>{for(var s in r)t.o(r,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:r[s]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r);var s={};return(()=>{"use strict";t.d(s,{default:()=>q});var e=function(){return e=Object.assign||function(e){for(var r,t=1,s=arguments.length;t<s;t++)for(var a in r=arguments[t])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e},e.apply(this,arguments)};function r(r,t){for(var s={},a={},o=r.split("~~"),i=!1,n=0;o.length>n;n++){for(var c=o[n].split("~"),l=0;l<c.length;l+=2){var u=c[l],p=c[l+1],h="&"+u+";";s[h]=p,i&&(s["&"+u]=p),a[p]=h}i=!0}return t?{entities:e(e({},s),t.entities),characters:e(e({},a),t.characters)}:{entities:s,characters:a}}var a={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&notin;|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&centerdot;|&copysr;|&divideontimes;|&gtcc;|&gtcir;|&gtdot;|&gtlPar;|&gtquest;|&gtrapprox;|&gtrarr;|&gtrdot;|&gtreqless;|&gtreqqless;|&gtrless;|&gtrsim;|&ltcc;|&ltcir;|&ltdot;|&lthree;|&ltimes;|&ltlarr;|&ltquest;|&ltrPar;|&ltri;|&ltrie;|&ltrif;|&notin;|&notinE;|&notindot;|&notinva;|&notinvb;|&notinvc;|&notni;|&notniva;|&notnivb;|&notnivc;|&parallel;|&timesb;|&timesbar;|&timesd;|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g},o={};o.xml=r("lt~<~gt~>~quot~\"~apos~'~amp~&"),o.html4=r("apos~'~OElig~Œ~oelig~œ~Scaron~Š~scaron~š~Yuml~Ÿ~circ~ˆ~tilde~˜~ensp~ ~emsp~ ~thinsp~ ~zwnj~‌~zwj~‍~lrm~‎~rlm~‏~ndash~–~mdash~—~lsquo~‘~rsquo~’~sbquo~‚~ldquo~“~rdquo~”~bdquo~„~dagger~†~Dagger~‡~permil~‰~lsaquo~‹~rsaquo~›~euro~€~fnof~ƒ~Alpha~Α~Beta~Β~Gamma~Γ~Delta~Δ~Epsilon~Ε~Zeta~Ζ~Eta~Η~Theta~Θ~Iota~Ι~Kappa~Κ~Lambda~Λ~Mu~Μ~Nu~Ν~Xi~Ξ~Omicron~Ο~Pi~Π~Rho~Ρ~Sigma~Σ~Tau~Τ~Upsilon~Υ~Phi~Φ~Chi~Χ~Psi~Ψ~Omega~Ω~alpha~α~beta~β~gamma~γ~delta~δ~epsilon~ε~zeta~ζ~eta~η~theta~θ~iota~ι~kappa~κ~lambda~λ~mu~μ~nu~ν~xi~ξ~omicron~ο~pi~π~rho~ρ~sigmaf~ς~sigma~σ~tau~τ~upsilon~υ~phi~φ~chi~χ~psi~ψ~omega~ω~thetasym~ϑ~upsih~ϒ~piv~ϖ~bull~•~hellip~…~prime~′~Prime~″~oline~‾~frasl~⁄~weierp~℘~image~ℑ~real~ℜ~trade~™~alefsym~ℵ~larr~←~uarr~↑~rarr~→~darr~↓~harr~↔~crarr~↵~lArr~⇐~uArr~⇑~rArr~⇒~dArr~⇓~hArr~⇔~forall~∀~part~∂~exist~∃~empty~∅~nabla~∇~isin~∈~notin~∉~ni~∋~prod~∏~sum~∑~minus~−~lowast~∗~radic~√~prop~∝~infin~∞~ang~∠~and~∧~or~∨~cap~∩~cup~∪~int~∫~there4~∴~sim~∼~cong~≅~asymp~≈~ne~≠~equiv~≡~le~≤~ge~≥~sub~⊂~sup~⊃~nsub~⊄~sube~⊆~supe~⊇~oplus~⊕~otimes~⊗~perp~⊥~sdot~⋅~lceil~⌈~rceil~⌉~lfloor~⌊~rfloor~⌋~lang~〈~rang~〉~loz~◊~spades~♠~clubs~♣~hearts~♥~diams~♦~~nbsp~ ~iexcl~¡~cent~¢~pound~£~curren~¤~yen~¥~brvbar~¦~sect~§~uml~¨~copy~©~ordf~ª~laquo~«~not~¬~shy~­~reg~®~macr~¯~deg~°~plusmn~±~sup2~²~sup3~³~acute~´~micro~µ~para~¶~middot~·~cedil~¸~sup1~¹~ordm~º~raquo~»~frac14~¼~frac12~½~frac34~¾~iquest~¿~Agrave~À~Aacute~Á~Acirc~Â~Atilde~Ã~Auml~Ä~Aring~Å~AElig~Æ~Ccedil~Ç~Egrave~È~Eacute~É~Ecirc~Ê~Euml~Ë~Igrave~Ì~Iacute~Í~Icirc~Î~Iuml~Ï~ETH~Ð~Ntilde~Ñ~Ograve~Ò~Oacute~Ó~Ocirc~Ô~Otilde~Õ~Ouml~Ö~times~×~Oslash~Ø~Ugrave~Ù~Uacute~Ú~Ucirc~Û~Uuml~Ü~Yacute~Ý~THORN~Þ~szlig~ß~agrave~à~aacute~á~acirc~â~atilde~ã~auml~ä~aring~å~aelig~æ~ccedil~ç~egrave~è~eacute~é~ecirc~ê~euml~ë~igrave~ì~iacute~í~icirc~î~iuml~ï~eth~ð~ntilde~ñ~ograve~ò~oacute~ó~ocirc~ô~otilde~õ~ouml~ö~divide~÷~oslash~ø~ugrave~ù~uacute~ú~ucirc~û~uuml~ü~yacute~ý~thorn~þ~yuml~ÿ~quot~\"~amp~&~lt~<~gt~>"),o.html5=r('Abreve~Ă~Acy~А~Afr~𝔄~Amacr~Ā~And~⩓~Aogon~Ą~Aopf~𝔸~ApplyFunction~⁡~Ascr~𝒜~Assign~≔~Backslash~∖~Barv~⫧~Barwed~⌆~Bcy~Б~Because~∵~Bernoullis~ℬ~Bfr~𝔅~Bopf~𝔹~Breve~˘~Bscr~ℬ~Bumpeq~≎~CHcy~Ч~Cacute~Ć~Cap~⋒~CapitalDifferentialD~ⅅ~Cayleys~ℭ~Ccaron~Č~Ccirc~Ĉ~Cconint~∰~Cdot~Ċ~Cedilla~¸~CenterDot~·~Cfr~ℭ~CircleDot~⊙~CircleMinus~⊖~CirclePlus~⊕~CircleTimes~⊗~ClockwiseContourIntegral~∲~CloseCurlyDoubleQuote~”~CloseCurlyQuote~’~Colon~∷~Colone~⩴~Congruent~≡~Conint~∯~ContourIntegral~∮~Copf~ℂ~Coproduct~∐~CounterClockwiseContourIntegral~∳~Cross~⨯~Cscr~𝒞~Cup~⋓~CupCap~≍~DD~ⅅ~DDotrahd~⤑~DJcy~Ђ~DScy~Ѕ~DZcy~Џ~Darr~↡~Dashv~⫤~Dcaron~Ď~Dcy~Д~Del~∇~Dfr~𝔇~DiacriticalAcute~´~DiacriticalDot~˙~DiacriticalDoubleAcute~˝~DiacriticalGrave~`~DiacriticalTilde~˜~Diamond~⋄~DifferentialD~ⅆ~Dopf~𝔻~Dot~¨~DotDot~⃜~DotEqual~≐~DoubleContourIntegral~∯~DoubleDot~¨~DoubleDownArrow~⇓~DoubleLeftArrow~⇐~DoubleLeftRightArrow~⇔~DoubleLeftTee~⫤~DoubleLongLeftArrow~⟸~DoubleLongLeftRightArrow~⟺~DoubleLongRightArrow~⟹~DoubleRightArrow~⇒~DoubleRightTee~⊨~DoubleUpArrow~⇑~DoubleUpDownArrow~⇕~DoubleVerticalBar~∥~DownArrow~↓~DownArrowBar~⤓~DownArrowUpArrow~⇵~DownBreve~̑~DownLeftRightVector~⥐~DownLeftTeeVector~⥞~DownLeftVector~↽~DownLeftVectorBar~⥖~DownRightTeeVector~⥟~DownRightVector~⇁~DownRightVectorBar~⥗~DownTee~⊤~DownTeeArrow~↧~Downarrow~⇓~Dscr~𝒟~Dstrok~Đ~ENG~Ŋ~Ecaron~Ě~Ecy~Э~Edot~Ė~Efr~𝔈~Element~∈~Emacr~Ē~EmptySmallSquare~◻~EmptyVerySmallSquare~▫~Eogon~Ę~Eopf~𝔼~Equal~⩵~EqualTilde~≂~Equilibrium~⇌~Escr~ℰ~Esim~⩳~Exists~∃~ExponentialE~ⅇ~Fcy~Ф~Ffr~𝔉~FilledSmallSquare~◼~FilledVerySmallSquare~▪~Fopf~𝔽~ForAll~∀~Fouriertrf~ℱ~Fscr~ℱ~GJcy~Ѓ~Gammad~Ϝ~Gbreve~Ğ~Gcedil~Ģ~Gcirc~Ĝ~Gcy~Г~Gdot~Ġ~Gfr~𝔊~Gg~⋙~Gopf~𝔾~GreaterEqual~≥~GreaterEqualLess~⋛~GreaterFullEqual~≧~GreaterGreater~⪢~GreaterLess~≷~GreaterSlantEqual~⩾~GreaterTilde~≳~Gscr~𝒢~Gt~≫~HARDcy~Ъ~Hacek~ˇ~Hat~^~Hcirc~Ĥ~Hfr~ℌ~HilbertSpace~ℋ~Hopf~ℍ~HorizontalLine~─~Hscr~ℋ~Hstrok~Ħ~HumpDownHump~≎~HumpEqual~≏~IEcy~Е~IJlig~IJ~IOcy~Ё~Icy~И~Idot~İ~Ifr~ℑ~Im~ℑ~Imacr~Ī~ImaginaryI~ⅈ~Implies~⇒~Int~∬~Integral~∫~Intersection~⋂~InvisibleComma~⁣~InvisibleTimes~⁢~Iogon~Į~Iopf~𝕀~Iscr~ℐ~Itilde~Ĩ~Iukcy~І~Jcirc~Ĵ~Jcy~Й~Jfr~𝔍~Jopf~𝕁~Jscr~𝒥~Jsercy~Ј~Jukcy~Є~KHcy~Х~KJcy~Ќ~Kcedil~Ķ~Kcy~К~Kfr~𝔎~Kopf~𝕂~Kscr~𝒦~LJcy~Љ~Lacute~Ĺ~Lang~⟪~Laplacetrf~ℒ~Larr~↞~Lcaron~Ľ~Lcedil~Ļ~Lcy~Л~LeftAngleBracket~⟨~LeftArrow~←~LeftArrowBar~⇤~LeftArrowRightArrow~⇆~LeftCeiling~⌈~LeftDoubleBracket~⟦~LeftDownTeeVector~⥡~LeftDownVector~⇃~LeftDownVectorBar~⥙~LeftFloor~⌊~LeftRightArrow~↔~LeftRightVector~⥎~LeftTee~⊣~LeftTeeArrow~↤~LeftTeeVector~⥚~LeftTriangle~⊲~LeftTriangleBar~⧏~LeftTriangleEqual~⊴~LeftUpDownVector~⥑~LeftUpTeeVector~⥠~LeftUpVector~↿~LeftUpVectorBar~⥘~LeftVector~↼~LeftVectorBar~⥒~Leftarrow~⇐~Leftrightarrow~⇔~LessEqualGreater~⋚~LessFullEqual~≦~LessGreater~≶~LessLess~⪡~LessSlantEqual~⩽~LessTilde~≲~Lfr~𝔏~Ll~⋘~Lleftarrow~⇚~Lmidot~Ŀ~LongLeftArrow~⟵~LongLeftRightArrow~⟷~LongRightArrow~⟶~Longleftarrow~⟸~Longleftrightarrow~⟺~Longrightarrow~⟹~Lopf~𝕃~LowerLeftArrow~↙~LowerRightArrow~↘~Lscr~ℒ~Lsh~↰~Lstrok~Ł~Lt~≪~Map~⤅~Mcy~М~MediumSpace~ ~Mellintrf~ℳ~Mfr~𝔐~MinusPlus~∓~Mopf~𝕄~Mscr~ℳ~NJcy~Њ~Nacute~Ń~Ncaron~Ň~Ncedil~Ņ~Ncy~Н~NegativeMediumSpace~​~NegativeThickSpace~​~NegativeThinSpace~​~NegativeVeryThinSpace~​~NestedGreaterGreater~≫~NestedLessLess~≪~NewLine~\n~Nfr~𝔑~NoBreak~⁠~NonBreakingSpace~ ~Nopf~ℕ~Not~⫬~NotCongruent~≢~NotCupCap~≭~NotDoubleVerticalBar~∦~NotElement~∉~NotEqual~≠~NotEqualTilde~≂̸~NotExists~∄~NotGreater~≯~NotGreaterEqual~≱~NotGreaterFullEqual~≧̸~NotGreaterGreater~≫̸~NotGreaterLess~≹~NotGreaterSlantEqual~⩾̸~NotGreaterTilde~≵~NotHumpDownHump~≎̸~NotHumpEqual~≏̸~NotLeftTriangle~⋪~NotLeftTriangleBar~⧏̸~NotLeftTriangleEqual~⋬~NotLess~≮~NotLessEqual~≰~NotLessGreater~≸~NotLessLess~≪̸~NotLessSlantEqual~⩽̸~NotLessTilde~≴~NotNestedGreaterGreater~⪢̸~NotNestedLessLess~⪡̸~NotPrecedes~⊀~NotPrecedesEqual~⪯̸~NotPrecedesSlantEqual~⋠~NotReverseElement~∌~NotRightTriangle~⋫~NotRightTriangleBar~⧐̸~NotRightTriangleEqual~⋭~NotSquareSubset~⊏̸~NotSquareSubsetEqual~⋢~NotSquareSuperset~⊐̸~NotSquareSupersetEqual~⋣~NotSubset~⊂⃒~NotSubsetEqual~⊈~NotSucceeds~⊁~NotSucceedsEqual~⪰̸~NotSucceedsSlantEqual~⋡~NotSucceedsTilde~≿̸~NotSuperset~⊃⃒~NotSupersetEqual~⊉~NotTilde~≁~NotTildeEqual~≄~NotTildeFullEqual~≇~NotTildeTilde~≉~NotVerticalBar~∤~Nscr~𝒩~Ocy~О~Odblac~Ő~Ofr~𝔒~Omacr~Ō~Oopf~𝕆~OpenCurlyDoubleQuote~“~OpenCurlyQuote~‘~Or~⩔~Oscr~𝒪~Otimes~⨷~OverBar~‾~OverBrace~⏞~OverBracket~⎴~OverParenthesis~⏜~PartialD~∂~Pcy~П~Pfr~𝔓~PlusMinus~±~Poincareplane~ℌ~Popf~ℙ~Pr~⪻~Precedes~≺~PrecedesEqual~⪯~PrecedesSlantEqual~≼~PrecedesTilde~≾~Product~∏~Proportion~∷~Proportional~∝~Pscr~𝒫~Qfr~𝔔~Qopf~ℚ~Qscr~𝒬~RBarr~⤐~Racute~Ŕ~Rang~⟫~Rarr~↠~Rarrtl~⤖~Rcaron~Ř~Rcedil~Ŗ~Rcy~Р~Re~ℜ~ReverseElement~∋~ReverseEquilibrium~⇋~ReverseUpEquilibrium~⥯~Rfr~ℜ~RightAngleBracket~⟩~RightArrow~→~RightArrowBar~⇥~RightArrowLeftArrow~⇄~RightCeiling~⌉~RightDoubleBracket~⟧~RightDownTeeVector~⥝~RightDownVector~⇂~RightDownVectorBar~⥕~RightFloor~⌋~RightTee~⊢~RightTeeArrow~↦~RightTeeVector~⥛~RightTriangle~⊳~RightTriangleBar~⧐~RightTriangleEqual~⊵~RightUpDownVector~⥏~RightUpTeeVector~⥜~RightUpVector~↾~RightUpVectorBar~⥔~RightVector~⇀~RightVectorBar~⥓~Rightarrow~⇒~Ropf~ℝ~RoundImplies~⥰~Rrightarrow~⇛~Rscr~ℛ~Rsh~↱~RuleDelayed~⧴~SHCHcy~Щ~SHcy~Ш~SOFTcy~Ь~Sacute~Ś~Sc~⪼~Scedil~Ş~Scirc~Ŝ~Scy~С~Sfr~𝔖~ShortDownArrow~↓~ShortLeftArrow~←~ShortRightArrow~→~ShortUpArrow~↑~SmallCircle~∘~Sopf~𝕊~Sqrt~√~Square~□~SquareIntersection~⊓~SquareSubset~⊏~SquareSubsetEqual~⊑~SquareSuperset~⊐~SquareSupersetEqual~⊒~SquareUnion~⊔~Sscr~𝒮~Star~⋆~Sub~⋐~Subset~⋐~SubsetEqual~⊆~Succeeds~≻~SucceedsEqual~⪰~SucceedsSlantEqual~≽~SucceedsTilde~≿~SuchThat~∋~Sum~∑~Sup~⋑~Superset~⊃~SupersetEqual~⊇~Supset~⋑~TRADE~™~TSHcy~Ћ~TScy~Ц~Tab~\t~Tcaron~Ť~Tcedil~Ţ~Tcy~Т~Tfr~𝔗~Therefore~∴~ThickSpace~  ~ThinSpace~ ~Tilde~∼~TildeEqual~≃~TildeFullEqual~≅~TildeTilde~≈~Topf~𝕋~TripleDot~⃛~Tscr~𝒯~Tstrok~Ŧ~Uarr~↟~Uarrocir~⥉~Ubrcy~Ў~Ubreve~Ŭ~Ucy~У~Udblac~Ű~Ufr~𝔘~Umacr~Ū~UnderBar~_~UnderBrace~⏟~UnderBracket~⎵~UnderParenthesis~⏝~Union~⋃~UnionPlus~⊎~Uogon~Ų~Uopf~𝕌~UpArrow~↑~UpArrowBar~⤒~UpArrowDownArrow~⇅~UpDownArrow~↕~UpEquilibrium~⥮~UpTee~⊥~UpTeeArrow~↥~Uparrow~⇑~Updownarrow~⇕~UpperLeftArrow~↖~UpperRightArrow~↗~Upsi~ϒ~Uring~Ů~Uscr~𝒰~Utilde~Ũ~VDash~⊫~Vbar~⫫~Vcy~В~Vdash~⊩~Vdashl~⫦~Vee~⋁~Verbar~‖~Vert~‖~VerticalBar~∣~VerticalLine~|~VerticalSeparator~❘~VerticalTilde~≀~VeryThinSpace~ ~Vfr~𝔙~Vopf~𝕍~Vscr~𝒱~Vvdash~⊪~Wcirc~Ŵ~Wedge~⋀~Wfr~𝔚~Wopf~𝕎~Wscr~𝒲~Xfr~𝔛~Xopf~𝕏~Xscr~𝒳~YAcy~Я~YIcy~Ї~YUcy~Ю~Ycirc~Ŷ~Ycy~Ы~Yfr~𝔜~Yopf~𝕐~Yscr~𝒴~ZHcy~Ж~Zacute~Ź~Zcaron~Ž~Zcy~З~Zdot~Ż~ZeroWidthSpace~​~Zfr~ℨ~Zopf~ℤ~Zscr~𝒵~abreve~ă~ac~∾~acE~∾̳~acd~∿~acy~а~af~⁡~afr~𝔞~aleph~ℵ~amacr~ā~amalg~⨿~andand~⩕~andd~⩜~andslope~⩘~andv~⩚~ange~⦤~angle~∠~angmsd~∡~angmsdaa~⦨~angmsdab~⦩~angmsdac~⦪~angmsdad~⦫~angmsdae~⦬~angmsdaf~⦭~angmsdag~⦮~angmsdah~⦯~angrt~∟~angrtvb~⊾~angrtvbd~⦝~angsph~∢~angst~Å~angzarr~⍼~aogon~ą~aopf~𝕒~ap~≈~apE~⩰~apacir~⩯~ape~≊~apid~≋~approx~≈~approxeq~≊~ascr~𝒶~ast~*~asympeq~≍~awconint~∳~awint~⨑~bNot~⫭~backcong~≌~backepsilon~϶~backprime~‵~backsim~∽~backsimeq~⋍~barvee~⊽~barwed~⌅~barwedge~⌅~bbrk~⎵~bbrktbrk~⎶~bcong~≌~bcy~б~becaus~∵~because~∵~bemptyv~⦰~bepsi~϶~bernou~ℬ~beth~ℶ~between~≬~bfr~𝔟~bigcap~⋂~bigcirc~◯~bigcup~⋃~bigodot~⨀~bigoplus~⨁~bigotimes~⨂~bigsqcup~⨆~bigstar~★~bigtriangledown~▽~bigtriangleup~△~biguplus~⨄~bigvee~⋁~bigwedge~⋀~bkarow~⤍~blacklozenge~⧫~blacksquare~▪~blacktriangle~▴~blacktriangledown~▾~blacktriangleleft~◂~blacktriangleright~▸~blank~␣~blk12~▒~blk14~░~blk34~▓~block~█~bne~=⃥~bnequiv~≡⃥~bnot~⌐~bopf~𝕓~bot~⊥~bottom~⊥~bowtie~⋈~boxDL~╗~boxDR~╔~boxDl~╖~boxDr~╓~boxH~═~boxHD~╦~boxHU~╩~boxHd~╤~boxHu~╧~boxUL~╝~boxUR~╚~boxUl~╜~boxUr~╙~boxV~║~boxVH~╬~boxVL~╣~boxVR~╠~boxVh~╫~boxVl~╢~boxVr~╟~boxbox~⧉~boxdL~╕~boxdR~╒~boxdl~┐~boxdr~┌~boxh~─~boxhD~╥~boxhU~╨~boxhd~┬~boxhu~┴~boxminus~⊟~boxplus~⊞~boxtimes~⊠~boxuL~╛~boxuR~╘~boxul~┘~boxur~└~boxv~│~boxvH~╪~boxvL~╡~boxvR~╞~boxvh~┼~boxvl~┤~boxvr~├~bprime~‵~breve~˘~bscr~𝒷~bsemi~⁏~bsim~∽~bsime~⋍~bsol~\\~bsolb~⧅~bsolhsub~⟈~bullet~•~bump~≎~bumpE~⪮~bumpe~≏~bumpeq~≏~cacute~ć~capand~⩄~capbrcup~⩉~capcap~⩋~capcup~⩇~capdot~⩀~caps~∩︀~caret~⁁~caron~ˇ~ccaps~⩍~ccaron~č~ccirc~ĉ~ccups~⩌~ccupssm~⩐~cdot~ċ~cemptyv~⦲~centerdot~·~cfr~𝔠~chcy~ч~check~✓~checkmark~✓~cir~○~cirE~⧃~circeq~≗~circlearrowleft~↺~circlearrowright~↻~circledR~®~circledS~Ⓢ~circledast~⊛~circledcirc~⊚~circleddash~⊝~cire~≗~cirfnint~⨐~cirmid~⫯~cirscir~⧂~clubsuit~♣~colon~:~colone~≔~coloneq~≔~comma~,~commat~@~comp~∁~compfn~∘~complement~∁~complexes~ℂ~congdot~⩭~conint~∮~copf~𝕔~coprod~∐~copysr~℗~cross~✗~cscr~𝒸~csub~⫏~csube~⫑~csup~⫐~csupe~⫒~ctdot~⋯~cudarrl~⤸~cudarrr~⤵~cuepr~⋞~cuesc~⋟~cularr~↶~cularrp~⤽~cupbrcap~⩈~cupcap~⩆~cupcup~⩊~cupdot~⊍~cupor~⩅~cups~∪︀~curarr~↷~curarrm~⤼~curlyeqprec~⋞~curlyeqsucc~⋟~curlyvee~⋎~curlywedge~⋏~curvearrowleft~↶~curvearrowright~↷~cuvee~⋎~cuwed~⋏~cwconint~∲~cwint~∱~cylcty~⌭~dHar~⥥~daleth~ℸ~dash~‐~dashv~⊣~dbkarow~⤏~dblac~˝~dcaron~ď~dcy~д~dd~ⅆ~ddagger~‡~ddarr~⇊~ddotseq~⩷~demptyv~⦱~dfisht~⥿~dfr~𝔡~dharl~⇃~dharr~⇂~diam~⋄~diamond~⋄~diamondsuit~♦~die~¨~digamma~ϝ~disin~⋲~div~÷~divideontimes~⋇~divonx~⋇~djcy~ђ~dlcorn~⌞~dlcrop~⌍~dollar~$~dopf~𝕕~dot~˙~doteq~≐~doteqdot~≑~dotminus~∸~dotplus~∔~dotsquare~⊡~doublebarwedge~⌆~downarrow~↓~downdownarrows~⇊~downharpoonleft~⇃~downharpoonright~⇂~drbkarow~⤐~drcorn~⌟~drcrop~⌌~dscr~𝒹~dscy~ѕ~dsol~⧶~dstrok~đ~dtdot~⋱~dtri~▿~dtrif~▾~duarr~⇵~duhar~⥯~dwangle~⦦~dzcy~џ~dzigrarr~⟿~eDDot~⩷~eDot~≑~easter~⩮~ecaron~ě~ecir~≖~ecolon~≕~ecy~э~edot~ė~ee~ⅇ~efDot~≒~efr~𝔢~eg~⪚~egs~⪖~egsdot~⪘~el~⪙~elinters~⏧~ell~ℓ~els~⪕~elsdot~⪗~emacr~ē~emptyset~∅~emptyv~∅~emsp13~ ~emsp14~ ~eng~ŋ~eogon~ę~eopf~𝕖~epar~⋕~eparsl~⧣~eplus~⩱~epsi~ε~epsiv~ϵ~eqcirc~≖~eqcolon~≕~eqsim~≂~eqslantgtr~⪖~eqslantless~⪕~equals~=~equest~≟~equivDD~⩸~eqvparsl~⧥~erDot~≓~erarr~⥱~escr~ℯ~esdot~≐~esim~≂~excl~!~expectation~ℰ~exponentiale~ⅇ~fallingdotseq~≒~fcy~ф~female~♀~ffilig~ffi~fflig~ff~ffllig~ffl~ffr~𝔣~filig~fi~fjlig~fj~flat~♭~fllig~fl~fltns~▱~fopf~𝕗~fork~⋔~forkv~⫙~fpartint~⨍~frac13~⅓~frac15~⅕~frac16~⅙~frac18~⅛~frac23~⅔~frac25~⅖~frac35~⅗~frac38~⅜~frac45~⅘~frac56~⅚~frac58~⅝~frac78~⅞~frown~⌢~fscr~𝒻~gE~≧~gEl~⪌~gacute~ǵ~gammad~ϝ~gap~⪆~gbreve~ğ~gcirc~ĝ~gcy~г~gdot~ġ~gel~⋛~geq~≥~geqq~≧~geqslant~⩾~ges~⩾~gescc~⪩~gesdot~⪀~gesdoto~⪂~gesdotol~⪄~gesl~⋛︀~gesles~⪔~gfr~𝔤~gg~≫~ggg~⋙~gimel~ℷ~gjcy~ѓ~gl~≷~glE~⪒~gla~⪥~glj~⪤~gnE~≩~gnap~⪊~gnapprox~⪊~gne~⪈~gneq~⪈~gneqq~≩~gnsim~⋧~gopf~𝕘~grave~`~gscr~ℊ~gsim~≳~gsime~⪎~gsiml~⪐~gtcc~⪧~gtcir~⩺~gtdot~⋗~gtlPar~⦕~gtquest~⩼~gtrapprox~⪆~gtrarr~⥸~gtrdot~⋗~gtreqless~⋛~gtreqqless~⪌~gtrless~≷~gtrsim~≳~gvertneqq~≩︀~gvnE~≩︀~hairsp~ ~half~½~hamilt~ℋ~hardcy~ъ~harrcir~⥈~harrw~↭~hbar~ℏ~hcirc~ĥ~heartsuit~♥~hercon~⊹~hfr~𝔥~hksearow~⤥~hkswarow~⤦~hoarr~⇿~homtht~∻~hookleftarrow~↩~hookrightarrow~↪~hopf~𝕙~horbar~―~hscr~𝒽~hslash~ℏ~hstrok~ħ~hybull~⁃~hyphen~‐~ic~⁣~icy~и~iecy~е~iff~⇔~ifr~𝔦~ii~ⅈ~iiiint~⨌~iiint~∭~iinfin~⧜~iiota~℩~ijlig~ij~imacr~ī~imagline~ℐ~imagpart~ℑ~imath~ı~imof~⊷~imped~Ƶ~in~∈~incare~℅~infintie~⧝~inodot~ı~intcal~⊺~integers~ℤ~intercal~⊺~intlarhk~⨗~intprod~⨼~iocy~ё~iogon~į~iopf~𝕚~iprod~⨼~iscr~𝒾~isinE~⋹~isindot~⋵~isins~⋴~isinsv~⋳~isinv~∈~it~⁢~itilde~ĩ~iukcy~і~jcirc~ĵ~jcy~й~jfr~𝔧~jmath~ȷ~jopf~𝕛~jscr~𝒿~jsercy~ј~jukcy~є~kappav~ϰ~kcedil~ķ~kcy~к~kfr~𝔨~kgreen~ĸ~khcy~х~kjcy~ќ~kopf~𝕜~kscr~𝓀~lAarr~⇚~lAtail~⤛~lBarr~⤎~lE~≦~lEg~⪋~lHar~⥢~lacute~ĺ~laemptyv~⦴~lagran~ℒ~langd~⦑~langle~⟨~lap~⪅~larrb~⇤~larrbfs~⤟~larrfs~⤝~larrhk~↩~larrlp~↫~larrpl~⤹~larrsim~⥳~larrtl~↢~lat~⪫~latail~⤙~late~⪭~lates~⪭︀~lbarr~⤌~lbbrk~❲~lbrace~{~lbrack~[~lbrke~⦋~lbrksld~⦏~lbrkslu~⦍~lcaron~ľ~lcedil~ļ~lcub~{~lcy~л~ldca~⤶~ldquor~„~ldrdhar~⥧~ldrushar~⥋~ldsh~↲~leftarrow~←~leftarrowtail~↢~leftharpoondown~↽~leftharpoonup~↼~leftleftarrows~⇇~leftrightarrow~↔~leftrightarrows~⇆~leftrightharpoons~⇋~leftrightsquigarrow~↭~leftthreetimes~⋋~leg~⋚~leq~≤~leqq~≦~leqslant~⩽~les~⩽~lescc~⪨~lesdot~⩿~lesdoto~⪁~lesdotor~⪃~lesg~⋚︀~lesges~⪓~lessapprox~⪅~lessdot~⋖~lesseqgtr~⋚~lesseqqgtr~⪋~lessgtr~≶~lesssim~≲~lfisht~⥼~lfr~𝔩~lg~≶~lgE~⪑~lhard~↽~lharu~↼~lharul~⥪~lhblk~▄~ljcy~љ~ll~≪~llarr~⇇~llcorner~⌞~llhard~⥫~lltri~◺~lmidot~ŀ~lmoust~⎰~lmoustache~⎰~lnE~≨~lnap~⪉~lnapprox~⪉~lne~⪇~lneq~⪇~lneqq~≨~lnsim~⋦~loang~⟬~loarr~⇽~lobrk~⟦~longleftarrow~⟵~longleftrightarrow~⟷~longmapsto~⟼~longrightarrow~⟶~looparrowleft~↫~looparrowright~↬~lopar~⦅~lopf~𝕝~loplus~⨭~lotimes~⨴~lowbar~_~lozenge~◊~lozf~⧫~lpar~(~lparlt~⦓~lrarr~⇆~lrcorner~⌟~lrhar~⇋~lrhard~⥭~lrtri~⊿~lscr~𝓁~lsh~↰~lsim~≲~lsime~⪍~lsimg~⪏~lsqb~[~lsquor~‚~lstrok~ł~ltcc~⪦~ltcir~⩹~ltdot~⋖~lthree~⋋~ltimes~⋉~ltlarr~⥶~ltquest~⩻~ltrPar~⦖~ltri~◃~ltrie~⊴~ltrif~◂~lurdshar~⥊~luruhar~⥦~lvertneqq~≨︀~lvnE~≨︀~mDDot~∺~male~♂~malt~✠~maltese~✠~map~↦~mapsto~↦~mapstodown~↧~mapstoleft~↤~mapstoup~↥~marker~▮~mcomma~⨩~mcy~м~measuredangle~∡~mfr~𝔪~mho~℧~mid~∣~midast~*~midcir~⫰~minusb~⊟~minusd~∸~minusdu~⨪~mlcp~⫛~mldr~…~mnplus~∓~models~⊧~mopf~𝕞~mp~∓~mscr~𝓂~mstpos~∾~multimap~⊸~mumap~⊸~nGg~⋙̸~nGt~≫⃒~nGtv~≫̸~nLeftarrow~⇍~nLeftrightarrow~⇎~nLl~⋘̸~nLt~≪⃒~nLtv~≪̸~nRightarrow~⇏~nVDash~⊯~nVdash~⊮~nacute~ń~nang~∠⃒~nap~≉~napE~⩰̸~napid~≋̸~napos~ʼn~napprox~≉~natur~♮~natural~♮~naturals~ℕ~nbump~≎̸~nbumpe~≏̸~ncap~⩃~ncaron~ň~ncedil~ņ~ncong~≇~ncongdot~⩭̸~ncup~⩂~ncy~н~neArr~⇗~nearhk~⤤~nearr~↗~nearrow~↗~nedot~≐̸~nequiv~≢~nesear~⤨~nesim~≂̸~nexist~∄~nexists~∄~nfr~𝔫~ngE~≧̸~nge~≱~ngeq~≱~ngeqq~≧̸~ngeqslant~⩾̸~nges~⩾̸~ngsim~≵~ngt~≯~ngtr~≯~nhArr~⇎~nharr~↮~nhpar~⫲~nis~⋼~nisd~⋺~niv~∋~njcy~њ~nlArr~⇍~nlE~≦̸~nlarr~↚~nldr~‥~nle~≰~nleftarrow~↚~nleftrightarrow~↮~nleq~≰~nleqq~≦̸~nleqslant~⩽̸~nles~⩽̸~nless~≮~nlsim~≴~nlt~≮~nltri~⋪~nltrie~⋬~nmid~∤~nopf~𝕟~notinE~⋹̸~notindot~⋵̸~notinva~∉~notinvb~⋷~notinvc~⋶~notni~∌~notniva~∌~notnivb~⋾~notnivc~⋽~npar~∦~nparallel~∦~nparsl~⫽⃥~npart~∂̸~npolint~⨔~npr~⊀~nprcue~⋠~npre~⪯̸~nprec~⊀~npreceq~⪯̸~nrArr~⇏~nrarr~↛~nrarrc~⤳̸~nrarrw~↝̸~nrightarrow~↛~nrtri~⋫~nrtrie~⋭~nsc~⊁~nsccue~⋡~nsce~⪰̸~nscr~𝓃~nshortmid~∤~nshortparallel~∦~nsim~≁~nsime~≄~nsimeq~≄~nsmid~∤~nspar~∦~nsqsube~⋢~nsqsupe~⋣~nsubE~⫅̸~nsube~⊈~nsubset~⊂⃒~nsubseteq~⊈~nsubseteqq~⫅̸~nsucc~⊁~nsucceq~⪰̸~nsup~⊅~nsupE~⫆̸~nsupe~⊉~nsupset~⊃⃒~nsupseteq~⊉~nsupseteqq~⫆̸~ntgl~≹~ntlg~≸~ntriangleleft~⋪~ntrianglelefteq~⋬~ntriangleright~⋫~ntrianglerighteq~⋭~num~#~numero~№~numsp~ ~nvDash~⊭~nvHarr~⤄~nvap~≍⃒~nvdash~⊬~nvge~≥⃒~nvgt~>⃒~nvinfin~⧞~nvlArr~⤂~nvle~≤⃒~nvlt~<⃒~nvltrie~⊴⃒~nvrArr~⤃~nvrtrie~⊵⃒~nvsim~∼⃒~nwArr~⇖~nwarhk~⤣~nwarr~↖~nwarrow~↖~nwnear~⤧~oS~Ⓢ~oast~⊛~ocir~⊚~ocy~о~odash~⊝~odblac~ő~odiv~⨸~odot~⊙~odsold~⦼~ofcir~⦿~ofr~𝔬~ogon~˛~ogt~⧁~ohbar~⦵~ohm~Ω~oint~∮~olarr~↺~olcir~⦾~olcross~⦻~olt~⧀~omacr~ō~omid~⦶~ominus~⊖~oopf~𝕠~opar~⦷~operp~⦹~orarr~↻~ord~⩝~order~ℴ~orderof~ℴ~origof~⊶~oror~⩖~orslope~⩗~orv~⩛~oscr~ℴ~osol~⊘~otimesas~⨶~ovbar~⌽~par~∥~parallel~∥~parsim~⫳~parsl~⫽~pcy~п~percnt~%~period~.~pertenk~‱~pfr~𝔭~phiv~ϕ~phmmat~ℳ~phone~☎~pitchfork~⋔~planck~ℏ~planckh~ℎ~plankv~ℏ~plus~+~plusacir~⨣~plusb~⊞~pluscir~⨢~plusdo~∔~plusdu~⨥~pluse~⩲~plussim~⨦~plustwo~⨧~pm~±~pointint~⨕~popf~𝕡~pr~≺~prE~⪳~prap~⪷~prcue~≼~pre~⪯~prec~≺~precapprox~⪷~preccurlyeq~≼~preceq~⪯~precnapprox~⪹~precneqq~⪵~precnsim~⋨~precsim~≾~primes~ℙ~prnE~⪵~prnap~⪹~prnsim~⋨~profalar~⌮~profline~⌒~profsurf~⌓~propto~∝~prsim~≾~prurel~⊰~pscr~𝓅~puncsp~ ~qfr~𝔮~qint~⨌~qopf~𝕢~qprime~⁗~qscr~𝓆~quaternions~ℍ~quatint~⨖~quest~?~questeq~≟~rAarr~⇛~rAtail~⤜~rBarr~⤏~rHar~⥤~race~∽̱~racute~ŕ~raemptyv~⦳~rangd~⦒~range~⦥~rangle~⟩~rarrap~⥵~rarrb~⇥~rarrbfs~⤠~rarrc~⤳~rarrfs~⤞~rarrhk~↪~rarrlp~↬~rarrpl~⥅~rarrsim~⥴~rarrtl~↣~rarrw~↝~ratail~⤚~ratio~∶~rationals~ℚ~rbarr~⤍~rbbrk~❳~rbrace~}~rbrack~]~rbrke~⦌~rbrksld~⦎~rbrkslu~⦐~rcaron~ř~rcedil~ŗ~rcub~}~rcy~р~rdca~⤷~rdldhar~⥩~rdquor~”~rdsh~↳~realine~ℛ~realpart~ℜ~reals~ℝ~rect~▭~rfisht~⥽~rfr~𝔯~rhard~⇁~rharu~⇀~rharul~⥬~rhov~ϱ~rightarrow~→~rightarrowtail~↣~rightharpoondown~⇁~rightharpoonup~⇀~rightleftarrows~⇄~rightleftharpoons~⇌~rightrightarrows~⇉~rightsquigarrow~↝~rightthreetimes~⋌~ring~˚~risingdotseq~≓~rlarr~⇄~rlhar~⇌~rmoust~⎱~rmoustache~⎱~rnmid~⫮~roang~⟭~roarr~⇾~robrk~⟧~ropar~⦆~ropf~𝕣~roplus~⨮~rotimes~⨵~rpar~)~rpargt~⦔~rppolint~⨒~rrarr~⇉~rscr~𝓇~rsh~↱~rsqb~]~rsquor~’~rthree~⋌~rtimes~⋊~rtri~▹~rtrie~⊵~rtrif~▸~rtriltri~⧎~ruluhar~⥨~rx~℞~sacute~ś~sc~≻~scE~⪴~scap~⪸~sccue~≽~sce~⪰~scedil~ş~scirc~ŝ~scnE~⪶~scnap~⪺~scnsim~⋩~scpolint~⨓~scsim~≿~scy~с~sdotb~⊡~sdote~⩦~seArr~⇘~searhk~⤥~searr~↘~searrow~↘~semi~;~seswar~⤩~setminus~∖~setmn~∖~sext~✶~sfr~𝔰~sfrown~⌢~sharp~♯~shchcy~щ~shcy~ш~shortmid~∣~shortparallel~∥~sigmav~ς~simdot~⩪~sime~≃~simeq~≃~simg~⪞~simgE~⪠~siml~⪝~simlE~⪟~simne~≆~simplus~⨤~simrarr~⥲~slarr~←~smallsetminus~∖~smashp~⨳~smeparsl~⧤~smid~∣~smile~⌣~smt~⪪~smte~⪬~smtes~⪬︀~softcy~ь~sol~/~solb~⧄~solbar~⌿~sopf~𝕤~spadesuit~♠~spar~∥~sqcap~⊓~sqcaps~⊓︀~sqcup~⊔~sqcups~⊔︀~sqsub~⊏~sqsube~⊑~sqsubset~⊏~sqsubseteq~⊑~sqsup~⊐~sqsupe~⊒~sqsupset~⊐~sqsupseteq~⊒~squ~□~square~□~squarf~▪~squf~▪~srarr~→~sscr~𝓈~ssetmn~∖~ssmile~⌣~sstarf~⋆~star~☆~starf~★~straightepsilon~ϵ~straightphi~ϕ~strns~¯~subE~⫅~subdot~⪽~subedot~⫃~submult~⫁~subnE~⫋~subne~⊊~subplus~⪿~subrarr~⥹~subset~⊂~subseteq~⊆~subseteqq~⫅~subsetneq~⊊~subsetneqq~⫋~subsim~⫇~subsub~⫕~subsup~⫓~succ~≻~succapprox~⪸~succcurlyeq~≽~succeq~⪰~succnapprox~⪺~succneqq~⪶~succnsim~⋩~succsim~≿~sung~♪~supE~⫆~supdot~⪾~supdsub~⫘~supedot~⫄~suphsol~⟉~suphsub~⫗~suplarr~⥻~supmult~⫂~supnE~⫌~supne~⊋~supplus~⫀~supset~⊃~supseteq~⊇~supseteqq~⫆~supsetneq~⊋~supsetneqq~⫌~supsim~⫈~supsub~⫔~supsup~⫖~swArr~⇙~swarhk~⤦~swarr~↙~swarrow~↙~swnwar~⤪~target~⌖~tbrk~⎴~tcaron~ť~tcedil~ţ~tcy~т~tdot~⃛~telrec~⌕~tfr~𝔱~therefore~∴~thetav~ϑ~thickapprox~≈~thicksim~∼~thkap~≈~thksim~∼~timesb~⊠~timesbar~⨱~timesd~⨰~tint~∭~toea~⤨~top~⊤~topbot~⌶~topcir~⫱~topf~𝕥~topfork~⫚~tosa~⤩~tprime~‴~triangle~▵~triangledown~▿~triangleleft~◃~trianglelefteq~⊴~triangleq~≜~triangleright~▹~trianglerighteq~⊵~tridot~◬~trie~≜~triminus~⨺~triplus~⨹~trisb~⧍~tritime~⨻~trpezium~⏢~tscr~𝓉~tscy~ц~tshcy~ћ~tstrok~ŧ~twixt~≬~twoheadleftarrow~↞~twoheadrightarrow~↠~uHar~⥣~ubrcy~ў~ubreve~ŭ~ucy~у~udarr~⇅~udblac~ű~udhar~⥮~ufisht~⥾~ufr~𝔲~uharl~↿~uharr~↾~uhblk~▀~ulcorn~⌜~ulcorner~⌜~ulcrop~⌏~ultri~◸~umacr~ū~uogon~ų~uopf~𝕦~uparrow~↑~updownarrow~↕~upharpoonleft~↿~upharpoonright~↾~uplus~⊎~upsi~υ~upuparrows~⇈~urcorn~⌝~urcorner~⌝~urcrop~⌎~uring~ů~urtri~◹~uscr~𝓊~utdot~⋰~utilde~ũ~utri~▵~utrif~▴~uuarr~⇈~uwangle~⦧~vArr~⇕~vBar~⫨~vBarv~⫩~vDash~⊨~vangrt~⦜~varepsilon~ϵ~varkappa~ϰ~varnothing~∅~varphi~ϕ~varpi~ϖ~varpropto~∝~varr~↕~varrho~ϱ~varsigma~ς~varsubsetneq~⊊︀~varsubsetneqq~⫋︀~varsupsetneq~⊋︀~varsupsetneqq~⫌︀~vartheta~ϑ~vartriangleleft~⊲~vartriangleright~⊳~vcy~в~vdash~⊢~vee~∨~veebar~⊻~veeeq~≚~vellip~⋮~verbar~|~vert~|~vfr~𝔳~vltri~⊲~vnsub~⊂⃒~vnsup~⊃⃒~vopf~𝕧~vprop~∝~vrtri~⊳~vscr~𝓋~vsubnE~⫋︀~vsubne~⊊︀~vsupnE~⫌︀~vsupne~⊋︀~vzigzag~⦚~wcirc~ŵ~wedbar~⩟~wedge~∧~wedgeq~≙~wfr~𝔴~wopf~𝕨~wp~℘~wr~≀~wreath~≀~wscr~𝓌~xcap~⋂~xcirc~◯~xcup~⋃~xdtri~▽~xfr~𝔵~xhArr~⟺~xharr~⟷~xlArr~⟸~xlarr~⟵~xmap~⟼~xnis~⋻~xodot~⨀~xopf~𝕩~xoplus~⨁~xotime~⨂~xrArr~⟹~xrarr~⟶~xscr~𝓍~xsqcup~⨆~xuplus~⨄~xutri~△~xvee~⋁~xwedge~⋀~yacy~я~ycirc~ŷ~ycy~ы~yfr~𝔶~yicy~ї~yopf~𝕪~yscr~𝓎~yucy~ю~zacute~ź~zcaron~ž~zcy~з~zdot~ż~zeetrf~ℨ~zfr~𝔷~zhcy~ж~zigrarr~⇝~zopf~𝕫~zscr~𝓏~~AMP~&~COPY~©~GT~>~LT~<~QUOT~"~REG~®',o.html4),String.fromCodePoint;var i=String.prototype.codePointAt?function(e,r){return e.codePointAt(r)}:function(e,r){return 1024*(e.charCodeAt(r)-55296)+e.charCodeAt(r+1)-56320+65536},n=function(){return n=Object.assign||function(e){for(var r,t=1,s=arguments.length;t<s;t++)for(var a in r=arguments[t])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e},n.apply(this,arguments)},c=n(n({},o),{all:o.html5}),l={specialChars:/[<>'"&]/g,nonAscii:/[<>'"&\u0080-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintable:/[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintableOnly:/[\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,extensive:/[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g},u={mode:"specialChars",level:"all",numeric:"decimal"};function p(e,r){var t=void 0===r?u:r,s=t.mode,a=void 0===s?"specialChars":s,o=t.numeric,n=void 0===o?"decimal":o,p=t.level;if(!e)return"";var h=l[a],g=c[void 0===p?"all":p].characters,d="hexadecimal"===n;return String.prototype.replace.call(e,h,(function(e){var r=g[e];if(!r){var t=e.length>1?i(e,0):e.charCodeAt(0);r=(d?"&#x"+t.toString(16):"&#"+t)+";"}return r}))}var h=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g,g=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g,d={xml:{strict:h,attribute:g,body:a.xml},html4:{strict:h,attribute:g,body:a.html4},html5:{strict:h,attribute:g,body:a.html5}};function f(e){return"string"!=typeof e?e:e.replace(/\\/g,"\\\\").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/\{/g,"\\{").replace(/\}/g,"\\}")}(n(n({},d),{all:d.html5}),String.fromCharCode)(65533);class m{#e="";#r=[];#t={};#s="";constructor(e="",r="",t=[],s={}){this.name=e,this.tags=t,this.metadata=s,this.text=r}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new Error("Name must be a String!");this.#e=e}get tags(){return this.#r}set tags(e){if(!Array.isArray(e))throw new Error("Tags must be an array!");this.#r=e}get metadata(){return this.#t}set metadata(e){if("object"!=typeof e)throw new Error("Metadata should be an object literal!");this.#t=e}get text(){return this.#s}set text(e){if("string"!=typeof e)throw new Error("Text should be a String!");this.#s=e}toTwee(){let e="";e+=`:: ${f(this.name)}`,this.tags.length>0&&(e+=` [${this.tags.map((e=>f(e))).join(" ")}]`),Object.keys(this.metadata).length>0&&(e+=` ${JSON.stringify(this.metadata)}`);const r=this.text.split("\n");for(let e=0;e<r.length;e++)r[e].startsWith("::")&&(r[e]=`\\${r[e]}`);return e+=`\n${r.join("\n")}\n\n`,e}toJSON(){const e={name:this.name,tags:this.tags,metadata:this.metadata,text:this.text};return JSON.stringify(e)}toTwine2HTML(e=1){let r="\t<tw-passagedata";return r+=` pid="${e}"`,r+=` name="${p(this.name)}"`,r+=` tags="${p(this.#r.join(" "))}" `,Object.prototype.hasOwnProperty.call(this.#t,"position")&&(r+=` position="${this.#t.position}" `),Object.prototype.hasOwnProperty.call(this.#t,"size")&&(r+=`size="${this.#t.size}" `),r+=`>${p(this.text)}</tw-passagedata>\n`,r}toTwine1HTML(){let e="\t<div";return e+=` tiddler="${p(this.name)}"`,e+=` tags="${p(this.#r.join(" "))}" `,e+=' modifier="extwee"',Object.prototype.hasOwnProperty.call(this.#t,"position")?e+=` twine-position="${this.#t.position}"`:e+=' twine-position="10,10"',e+=`>${p(this.#s)}</div>`,e}}function b(){return crypto.randomUUID().toUpperCase()}class y{#e="Untitled Story";#a="";#o="";#i="";#n="";#c=1;#l=[];#u="";#p="";#t=null;#h={};#g="";#d="";constructor(e="Untitled Story"){this.name=e,this.#u="extwee",this.#p="2.3.11",this.#t={}}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new Error("Story name must be a string");this.#e=e}get tagColors(){return this.#h}set tagColors(e){if(!(e instanceof Object))throw new Error("Tag colors must be an object!");this.#h=e}get IFID(){return this.#o}set IFID(e){if("string"!=typeof e)throw new Error("IFID must be a String!");this.#o=e}get start(){return this.#a}set start(e){if("string"!=typeof e)throw new Error("start (passage name) must be a String!");this.#a=e}get formatVersion(){return this.#n}set formatVersion(e){if("string"!=typeof e)throw new Error("Story format version must be a String!");this.#n=e}get metadata(){return this.#t}set metadata(e){if("object"!=typeof e)throw new Error("Story metadata must be Object!");this.#t=e}get format(){return this.#i}set format(e){if("string"!=typeof e)throw new Error("Story format must be a String!");this.#i=e}get creator(){return this.#u}set creator(e){if("string"!=typeof e)throw new Error("Creator must be String");this.#u=e}get creatorVersion(){return this.#p}set creatorVersion(e){if("string"!=typeof e)throw new Error("Creator version must be a string!");this.#p=e}get zoom(){return this.#c}set zoom(e){if("number"!=typeof e)throw new Error("Zoom level must be a Number!");this.#c=Number(Number.parseFloat(e).toFixed(2))}get passages(){return this.#l}set passages(e){if(!Array.isArray(e))throw new Error("Passages must be an Array!");if(!e.every((e=>e instanceof m)))throw new Error("Passages must be an Array of Passage objects!");this.#l=e}get storyStylesheet(){return this.#d}set storyStylesheet(e){if("string"!=typeof e)throw new Error("Story stylesheet must be a string!");this.#d=e}get storyJavaScript(){return this.#g}set storyJavaScript(e){if("string"!=typeof e)throw new Error("Story JavaScript must be a string!");this.#g=e}addPassage(e){if(!(e instanceof m))throw new Error("Can only add Passages to the story!");if(null!==this.getPassageByName(e.name))return console.warn(`Warning: A passage with the name "${e.name}" already exists!`),this.#l.length;if("StoryData"===e.name){try{const r=JSON.parse(e.text);Object.prototype.hasOwnProperty.call(r,"ifid")&&(this.IFID=r.ifid),Object.prototype.hasOwnProperty.call(r,"format")&&(this.format=r.format),Object.prototype.hasOwnProperty.call(r,"format-version")&&(this.formatVersion=r["format-version"]),Object.prototype.hasOwnProperty.call(r,"zoom")&&(this.zoom=r.zoom),Object.prototype.hasOwnProperty.call(r,"start")&&(this.start=r.start),Object.prototype.hasOwnProperty.call(r,"tag-colors")&&(this.tagColors=r["tag-colors"])}catch(e){}return this.#l.length}return"StoryTitle"===e.name?(this.name=e.text,this.#l.length):("Start"===e.name&&""==this.start&&(this.start=e.name),e.tags.includes("script")?(this.#g+=e.text,this.#l.length):e.tags.includes("stylesheet")?(this.#d+=e.text,this.#l.length):this.#l.push(e))}removePassageByName(e){return this.#l=this.#l.filter((r=>r.name!==e)),this.#l.length}getPassagesByTag(e){return this.#l.filter((r=>r.tags.some((r=>e===r))))}getPassageByName(e){const r=this.#l.find((r=>r.name===e));return void 0!==r?r:null}size(){return this.#l.length}toJSON(){const e={name:this.name,tagColors:this.tagColors,ifid:this.IFID,start:this.start,formatVersion:this.formatVersion,metadata:this.metadata,format:this.format,creator:this.creator,creatorVersion:this.creatorVersion,zoom:this.zoom,style:this.storyStylesheet,script:this.storyJavaScript,passages:[]};return this.passages.forEach((r=>{e.passages.push({name:r.name,tags:r.tags,metadata:r.metadata,text:r.text})})),JSON.stringify(e,null,4)}toTwee(){let e=":: StoryData\n";const r={};return null===this.IFID.match(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/)?(r.ifid=b(),console.warn("Warning: IFID is not in UUIDv4 format! A new IFID was generated.")):r.ifid=this.IFID,""!==this.format&&(r.format=this.format),""!==this.formatVersion&&(r["format-version"]=this.formatVersion),0!==this.zoom&&(r.zoom=this.zoom),""!==this.start&&(r.start=this.start),Object.keys(this.tagColors).length>0&&(r["tag-colors"]=this.tagColors),e+=`${JSON.stringify(r,void 0,2)}`,e+="\n\n",e+=":: StoryTitle\n"+this.name,e+="\n\n",this.#d.length>0&&(e+=":: StoryStylesheet [stylesheet]\n"+this.#d+"\n\n"),this.#g.length>0&&(e+=":: StoryJavaScript [script]\n"+this.#g+"\n\n"),this.passages.forEach((r=>{e+=r.toTwee()})),e}toTwine2HTML(){let e=this.passages,r=`<tw-storydata name="${p(this.name)}"`;""!==this.IFID?r+=` ifid="${this.IFID}"`:r+=` ifid="${b()}"`;let t=1,s=1;e.forEach((e=>{e.name===this.start&&(s=t),t++})),0===e.length&&(s=0),r+=` startnode="${s}"`,""!==this.creator&&(r+=` creator="${p(this.creator)}"`),""!==this.creatorVersion&&(r+=` creator-version="${this.creatorVersion}"`),1!==this.zoom&&(r+=` zoom="${this.zoom}"`),""!==this.format&&(r+=` format="${this.format}"`),""!==this.formatVersion&&(r+=` format-version="${this.formatVersion}"`),r+=" options hidden>\n";const a=e.filter((e=>e.tags.includes("stylesheet")));e=e.filter((e=>!e.tags.includes("stylesheet"))),a.length>0&&(r+='\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">',a.forEach((e=>{r+=e.text})),r+="</style>\n"),this.#d.length>0&&(r+=`\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">${this.#d}</style>\n`);const o=e.filter((e=>e.tags.includes("script")));return e=e.filter((e=>!e.tags.includes("script"))),o.length>0&&(r+='\t<script role="script" id="twine-user-script" type="text/twine-javascript">',o.forEach((e=>{r+=e.text})),r+="<\/script>\n"),this.#g.length>0&&(r+=`\t<script role="script" id="twine-user-script" type="text/twine-javascript">${this.#g}<\/script>\n`),t=1,this.passages.forEach((e=>{r+=e.toTwine2HTML(t),t++})),Object.keys(this.tagColors).forEach((e=>{r+=`\t<tw-tag name="${e}" color="${this.tagColors[e]}"></tw-tag>\n`})),r+="</tw-storydata>",r}toTwine1HTML(){let e="";return this.passages.forEach((r=>{e+=`\t${r.toTwine1HTML()}`})),e}}var w=t(117);function v(e){if(!Buffer.isBuffer(e))throw new Error("Only parsing of Buffer is allowed!");const r=new w.Parser;let t=null;try{t=r.parse(e)}catch(e){throw new TypeError(`Error: Buffer does not contain Python pickle data! ${e}`)}const s=new y;if(Object.prototype.hasOwnProperty.call(t,"storyPanel")&&(Object.prototype.hasOwnProperty.call(t.storyPanel,"scale")&&(s.zoom=t.storyPanel.scale),Object.prototype.hasOwnProperty.call(t.storyPanel,"widgets")))for(const e of t.storyPanel.widgets){const r=new m;r.name=e.passage.title,r.tags=e.passage.tags,r.text=e.passage.text,"Start"===r.name&&(s.start=r.name),"StoryTitle"===r.name&&(s.name=r.text),s.addPassage(r)}return s}const q={parseTWS:v,parse:v},_="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:null;_&&(_.Extwee=_.Extwee||{},_.Extwee.parseTWS=v)})(),s.default})()));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "extwee",
3
- "version": "2.3.10",
3
+ "version": "2.3.11",
4
4
  "description": "A story compiler tool using Twine-compatible formats",
5
5
  "author": "Dan Cox",
6
6
  "main": "index.js",
package/src/Passage.js CHANGED
@@ -280,12 +280,11 @@ export default class Passage {
280
280
  }
281
281
 
282
282
  // Add the text and close the element.
283
- // NOTE: Passage text content is NOT HTML-encoded because:
284
- // 1. The browser's HTML parser handles special characters correctly
285
- // 2. Story formats retrieve content via .innerHTML which auto-decodes entities
286
- // 3. Encoding breaks JavaScript code and HTML that must execute at runtime
287
- // Only attribute values need encoding for proper XML/HTML structure.
288
- passageData += `>${ this.text }</tw-passagedata>\n`;
283
+ // NOTE: Passage text content MUST be HTML-encoded to prevent
284
+ // malformed HTML and ensure proper parsing by the browser.
285
+ // The story format retrieves content via .innerHTML which automatically
286
+ // decodes entities back to their original characters at runtime.
287
+ passageData += `>${ encode( this.text ) }</tw-passagedata>\n`;
289
288
 
290
289
  // Return the Twine 2 HTML element.
291
290
  return passageData;
@@ -342,9 +341,9 @@ export default class Passage {
342
341
  * text: (string) Required.
343
342
  * Text content of the passage.
344
343
  */
345
- // NOTE: Passage text content is NOT HTML-encoded for the same reasons
346
- // as Twine 2 HTML output (see toTwine2HTML above).
347
- passageData += `>${ this.#_text }</div>`;
344
+ // NOTE: Passage text content MUST be HTML-encoded to prevent
345
+ // malformed HTML and ensure proper parsing by the browser.
346
+ passageData += `>${ encode( this.#_text ) }</div>`;
348
347
 
349
348
  // Return the HTML representation.
350
349
  return passageData;
package/src/Story.js CHANGED
@@ -7,7 +7,7 @@ import { encode } from 'html-entities';
7
7
  const creatorName = 'extwee';
8
8
 
9
9
  // Set the creator version.
10
- const creatorVersion = '2.3.10';
10
+ const creatorVersion = '2.3.11';
11
11
 
12
12
  /**
13
13
  * Story class.
@@ -175,43 +175,45 @@ describe('Passage', () => {
175
175
  });
176
176
 
177
177
  describe('Escaping', function () {
178
- it('Should NOT HTML-encode passage text content with double quotes', function () {
178
+ it('Should HTML-encode passage text content with double quotes', function () {
179
179
  const p = new Passage('Test', 'Word "word"');
180
- // Passage text should NOT be HTML-encoded (matches Twine 2 behavior)
181
- expect(p.toTwine2HTML().includes('>Word "word"<')).toBe(true);
182
- expect(p.toTwine2HTML().includes('&quot;word&quot;')).toBe(false);
180
+ // Passage text MUST be HTML-encoded for valid HTML output
181
+ expect(p.toTwine2HTML().includes('&quot;word&quot;')).toBe(true);
182
+ expect(p.toTwine2HTML().includes('>Word "word"<')).toBe(false);
183
183
  });
184
184
 
185
- it('Should NOT HTML-encode passage text content with ampersands', function () {
185
+ it('Should HTML-encode passage text content with ampersands', function () {
186
186
  const p = new Passage('Test', 'Word & word');
187
- // Passage text should NOT be HTML-encoded
188
- expect(p.toTwine2HTML().includes('>Word & word<')).toBe(true);
189
- expect(p.toTwine2HTML().includes('&amp;')).toBe(false);
187
+ // Passage text MUST be HTML-encoded
188
+ expect(p.toTwine2HTML().includes('&amp;')).toBe(true);
189
+ expect(p.toTwine2HTML().includes('>Word & word<')).toBe(false);
190
190
  });
191
191
 
192
- it('Should NOT HTML-encode passage text content with less than', function () {
192
+ it('Should HTML-encode passage text content with less than', function () {
193
193
  const p = new Passage('Test', 'Word < word');
194
- // Passage text should NOT be HTML-encoded
195
- expect(p.toTwine2HTML().includes('>Word < word<')).toBe(true);
196
- expect(p.toTwine2HTML().includes('&lt;')).toBe(false);
194
+ // Passage text MUST be HTML-encoded
195
+ expect(p.toTwine2HTML().includes('&lt;')).toBe(true);
196
+ expect(p.toTwine2HTML().includes('>Word < word<')).toBe(false);
197
197
  });
198
198
 
199
- it('Should NOT HTML-encode passage text content with greater than', function () {
199
+ it('Should HTML-encode passage text content with greater than', function () {
200
200
  const p = new Passage('Test', 'Word > word');
201
- // Passage text should NOT be HTML-encoded
202
- expect(p.toTwine2HTML().includes('>Word > word<')).toBe(true);
203
- expect(p.toTwine2HTML().includes('&gt;')).toBe(false);
201
+ // Passage text MUST be HTML-encoded
202
+ expect(p.toTwine2HTML().includes('&gt;')).toBe(true);
203
+ expect(p.toTwine2HTML().includes('>Word > word<')).toBe(false);
204
204
  });
205
205
 
206
- it('Should NOT HTML-encode passage text content with special characters', function () {
206
+ it('Should HTML-encode passage text content with special characters', function () {
207
207
  const p = new Passage('Test', 'Word &<>"\' word');
208
- // Passage text should NOT be HTML-encoded
209
- expect(p.toTwine2HTML().includes('>Word &<>"\' word<')).toBe(true);
210
- expect(p.toTwine2HTML().includes('&amp;')).toBe(false);
211
- expect(p.toTwine2HTML().includes('&lt;')).toBe(false);
212
- expect(p.toTwine2HTML().includes('&gt;')).toBe(false);
213
- expect(p.toTwine2HTML().includes('&quot;')).toBe(false);
214
- expect(p.toTwine2HTML().includes('&apos;')).toBe(false);
208
+ // Passage text MUST be HTML-encoded
209
+ expect(p.toTwine2HTML().includes('&amp;')).toBe(true);
210
+ expect(p.toTwine2HTML().includes('&lt;')).toBe(true);
211
+ expect(p.toTwine2HTML().includes('&gt;')).toBe(true);
212
+ expect(p.toTwine2HTML().includes('&quot;')).toBe(true);
213
+ // Single quotes can be encoded as either &apos; or &#39;
214
+ const html = p.toTwine2HTML();
215
+ expect(html.includes('&apos;') || html.includes('&#39;')).toBe(true);
216
+ expect(html.includes('>Word &<>"\' word<')).toBe(false);
215
217
  });
216
218
 
217
219
  it('Should escape meta-characters safely in name attribute', function () {
@@ -221,14 +223,16 @@ describe('Passage', () => {
221
223
  expect(p.toTwine1HTML().includes('tiddler="&quot;Test&quot;"')).toBe(true);
222
224
  });
223
225
 
224
- it('Should NOT HTML-encode passage text but preserve JavaScript/HTML', function () {
226
+ it('Should HTML-encode passage text including JavaScript/HTML code', function () {
225
227
  const p = new Passage('Test', '<%\n$.getScript("https://example.com/script.js");\n%>');
226
228
  const html = p.toTwine2HTML();
227
- // Should preserve the JavaScript code exactly as-is
228
- expect(html.includes('$.getScript("https://example.com/script.js");')).toBe(true);
229
- expect(html.includes('&quot;')).toBe(false);
230
- expect(html.includes('&lt;')).toBe(false);
231
- expect(html.includes('&gt;')).toBe(false);
229
+ // JavaScript code in passages MUST be HTML-encoded in the HTML file
230
+ // The story format will retrieve it via .innerHTML which decodes entities automatically
231
+ expect(html.includes('&lt;%')).toBe(true);
232
+ expect(html.includes('%&gt;')).toBe(true);
233
+ expect(html.includes('&quot;https://example.com/script.js&quot;')).toBe(true);
234
+ // Raw characters should NOT appear in the HTML
235
+ expect(html.includes('$.getScript("https://example.com/script.js");')).toBe(false);
232
236
  });
233
237
 
234
238
  it('Should escape meta-characters safely in tags attribute', function () {
@@ -7,12 +7,10 @@ describe('Snowman Compatibility Tests', function () {
7
7
  const p = new Passage('External', '<%\n$.getScript("https://code.jquery.com/jquery-3.6.0.min.js");\n%>');
8
8
  const html = p.toTwine2HTML();
9
9
 
10
- // Should preserve quotes in JavaScript
11
- expect(html.includes('$.getScript("https://code.jquery.com/jquery-3.6.0.min.js");')).toBe(true);
12
10
  // Should NOT have HTML entities
13
- expect(html.includes('&quot;')).toBe(false);
14
- expect(html.includes('&lt;')).toBe(false);
15
- expect(html.includes('&gt;')).toBe(false);
11
+ expect(html.includes('&quot;')).toBe(true);
12
+ expect(html.includes('&lt;')).toBe(true);
13
+ expect(html.includes('&gt;')).toBe(true);
16
14
  });
17
15
 
18
16
  it('Should preserve complex JavaScript code', function () {
@@ -25,11 +23,9 @@ if (data.test) {
25
23
  const p = new Passage('Test', code);
26
24
  const html = p.toTwine2HTML();
27
25
 
28
- // Verify the exact code is preserved
29
- expect(html.includes(code)).toBe(true);
30
- expect(html.includes('&quot;')).toBe(false);
31
- expect(html.includes('&lt;')).toBe(false);
32
- expect(html.includes('&gt;')).toBe(false);
26
+ expect(html.includes('&quot;')).toBe(true);
27
+ expect(html.includes('&lt;')).toBe(true);
28
+ expect(html.includes('&gt;')).toBe(true);
33
29
  });
34
30
  });
35
31
 
@@ -38,12 +34,9 @@ if (data.test) {
38
34
  const p = new Passage('HUD', '<h1>This is the HUD!</h1>\n<p>Status: <strong>Active</strong></p>');
39
35
  const html = p.toTwine2HTML();
40
36
 
41
- // Should preserve HTML tags
42
- expect(html.includes('<h1>This is the HUD!</h1>')).toBe(true);
43
- expect(html.includes('<strong>Active</strong>')).toBe(true);
44
37
  // Should NOT have HTML entities
45
- expect(html.includes('&lt;h1&gt;')).toBe(false);
46
- expect(html.includes('&lt;strong&gt;')).toBe(false);
38
+ expect(html.includes('&lt;h1&gt;')).toBe(true);
39
+ expect(html.includes('&lt;strong&gt;')).toBe(true);
47
40
  });
48
41
 
49
42
  it('Should preserve nested HTML structures', function () {
@@ -57,10 +50,8 @@ if (data.test) {
57
50
  const p = new Passage('Container', htmlContent);
58
51
  const html = p.toTwine2HTML();
59
52
 
60
- // Verify exact HTML is preserved
61
- expect(html.includes(htmlContent)).toBe(true);
62
- expect(html.includes('&lt;')).toBe(false);
63
- expect(html.includes('&gt;')).toBe(false);
53
+ expect(html.includes('&lt;')).toBe(true);
54
+ expect(html.includes('&gt;')).toBe(true);
64
55
  });
65
56
  });
66
57
 
@@ -70,9 +61,8 @@ if (data.test) {
70
61
  const p1 = new Passage('Test', code);
71
62
  const html = p1.toTwine2HTML();
72
63
 
73
- // Parser should be able to read it back
74
- // (This would be tested in parse tests, but we verify the HTML is correct)
75
- expect(html.includes(code)).toBe(true);
64
+ // Verify that the quotation marks is encoded.
65
+ expect(html.includes('&quot')).toBe(true);
76
66
  });
77
67
 
78
68
  it('Should generate valid Story HTML with unencoded content', function () {
@@ -87,11 +77,9 @@ if (data.test) {
87
77
 
88
78
  const html = story.toTwine2HTML();
89
79
 
90
- // Verify both passages have unencoded content
91
- expect(html.includes('console.log("test");')).toBe(true);
92
- expect(html.includes('<h1>Header</h1>')).toBe(true);
93
- expect(html.includes('&quot;')).toBe(false);
94
- expect(html.includes('&lt;h1&gt;')).toBe(false);
80
+ // Verify both passages have encoded content.
81
+ expect(html.includes('&quot;')).toBe(true);
82
+ expect(html.includes('&lt;h1&gt;')).toBe(true);
95
83
  });
96
84
  });
97
85
 
@@ -101,7 +89,7 @@ if (data.test) {
101
89
  const p = new Passage('Test', content);
102
90
  const html = p.toTwine2HTML();
103
91
 
104
- expect(html.includes(content)).toBe(true);
92
+ expect(html.includes('&lt;![CDATA[Some data]]&gt;')).toBe(true);
105
93
  });
106
94
 
107
95
  it('Should handle mixed quotes', function () {
@@ -109,9 +97,7 @@ if (data.test) {
109
97
  const p = new Passage('Test', content);
110
98
  const html = p.toTwine2HTML();
111
99
 
112
- expect(html.includes(content)).toBe(true);
113
- expect(html.includes('&quot;')).toBe(false);
114
- expect(html.includes('&#39;')).toBe(false);
100
+ expect(html.includes('&quot;')).toBe(true);
115
101
  });
116
102
 
117
103
  it('Should handle template literals', function () {
@@ -251,5 +251,5 @@ export class Story {
251
251
  #private;
252
252
  }
253
253
  export const creatorName: "extwee";
254
- export const creatorVersion: "2.3.9";
254
+ export const creatorVersion: "2.3.11";
255
255
  import Passage from './Passage.js';