@julien-lin/universal-pwa-cli 1.3.2 → 1.3.4

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.
package/dist/index.cjs CHANGED
@@ -124,9 +124,873 @@ var init_environment_detector = __esm({
124
124
  }
125
125
  });
126
126
 
127
+ // ../../../../node_modules/domelementtype/lib/esm/index.js
128
+ var ElementType, Root, Text, Directive, Comment, Script, Style, Tag, CDATA, Doctype;
129
+ var init_esm = __esm({
130
+ "../../../../node_modules/domelementtype/lib/esm/index.js"() {
131
+ "use strict";
132
+ (function(ElementType2) {
133
+ ElementType2["Root"] = "root";
134
+ ElementType2["Text"] = "text";
135
+ ElementType2["Directive"] = "directive";
136
+ ElementType2["Comment"] = "comment";
137
+ ElementType2["Script"] = "script";
138
+ ElementType2["Style"] = "style";
139
+ ElementType2["Tag"] = "tag";
140
+ ElementType2["CDATA"] = "cdata";
141
+ ElementType2["Doctype"] = "doctype";
142
+ })(ElementType || (ElementType = {}));
143
+ Root = ElementType.Root;
144
+ Text = ElementType.Text;
145
+ Directive = ElementType.Directive;
146
+ Comment = ElementType.Comment;
147
+ Script = ElementType.Script;
148
+ Style = ElementType.Style;
149
+ Tag = ElementType.Tag;
150
+ CDATA = ElementType.CDATA;
151
+ Doctype = ElementType.Doctype;
152
+ }
153
+ });
154
+
155
+ // ../../../../node_modules/entities/lib/esm/generated/decode-data-html.js
156
+ var decode_data_html_default;
157
+ var init_decode_data_html = __esm({
158
+ "../../../../node_modules/entities/lib/esm/generated/decode-data-html.js"() {
159
+ "use strict";
160
+ decode_data_html_default = new Uint16Array(
161
+ // prettier-ignore
162
+ '\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map((c) => c.charCodeAt(0))
163
+ );
164
+ }
165
+ });
166
+
167
+ // ../../../../node_modules/entities/lib/esm/generated/decode-data-xml.js
168
+ var decode_data_xml_default;
169
+ var init_decode_data_xml = __esm({
170
+ "../../../../node_modules/entities/lib/esm/generated/decode-data-xml.js"() {
171
+ "use strict";
172
+ decode_data_xml_default = new Uint16Array(
173
+ // prettier-ignore
174
+ "\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
175
+ );
176
+ }
177
+ });
178
+
179
+ // ../../../../node_modules/entities/lib/esm/decode_codepoint.js
180
+ function replaceCodePoint(codePoint) {
181
+ var _a2;
182
+ if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
183
+ return 65533;
184
+ }
185
+ return (_a2 = decodeMap.get(codePoint)) !== null && _a2 !== void 0 ? _a2 : codePoint;
186
+ }
187
+ var _a, decodeMap, fromCodePoint;
188
+ var init_decode_codepoint = __esm({
189
+ "../../../../node_modules/entities/lib/esm/decode_codepoint.js"() {
190
+ "use strict";
191
+ decodeMap = /* @__PURE__ */ new Map([
192
+ [0, 65533],
193
+ // C1 Unicode control character reference replacements
194
+ [128, 8364],
195
+ [130, 8218],
196
+ [131, 402],
197
+ [132, 8222],
198
+ [133, 8230],
199
+ [134, 8224],
200
+ [135, 8225],
201
+ [136, 710],
202
+ [137, 8240],
203
+ [138, 352],
204
+ [139, 8249],
205
+ [140, 338],
206
+ [142, 381],
207
+ [145, 8216],
208
+ [146, 8217],
209
+ [147, 8220],
210
+ [148, 8221],
211
+ [149, 8226],
212
+ [150, 8211],
213
+ [151, 8212],
214
+ [152, 732],
215
+ [153, 8482],
216
+ [154, 353],
217
+ [155, 8250],
218
+ [156, 339],
219
+ [158, 382],
220
+ [159, 376]
221
+ ]);
222
+ fromCodePoint = // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
223
+ (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function(codePoint) {
224
+ let output = "";
225
+ if (codePoint > 65535) {
226
+ codePoint -= 65536;
227
+ output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
228
+ codePoint = 56320 | codePoint & 1023;
229
+ }
230
+ output += String.fromCharCode(codePoint);
231
+ return output;
232
+ };
233
+ }
234
+ });
235
+
236
+ // ../../../../node_modules/entities/lib/esm/decode.js
237
+ function isNumber(code) {
238
+ return code >= CharCodes.ZERO && code <= CharCodes.NINE;
239
+ }
240
+ function isHexadecimalCharacter(code) {
241
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
242
+ }
243
+ function isAsciiAlphaNumeric(code) {
244
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
245
+ }
246
+ function isEntityInAttributeInvalidEnd(code) {
247
+ return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
248
+ }
249
+ function getDecoder(decodeTree) {
250
+ let ret = "";
251
+ const decoder = new EntityDecoder(decodeTree, (str) => ret += fromCodePoint(str));
252
+ return function decodeWithTrie(str, decodeMode) {
253
+ let lastIndex = 0;
254
+ let offset = 0;
255
+ while ((offset = str.indexOf("&", offset)) >= 0) {
256
+ ret += str.slice(lastIndex, offset);
257
+ decoder.startEntity(decodeMode);
258
+ const len = decoder.write(
259
+ str,
260
+ // Skip the "&"
261
+ offset + 1
262
+ );
263
+ if (len < 0) {
264
+ lastIndex = offset + decoder.end();
265
+ break;
266
+ }
267
+ lastIndex = offset + len;
268
+ offset = len === 0 ? lastIndex + 1 : lastIndex;
269
+ }
270
+ const result = ret + str.slice(lastIndex);
271
+ ret = "";
272
+ return result;
273
+ };
274
+ }
275
+ function determineBranch(decodeTree, current, nodeIdx, char) {
276
+ const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
277
+ const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
278
+ if (branchCount === 0) {
279
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
280
+ }
281
+ if (jumpOffset) {
282
+ const value = char - jumpOffset;
283
+ return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
284
+ }
285
+ let lo = nodeIdx;
286
+ let hi = lo + branchCount - 1;
287
+ while (lo <= hi) {
288
+ const mid = lo + hi >>> 1;
289
+ const midVal = decodeTree[mid];
290
+ if (midVal < char) {
291
+ lo = mid + 1;
292
+ } else if (midVal > char) {
293
+ hi = mid - 1;
294
+ } else {
295
+ return decodeTree[mid + branchCount];
296
+ }
297
+ }
298
+ return -1;
299
+ }
300
+ var CharCodes, TO_LOWER_BIT, BinTrieFlags, EntityDecoderState, DecodingMode, EntityDecoder, htmlDecoder, xmlDecoder;
301
+ var init_decode = __esm({
302
+ "../../../../node_modules/entities/lib/esm/decode.js"() {
303
+ "use strict";
304
+ init_decode_data_html();
305
+ init_decode_data_xml();
306
+ init_decode_codepoint();
307
+ init_decode_codepoint();
308
+ (function(CharCodes2) {
309
+ CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
310
+ CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI";
311
+ CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS";
312
+ CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO";
313
+ CharCodes2[CharCodes2["NINE"] = 57] = "NINE";
314
+ CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A";
315
+ CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F";
316
+ CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X";
317
+ CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z";
318
+ CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A";
319
+ CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F";
320
+ CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z";
321
+ })(CharCodes || (CharCodes = {}));
322
+ TO_LOWER_BIT = 32;
323
+ (function(BinTrieFlags2) {
324
+ BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
325
+ BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
326
+ BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
327
+ })(BinTrieFlags || (BinTrieFlags = {}));
328
+ (function(EntityDecoderState2) {
329
+ EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
330
+ EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
331
+ EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
332
+ EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
333
+ EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
334
+ })(EntityDecoderState || (EntityDecoderState = {}));
335
+ (function(DecodingMode2) {
336
+ DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
337
+ DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
338
+ DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
339
+ })(DecodingMode || (DecodingMode = {}));
340
+ EntityDecoder = class {
341
+ constructor(decodeTree, emitCodePoint, errors) {
342
+ this.decodeTree = decodeTree;
343
+ this.emitCodePoint = emitCodePoint;
344
+ this.errors = errors;
345
+ this.state = EntityDecoderState.EntityStart;
346
+ this.consumed = 1;
347
+ this.result = 0;
348
+ this.treeIndex = 0;
349
+ this.excess = 1;
350
+ this.decodeMode = DecodingMode.Strict;
351
+ }
352
+ /** Resets the instance to make it reusable. */
353
+ startEntity(decodeMode) {
354
+ this.decodeMode = decodeMode;
355
+ this.state = EntityDecoderState.EntityStart;
356
+ this.result = 0;
357
+ this.treeIndex = 0;
358
+ this.excess = 1;
359
+ this.consumed = 1;
360
+ }
361
+ /**
362
+ * Write an entity to the decoder. This can be called multiple times with partial entities.
363
+ * If the entity is incomplete, the decoder will return -1.
364
+ *
365
+ * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
366
+ * entity is incomplete, and resume when the next string is written.
367
+ *
368
+ * @param string The string containing the entity (or a continuation of the entity).
369
+ * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
370
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
371
+ */
372
+ write(str, offset) {
373
+ switch (this.state) {
374
+ case EntityDecoderState.EntityStart: {
375
+ if (str.charCodeAt(offset) === CharCodes.NUM) {
376
+ this.state = EntityDecoderState.NumericStart;
377
+ this.consumed += 1;
378
+ return this.stateNumericStart(str, offset + 1);
379
+ }
380
+ this.state = EntityDecoderState.NamedEntity;
381
+ return this.stateNamedEntity(str, offset);
382
+ }
383
+ case EntityDecoderState.NumericStart: {
384
+ return this.stateNumericStart(str, offset);
385
+ }
386
+ case EntityDecoderState.NumericDecimal: {
387
+ return this.stateNumericDecimal(str, offset);
388
+ }
389
+ case EntityDecoderState.NumericHex: {
390
+ return this.stateNumericHex(str, offset);
391
+ }
392
+ case EntityDecoderState.NamedEntity: {
393
+ return this.stateNamedEntity(str, offset);
394
+ }
395
+ }
396
+ }
397
+ /**
398
+ * Switches between the numeric decimal and hexadecimal states.
399
+ *
400
+ * Equivalent to the `Numeric character reference state` in the HTML spec.
401
+ *
402
+ * @param str The string containing the entity (or a continuation of the entity).
403
+ * @param offset The current offset.
404
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
405
+ */
406
+ stateNumericStart(str, offset) {
407
+ if (offset >= str.length) {
408
+ return -1;
409
+ }
410
+ if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
411
+ this.state = EntityDecoderState.NumericHex;
412
+ this.consumed += 1;
413
+ return this.stateNumericHex(str, offset + 1);
414
+ }
415
+ this.state = EntityDecoderState.NumericDecimal;
416
+ return this.stateNumericDecimal(str, offset);
417
+ }
418
+ addToNumericResult(str, start, end, base) {
419
+ if (start !== end) {
420
+ const digitCount = end - start;
421
+ this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
422
+ this.consumed += digitCount;
423
+ }
424
+ }
425
+ /**
426
+ * Parses a hexadecimal numeric entity.
427
+ *
428
+ * Equivalent to the `Hexademical character reference state` in the HTML spec.
429
+ *
430
+ * @param str The string containing the entity (or a continuation of the entity).
431
+ * @param offset The current offset.
432
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
433
+ */
434
+ stateNumericHex(str, offset) {
435
+ const startIdx = offset;
436
+ while (offset < str.length) {
437
+ const char = str.charCodeAt(offset);
438
+ if (isNumber(char) || isHexadecimalCharacter(char)) {
439
+ offset += 1;
440
+ } else {
441
+ this.addToNumericResult(str, startIdx, offset, 16);
442
+ return this.emitNumericEntity(char, 3);
443
+ }
444
+ }
445
+ this.addToNumericResult(str, startIdx, offset, 16);
446
+ return -1;
447
+ }
448
+ /**
449
+ * Parses a decimal numeric entity.
450
+ *
451
+ * Equivalent to the `Decimal character reference state` in the HTML spec.
452
+ *
453
+ * @param str The string containing the entity (or a continuation of the entity).
454
+ * @param offset The current offset.
455
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
456
+ */
457
+ stateNumericDecimal(str, offset) {
458
+ const startIdx = offset;
459
+ while (offset < str.length) {
460
+ const char = str.charCodeAt(offset);
461
+ if (isNumber(char)) {
462
+ offset += 1;
463
+ } else {
464
+ this.addToNumericResult(str, startIdx, offset, 10);
465
+ return this.emitNumericEntity(char, 2);
466
+ }
467
+ }
468
+ this.addToNumericResult(str, startIdx, offset, 10);
469
+ return -1;
470
+ }
471
+ /**
472
+ * Validate and emit a numeric entity.
473
+ *
474
+ * Implements the logic from the `Hexademical character reference start
475
+ * state` and `Numeric character reference end state` in the HTML spec.
476
+ *
477
+ * @param lastCp The last code point of the entity. Used to see if the
478
+ * entity was terminated with a semicolon.
479
+ * @param expectedLength The minimum number of characters that should be
480
+ * consumed. Used to validate that at least one digit
481
+ * was consumed.
482
+ * @returns The number of characters that were consumed.
483
+ */
484
+ emitNumericEntity(lastCp, expectedLength) {
485
+ var _a2;
486
+ if (this.consumed <= expectedLength) {
487
+ (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
488
+ return 0;
489
+ }
490
+ if (lastCp === CharCodes.SEMI) {
491
+ this.consumed += 1;
492
+ } else if (this.decodeMode === DecodingMode.Strict) {
493
+ return 0;
494
+ }
495
+ this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
496
+ if (this.errors) {
497
+ if (lastCp !== CharCodes.SEMI) {
498
+ this.errors.missingSemicolonAfterCharacterReference();
499
+ }
500
+ this.errors.validateNumericCharacterReference(this.result);
501
+ }
502
+ return this.consumed;
503
+ }
504
+ /**
505
+ * Parses a named entity.
506
+ *
507
+ * Equivalent to the `Named character reference state` in the HTML spec.
508
+ *
509
+ * @param str The string containing the entity (or a continuation of the entity).
510
+ * @param offset The current offset.
511
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
512
+ */
513
+ stateNamedEntity(str, offset) {
514
+ const { decodeTree } = this;
515
+ let current = decodeTree[this.treeIndex];
516
+ let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
517
+ for (; offset < str.length; offset++, this.excess++) {
518
+ const char = str.charCodeAt(offset);
519
+ this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
520
+ if (this.treeIndex < 0) {
521
+ return this.result === 0 || // If we are parsing an attribute
522
+ this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,
523
+ (valueLength === 0 || // And there should be no invalid characters.
524
+ isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
525
+ }
526
+ current = decodeTree[this.treeIndex];
527
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
528
+ if (valueLength !== 0) {
529
+ if (char === CharCodes.SEMI) {
530
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
531
+ }
532
+ if (this.decodeMode !== DecodingMode.Strict) {
533
+ this.result = this.treeIndex;
534
+ this.consumed += this.excess;
535
+ this.excess = 0;
536
+ }
537
+ }
538
+ }
539
+ return -1;
540
+ }
541
+ /**
542
+ * Emit a named entity that was not terminated with a semicolon.
543
+ *
544
+ * @returns The number of characters consumed.
545
+ */
546
+ emitNotTerminatedNamedEntity() {
547
+ var _a2;
548
+ const { result, decodeTree } = this;
549
+ const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
550
+ this.emitNamedEntityData(result, valueLength, this.consumed);
551
+ (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.missingSemicolonAfterCharacterReference();
552
+ return this.consumed;
553
+ }
554
+ /**
555
+ * Emit a named entity.
556
+ *
557
+ * @param result The index of the entity in the decode tree.
558
+ * @param valueLength The number of bytes in the entity.
559
+ * @param consumed The number of characters consumed.
560
+ *
561
+ * @returns The number of characters consumed.
562
+ */
563
+ emitNamedEntityData(result, valueLength, consumed) {
564
+ const { decodeTree } = this;
565
+ this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed);
566
+ if (valueLength === 3) {
567
+ this.emitCodePoint(decodeTree[result + 2], consumed);
568
+ }
569
+ return consumed;
570
+ }
571
+ /**
572
+ * Signal to the parser that the end of the input was reached.
573
+ *
574
+ * Remaining data will be emitted and relevant errors will be produced.
575
+ *
576
+ * @returns The number of characters consumed.
577
+ */
578
+ end() {
579
+ var _a2;
580
+ switch (this.state) {
581
+ case EntityDecoderState.NamedEntity: {
582
+ return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
583
+ }
584
+ // Otherwise, emit a numeric entity if we have one.
585
+ case EntityDecoderState.NumericDecimal: {
586
+ return this.emitNumericEntity(0, 2);
587
+ }
588
+ case EntityDecoderState.NumericHex: {
589
+ return this.emitNumericEntity(0, 3);
590
+ }
591
+ case EntityDecoderState.NumericStart: {
592
+ (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
593
+ return 0;
594
+ }
595
+ case EntityDecoderState.EntityStart: {
596
+ return 0;
597
+ }
598
+ }
599
+ }
600
+ };
601
+ htmlDecoder = getDecoder(decode_data_html_default);
602
+ xmlDecoder = getDecoder(decode_data_xml_default);
603
+ }
604
+ });
605
+
606
+ // ../../../../node_modules/entities/lib/esm/generated/encode-html.js
607
+ function restoreDiff(arr) {
608
+ for (let i = 1; i < arr.length; i++) {
609
+ arr[i][0] += arr[i - 1][0] + 1;
610
+ }
611
+ return arr;
612
+ }
613
+ var encode_html_default;
614
+ var init_encode_html = __esm({
615
+ "../../../../node_modules/entities/lib/esm/generated/encode-html.js"() {
616
+ "use strict";
617
+ encode_html_default = new Map(/* @__PURE__ */ restoreDiff([[9, "&Tab;"], [0, "&NewLine;"], [22, "&excl;"], [0, "&quot;"], [0, "&num;"], [0, "&dollar;"], [0, "&percnt;"], [0, "&amp;"], [0, "&apos;"], [0, "&lpar;"], [0, "&rpar;"], [0, "&ast;"], [0, "&plus;"], [0, "&comma;"], [1, "&period;"], [0, "&sol;"], [10, "&colon;"], [0, "&semi;"], [0, { v: "&lt;", n: 8402, o: "&nvlt;" }], [0, { v: "&equals;", n: 8421, o: "&bne;" }], [0, { v: "&gt;", n: 8402, o: "&nvgt;" }], [0, "&quest;"], [0, "&commat;"], [26, "&lbrack;"], [0, "&bsol;"], [0, "&rbrack;"], [0, "&Hat;"], [0, "&lowbar;"], [0, "&DiacriticalGrave;"], [5, { n: 106, o: "&fjlig;" }], [20, "&lbrace;"], [0, "&verbar;"], [0, "&rbrace;"], [34, "&nbsp;"], [0, "&iexcl;"], [0, "&cent;"], [0, "&pound;"], [0, "&curren;"], [0, "&yen;"], [0, "&brvbar;"], [0, "&sect;"], [0, "&die;"], [0, "&copy;"], [0, "&ordf;"], [0, "&laquo;"], [0, "&not;"], [0, "&shy;"], [0, "&circledR;"], [0, "&macr;"], [0, "&deg;"], [0, "&PlusMinus;"], [0, "&sup2;"], [0, "&sup3;"], [0, "&acute;"], [0, "&micro;"], [0, "&para;"], [0, "&centerdot;"], [0, "&cedil;"], [0, "&sup1;"], [0, "&ordm;"], [0, "&raquo;"], [0, "&frac14;"], [0, "&frac12;"], [0, "&frac34;"], [0, "&iquest;"], [0, "&Agrave;"], [0, "&Aacute;"], [0, "&Acirc;"], [0, "&Atilde;"], [0, "&Auml;"], [0, "&angst;"], [0, "&AElig;"], [0, "&Ccedil;"], [0, "&Egrave;"], [0, "&Eacute;"], [0, "&Ecirc;"], [0, "&Euml;"], [0, "&Igrave;"], [0, "&Iacute;"], [0, "&Icirc;"], [0, "&Iuml;"], [0, "&ETH;"], [0, "&Ntilde;"], [0, "&Ograve;"], [0, "&Oacute;"], [0, "&Ocirc;"], [0, "&Otilde;"], [0, "&Ouml;"], [0, "&times;"], [0, "&Oslash;"], [0, "&Ugrave;"], [0, "&Uacute;"], [0, "&Ucirc;"], [0, "&Uuml;"], [0, "&Yacute;"], [0, "&THORN;"], [0, "&szlig;"], [0, "&agrave;"], [0, "&aacute;"], [0, "&acirc;"], [0, "&atilde;"], [0, "&auml;"], [0, "&aring;"], [0, "&aelig;"], [0, "&ccedil;"], [0, "&egrave;"], [0, "&eacute;"], [0, "&ecirc;"], [0, "&euml;"], [0, "&igrave;"], [0, "&iacute;"], [0, "&icirc;"], [0, "&iuml;"], [0, "&eth;"], [0, "&ntilde;"], [0, "&ograve;"], [0, "&oacute;"], [0, "&ocirc;"], [0, "&otilde;"], [0, "&ouml;"], [0, "&div;"], [0, "&oslash;"], [0, "&ugrave;"], [0, "&uacute;"], [0, "&ucirc;"], [0, "&uuml;"], [0, "&yacute;"], [0, "&thorn;"], [0, "&yuml;"], [0, "&Amacr;"], [0, "&amacr;"], [0, "&Abreve;"], [0, "&abreve;"], [0, "&Aogon;"], [0, "&aogon;"], [0, "&Cacute;"], [0, "&cacute;"], [0, "&Ccirc;"], [0, "&ccirc;"], [0, "&Cdot;"], [0, "&cdot;"], [0, "&Ccaron;"], [0, "&ccaron;"], [0, "&Dcaron;"], [0, "&dcaron;"], [0, "&Dstrok;"], [0, "&dstrok;"], [0, "&Emacr;"], [0, "&emacr;"], [2, "&Edot;"], [0, "&edot;"], [0, "&Eogon;"], [0, "&eogon;"], [0, "&Ecaron;"], [0, "&ecaron;"], [0, "&Gcirc;"], [0, "&gcirc;"], [0, "&Gbreve;"], [0, "&gbreve;"], [0, "&Gdot;"], [0, "&gdot;"], [0, "&Gcedil;"], [1, "&Hcirc;"], [0, "&hcirc;"], [0, "&Hstrok;"], [0, "&hstrok;"], [0, "&Itilde;"], [0, "&itilde;"], [0, "&Imacr;"], [0, "&imacr;"], [2, "&Iogon;"], [0, "&iogon;"], [0, "&Idot;"], [0, "&imath;"], [0, "&IJlig;"], [0, "&ijlig;"], [0, "&Jcirc;"], [0, "&jcirc;"], [0, "&Kcedil;"], [0, "&kcedil;"], [0, "&kgreen;"], [0, "&Lacute;"], [0, "&lacute;"], [0, "&Lcedil;"], [0, "&lcedil;"], [0, "&Lcaron;"], [0, "&lcaron;"], [0, "&Lmidot;"], [0, "&lmidot;"], [0, "&Lstrok;"], [0, "&lstrok;"], [0, "&Nacute;"], [0, "&nacute;"], [0, "&Ncedil;"], [0, "&ncedil;"], [0, "&Ncaron;"], [0, "&ncaron;"], [0, "&napos;"], [0, "&ENG;"], [0, "&eng;"], [0, "&Omacr;"], [0, "&omacr;"], [2, "&Odblac;"], [0, "&odblac;"], [0, "&OElig;"], [0, "&oelig;"], [0, "&Racute;"], [0, "&racute;"], [0, "&Rcedil;"], [0, "&rcedil;"], [0, "&Rcaron;"], [0, "&rcaron;"], [0, "&Sacute;"], [0, "&sacute;"], [0, "&Scirc;"], [0, "&scirc;"], [0, "&Scedil;"], [0, "&scedil;"], [0, "&Scaron;"], [0, "&scaron;"], [0, "&Tcedil;"], [0, "&tcedil;"], [0, "&Tcaron;"], [0, "&tcaron;"], [0, "&Tstrok;"], [0, "&tstrok;"], [0, "&Utilde;"], [0, "&utilde;"], [0, "&Umacr;"], [0, "&umacr;"], [0, "&Ubreve;"], [0, "&ubreve;"], [0, "&Uring;"], [0, "&uring;"], [0, "&Udblac;"], [0, "&udblac;"], [0, "&Uogon;"], [0, "&uogon;"], [0, "&Wcirc;"], [0, "&wcirc;"], [0, "&Ycirc;"], [0, "&ycirc;"], [0, "&Yuml;"], [0, "&Zacute;"], [0, "&zacute;"], [0, "&Zdot;"], [0, "&zdot;"], [0, "&Zcaron;"], [0, "&zcaron;"], [19, "&fnof;"], [34, "&imped;"], [63, "&gacute;"], [65, "&jmath;"], [142, "&circ;"], [0, "&caron;"], [16, "&breve;"], [0, "&DiacriticalDot;"], [0, "&ring;"], [0, "&ogon;"], [0, "&DiacriticalTilde;"], [0, "&dblac;"], [51, "&DownBreve;"], [127, "&Alpha;"], [0, "&Beta;"], [0, "&Gamma;"], [0, "&Delta;"], [0, "&Epsilon;"], [0, "&Zeta;"], [0, "&Eta;"], [0, "&Theta;"], [0, "&Iota;"], [0, "&Kappa;"], [0, "&Lambda;"], [0, "&Mu;"], [0, "&Nu;"], [0, "&Xi;"], [0, "&Omicron;"], [0, "&Pi;"], [0, "&Rho;"], [1, "&Sigma;"], [0, "&Tau;"], [0, "&Upsilon;"], [0, "&Phi;"], [0, "&Chi;"], [0, "&Psi;"], [0, "&ohm;"], [7, "&alpha;"], [0, "&beta;"], [0, "&gamma;"], [0, "&delta;"], [0, "&epsi;"], [0, "&zeta;"], [0, "&eta;"], [0, "&theta;"], [0, "&iota;"], [0, "&kappa;"], [0, "&lambda;"], [0, "&mu;"], [0, "&nu;"], [0, "&xi;"], [0, "&omicron;"], [0, "&pi;"], [0, "&rho;"], [0, "&sigmaf;"], [0, "&sigma;"], [0, "&tau;"], [0, "&upsi;"], [0, "&phi;"], [0, "&chi;"], [0, "&psi;"], [0, "&omega;"], [7, "&thetasym;"], [0, "&Upsi;"], [2, "&phiv;"], [0, "&piv;"], [5, "&Gammad;"], [0, "&digamma;"], [18, "&kappav;"], [0, "&rhov;"], [3, "&epsiv;"], [0, "&backepsilon;"], [10, "&IOcy;"], [0, "&DJcy;"], [0, "&GJcy;"], [0, "&Jukcy;"], [0, "&DScy;"], [0, "&Iukcy;"], [0, "&YIcy;"], [0, "&Jsercy;"], [0, "&LJcy;"], [0, "&NJcy;"], [0, "&TSHcy;"], [0, "&KJcy;"], [1, "&Ubrcy;"], [0, "&DZcy;"], [0, "&Acy;"], [0, "&Bcy;"], [0, "&Vcy;"], [0, "&Gcy;"], [0, "&Dcy;"], [0, "&IEcy;"], [0, "&ZHcy;"], [0, "&Zcy;"], [0, "&Icy;"], [0, "&Jcy;"], [0, "&Kcy;"], [0, "&Lcy;"], [0, "&Mcy;"], [0, "&Ncy;"], [0, "&Ocy;"], [0, "&Pcy;"], [0, "&Rcy;"], [0, "&Scy;"], [0, "&Tcy;"], [0, "&Ucy;"], [0, "&Fcy;"], [0, "&KHcy;"], [0, "&TScy;"], [0, "&CHcy;"], [0, "&SHcy;"], [0, "&SHCHcy;"], [0, "&HARDcy;"], [0, "&Ycy;"], [0, "&SOFTcy;"], [0, "&Ecy;"], [0, "&YUcy;"], [0, "&YAcy;"], [0, "&acy;"], [0, "&bcy;"], [0, "&vcy;"], [0, "&gcy;"], [0, "&dcy;"], [0, "&iecy;"], [0, "&zhcy;"], [0, "&zcy;"], [0, "&icy;"], [0, "&jcy;"], [0, "&kcy;"], [0, "&lcy;"], [0, "&mcy;"], [0, "&ncy;"], [0, "&ocy;"], [0, "&pcy;"], [0, "&rcy;"], [0, "&scy;"], [0, "&tcy;"], [0, "&ucy;"], [0, "&fcy;"], [0, "&khcy;"], [0, "&tscy;"], [0, "&chcy;"], [0, "&shcy;"], [0, "&shchcy;"], [0, "&hardcy;"], [0, "&ycy;"], [0, "&softcy;"], [0, "&ecy;"], [0, "&yucy;"], [0, "&yacy;"], [1, "&iocy;"], [0, "&djcy;"], [0, "&gjcy;"], [0, "&jukcy;"], [0, "&dscy;"], [0, "&iukcy;"], [0, "&yicy;"], [0, "&jsercy;"], [0, "&ljcy;"], [0, "&njcy;"], [0, "&tshcy;"], [0, "&kjcy;"], [1, "&ubrcy;"], [0, "&dzcy;"], [7074, "&ensp;"], [0, "&emsp;"], [0, "&emsp13;"], [0, "&emsp14;"], [1, "&numsp;"], [0, "&puncsp;"], [0, "&ThinSpace;"], [0, "&hairsp;"], [0, "&NegativeMediumSpace;"], [0, "&zwnj;"], [0, "&zwj;"], [0, "&lrm;"], [0, "&rlm;"], [0, "&dash;"], [2, "&ndash;"], [0, "&mdash;"], [0, "&horbar;"], [0, "&Verbar;"], [1, "&lsquo;"], [0, "&CloseCurlyQuote;"], [0, "&lsquor;"], [1, "&ldquo;"], [0, "&CloseCurlyDoubleQuote;"], [0, "&bdquo;"], [1, "&dagger;"], [0, "&Dagger;"], [0, "&bull;"], [2, "&nldr;"], [0, "&hellip;"], [9, "&permil;"], [0, "&pertenk;"], [0, "&prime;"], [0, "&Prime;"], [0, "&tprime;"], [0, "&backprime;"], [3, "&lsaquo;"], [0, "&rsaquo;"], [3, "&oline;"], [2, "&caret;"], [1, "&hybull;"], [0, "&frasl;"], [10, "&bsemi;"], [7, "&qprime;"], [7, { v: "&MediumSpace;", n: 8202, o: "&ThickSpace;" }], [0, "&NoBreak;"], [0, "&af;"], [0, "&InvisibleTimes;"], [0, "&ic;"], [72, "&euro;"], [46, "&tdot;"], [0, "&DotDot;"], [37, "&complexes;"], [2, "&incare;"], [4, "&gscr;"], [0, "&hamilt;"], [0, "&Hfr;"], [0, "&Hopf;"], [0, "&planckh;"], [0, "&hbar;"], [0, "&imagline;"], [0, "&Ifr;"], [0, "&lagran;"], [0, "&ell;"], [1, "&naturals;"], [0, "&numero;"], [0, "&copysr;"], [0, "&weierp;"], [0, "&Popf;"], [0, "&Qopf;"], [0, "&realine;"], [0, "&real;"], [0, "&reals;"], [0, "&rx;"], [3, "&trade;"], [1, "&integers;"], [2, "&mho;"], [0, "&zeetrf;"], [0, "&iiota;"], [2, "&bernou;"], [0, "&Cayleys;"], [1, "&escr;"], [0, "&Escr;"], [0, "&Fouriertrf;"], [1, "&Mellintrf;"], [0, "&order;"], [0, "&alefsym;"], [0, "&beth;"], [0, "&gimel;"], [0, "&daleth;"], [12, "&CapitalDifferentialD;"], [0, "&dd;"], [0, "&ee;"], [0, "&ii;"], [10, "&frac13;"], [0, "&frac23;"], [0, "&frac15;"], [0, "&frac25;"], [0, "&frac35;"], [0, "&frac45;"], [0, "&frac16;"], [0, "&frac56;"], [0, "&frac18;"], [0, "&frac38;"], [0, "&frac58;"], [0, "&frac78;"], [49, "&larr;"], [0, "&ShortUpArrow;"], [0, "&rarr;"], [0, "&darr;"], [0, "&harr;"], [0, "&updownarrow;"], [0, "&nwarr;"], [0, "&nearr;"], [0, "&LowerRightArrow;"], [0, "&LowerLeftArrow;"], [0, "&nlarr;"], [0, "&nrarr;"], [1, { v: "&rarrw;", n: 824, o: "&nrarrw;" }], [0, "&Larr;"], [0, "&Uarr;"], [0, "&Rarr;"], [0, "&Darr;"], [0, "&larrtl;"], [0, "&rarrtl;"], [0, "&LeftTeeArrow;"], [0, "&mapstoup;"], [0, "&map;"], [0, "&DownTeeArrow;"], [1, "&hookleftarrow;"], [0, "&hookrightarrow;"], [0, "&larrlp;"], [0, "&looparrowright;"], [0, "&harrw;"], [0, "&nharr;"], [1, "&lsh;"], [0, "&rsh;"], [0, "&ldsh;"], [0, "&rdsh;"], [1, "&crarr;"], [0, "&cularr;"], [0, "&curarr;"], [2, "&circlearrowleft;"], [0, "&circlearrowright;"], [0, "&leftharpoonup;"], [0, "&DownLeftVector;"], [0, "&RightUpVector;"], [0, "&LeftUpVector;"], [0, "&rharu;"], [0, "&DownRightVector;"], [0, "&dharr;"], [0, "&dharl;"], [0, "&RightArrowLeftArrow;"], [0, "&udarr;"], [0, "&LeftArrowRightArrow;"], [0, "&leftleftarrows;"], [0, "&upuparrows;"], [0, "&rightrightarrows;"], [0, "&ddarr;"], [0, "&leftrightharpoons;"], [0, "&Equilibrium;"], [0, "&nlArr;"], [0, "&nhArr;"], [0, "&nrArr;"], [0, "&DoubleLeftArrow;"], [0, "&DoubleUpArrow;"], [0, "&DoubleRightArrow;"], [0, "&dArr;"], [0, "&DoubleLeftRightArrow;"], [0, "&DoubleUpDownArrow;"], [0, "&nwArr;"], [0, "&neArr;"], [0, "&seArr;"], [0, "&swArr;"], [0, "&lAarr;"], [0, "&rAarr;"], [1, "&zigrarr;"], [6, "&larrb;"], [0, "&rarrb;"], [15, "&DownArrowUpArrow;"], [7, "&loarr;"], [0, "&roarr;"], [0, "&hoarr;"], [0, "&forall;"], [0, "&comp;"], [0, { v: "&part;", n: 824, o: "&npart;" }], [0, "&exist;"], [0, "&nexist;"], [0, "&empty;"], [1, "&Del;"], [0, "&Element;"], [0, "&NotElement;"], [1, "&ni;"], [0, "&notni;"], [2, "&prod;"], [0, "&coprod;"], [0, "&sum;"], [0, "&minus;"], [0, "&MinusPlus;"], [0, "&dotplus;"], [1, "&Backslash;"], [0, "&lowast;"], [0, "&compfn;"], [1, "&radic;"], [2, "&prop;"], [0, "&infin;"], [0, "&angrt;"], [0, { v: "&ang;", n: 8402, o: "&nang;" }], [0, "&angmsd;"], [0, "&angsph;"], [0, "&mid;"], [0, "&nmid;"], [0, "&DoubleVerticalBar;"], [0, "&NotDoubleVerticalBar;"], [0, "&and;"], [0, "&or;"], [0, { v: "&cap;", n: 65024, o: "&caps;" }], [0, { v: "&cup;", n: 65024, o: "&cups;" }], [0, "&int;"], [0, "&Int;"], [0, "&iiint;"], [0, "&conint;"], [0, "&Conint;"], [0, "&Cconint;"], [0, "&cwint;"], [0, "&ClockwiseContourIntegral;"], [0, "&awconint;"], [0, "&there4;"], [0, "&becaus;"], [0, "&ratio;"], [0, "&Colon;"], [0, "&dotminus;"], [1, "&mDDot;"], [0, "&homtht;"], [0, { v: "&sim;", n: 8402, o: "&nvsim;" }], [0, { v: "&backsim;", n: 817, o: "&race;" }], [0, { v: "&ac;", n: 819, o: "&acE;" }], [0, "&acd;"], [0, "&VerticalTilde;"], [0, "&NotTilde;"], [0, { v: "&eqsim;", n: 824, o: "&nesim;" }], [0, "&sime;"], [0, "&NotTildeEqual;"], [0, "&cong;"], [0, "&simne;"], [0, "&ncong;"], [0, "&ap;"], [0, "&nap;"], [0, "&ape;"], [0, { v: "&apid;", n: 824, o: "&napid;" }], [0, "&backcong;"], [0, { v: "&asympeq;", n: 8402, o: "&nvap;" }], [0, { v: "&bump;", n: 824, o: "&nbump;" }], [0, { v: "&bumpe;", n: 824, o: "&nbumpe;" }], [0, { v: "&doteq;", n: 824, o: "&nedot;" }], [0, "&doteqdot;"], [0, "&efDot;"], [0, "&erDot;"], [0, "&Assign;"], [0, "&ecolon;"], [0, "&ecir;"], [0, "&circeq;"], [1, "&wedgeq;"], [0, "&veeeq;"], [1, "&triangleq;"], [2, "&equest;"], [0, "&ne;"], [0, { v: "&Congruent;", n: 8421, o: "&bnequiv;" }], [0, "&nequiv;"], [1, { v: "&le;", n: 8402, o: "&nvle;" }], [0, { v: "&ge;", n: 8402, o: "&nvge;" }], [0, { v: "&lE;", n: 824, o: "&nlE;" }], [0, { v: "&gE;", n: 824, o: "&ngE;" }], [0, { v: "&lnE;", n: 65024, o: "&lvertneqq;" }], [0, { v: "&gnE;", n: 65024, o: "&gvertneqq;" }], [0, { v: "&ll;", n: new Map(/* @__PURE__ */ restoreDiff([[824, "&nLtv;"], [7577, "&nLt;"]])) }], [0, { v: "&gg;", n: new Map(/* @__PURE__ */ restoreDiff([[824, "&nGtv;"], [7577, "&nGt;"]])) }], [0, "&between;"], [0, "&NotCupCap;"], [0, "&nless;"], [0, "&ngt;"], [0, "&nle;"], [0, "&nge;"], [0, "&lesssim;"], [0, "&GreaterTilde;"], [0, "&nlsim;"], [0, "&ngsim;"], [0, "&LessGreater;"], [0, "&gl;"], [0, "&NotLessGreater;"], [0, "&NotGreaterLess;"], [0, "&pr;"], [0, "&sc;"], [0, "&prcue;"], [0, "&sccue;"], [0, "&PrecedesTilde;"], [0, { v: "&scsim;", n: 824, o: "&NotSucceedsTilde;" }], [0, "&NotPrecedes;"], [0, "&NotSucceeds;"], [0, { v: "&sub;", n: 8402, o: "&NotSubset;" }], [0, { v: "&sup;", n: 8402, o: "&NotSuperset;" }], [0, "&nsub;"], [0, "&nsup;"], [0, "&sube;"], [0, "&supe;"], [0, "&NotSubsetEqual;"], [0, "&NotSupersetEqual;"], [0, { v: "&subne;", n: 65024, o: "&varsubsetneq;" }], [0, { v: "&supne;", n: 65024, o: "&varsupsetneq;" }], [1, "&cupdot;"], [0, "&UnionPlus;"], [0, { v: "&sqsub;", n: 824, o: "&NotSquareSubset;" }], [0, { v: "&sqsup;", n: 824, o: "&NotSquareSuperset;" }], [0, "&sqsube;"], [0, "&sqsupe;"], [0, { v: "&sqcap;", n: 65024, o: "&sqcaps;" }], [0, { v: "&sqcup;", n: 65024, o: "&sqcups;" }], [0, "&CirclePlus;"], [0, "&CircleMinus;"], [0, "&CircleTimes;"], [0, "&osol;"], [0, "&CircleDot;"], [0, "&circledcirc;"], [0, "&circledast;"], [1, "&circleddash;"], [0, "&boxplus;"], [0, "&boxminus;"], [0, "&boxtimes;"], [0, "&dotsquare;"], [0, "&RightTee;"], [0, "&dashv;"], [0, "&DownTee;"], [0, "&bot;"], [1, "&models;"], [0, "&DoubleRightTee;"], [0, "&Vdash;"], [0, "&Vvdash;"], [0, "&VDash;"], [0, "&nvdash;"], [0, "&nvDash;"], [0, "&nVdash;"], [0, "&nVDash;"], [0, "&prurel;"], [1, "&LeftTriangle;"], [0, "&RightTriangle;"], [0, { v: "&LeftTriangleEqual;", n: 8402, o: "&nvltrie;" }], [0, { v: "&RightTriangleEqual;", n: 8402, o: "&nvrtrie;" }], [0, "&origof;"], [0, "&imof;"], [0, "&multimap;"], [0, "&hercon;"], [0, "&intcal;"], [0, "&veebar;"], [1, "&barvee;"], [0, "&angrtvb;"], [0, "&lrtri;"], [0, "&bigwedge;"], [0, "&bigvee;"], [0, "&bigcap;"], [0, "&bigcup;"], [0, "&diam;"], [0, "&sdot;"], [0, "&sstarf;"], [0, "&divideontimes;"], [0, "&bowtie;"], [0, "&ltimes;"], [0, "&rtimes;"], [0, "&leftthreetimes;"], [0, "&rightthreetimes;"], [0, "&backsimeq;"], [0, "&curlyvee;"], [0, "&curlywedge;"], [0, "&Sub;"], [0, "&Sup;"], [0, "&Cap;"], [0, "&Cup;"], [0, "&fork;"], [0, "&epar;"], [0, "&lessdot;"], [0, "&gtdot;"], [0, { v: "&Ll;", n: 824, o: "&nLl;" }], [0, { v: "&Gg;", n: 824, o: "&nGg;" }], [0, { v: "&leg;", n: 65024, o: "&lesg;" }], [0, { v: "&gel;", n: 65024, o: "&gesl;" }], [2, "&cuepr;"], [0, "&cuesc;"], [0, "&NotPrecedesSlantEqual;"], [0, "&NotSucceedsSlantEqual;"], [0, "&NotSquareSubsetEqual;"], [0, "&NotSquareSupersetEqual;"], [2, "&lnsim;"], [0, "&gnsim;"], [0, "&precnsim;"], [0, "&scnsim;"], [0, "&nltri;"], [0, "&NotRightTriangle;"], [0, "&nltrie;"], [0, "&NotRightTriangleEqual;"], [0, "&vellip;"], [0, "&ctdot;"], [0, "&utdot;"], [0, "&dtdot;"], [0, "&disin;"], [0, "&isinsv;"], [0, "&isins;"], [0, { v: "&isindot;", n: 824, o: "&notindot;" }], [0, "&notinvc;"], [0, "&notinvb;"], [1, { v: "&isinE;", n: 824, o: "&notinE;" }], [0, "&nisd;"], [0, "&xnis;"], [0, "&nis;"], [0, "&notnivc;"], [0, "&notnivb;"], [6, "&barwed;"], [0, "&Barwed;"], [1, "&lceil;"], [0, "&rceil;"], [0, "&LeftFloor;"], [0, "&rfloor;"], [0, "&drcrop;"], [0, "&dlcrop;"], [0, "&urcrop;"], [0, "&ulcrop;"], [0, "&bnot;"], [1, "&profline;"], [0, "&profsurf;"], [1, "&telrec;"], [0, "&target;"], [5, "&ulcorn;"], [0, "&urcorn;"], [0, "&dlcorn;"], [0, "&drcorn;"], [2, "&frown;"], [0, "&smile;"], [9, "&cylcty;"], [0, "&profalar;"], [7, "&topbot;"], [6, "&ovbar;"], [1, "&solbar;"], [60, "&angzarr;"], [51, "&lmoustache;"], [0, "&rmoustache;"], [2, "&OverBracket;"], [0, "&bbrk;"], [0, "&bbrktbrk;"], [37, "&OverParenthesis;"], [0, "&UnderParenthesis;"], [0, "&OverBrace;"], [0, "&UnderBrace;"], [2, "&trpezium;"], [4, "&elinters;"], [59, "&blank;"], [164, "&circledS;"], [55, "&boxh;"], [1, "&boxv;"], [9, "&boxdr;"], [3, "&boxdl;"], [3, "&boxur;"], [3, "&boxul;"], [3, "&boxvr;"], [7, "&boxvl;"], [7, "&boxhd;"], [7, "&boxhu;"], [7, "&boxvh;"], [19, "&boxH;"], [0, "&boxV;"], [0, "&boxdR;"], [0, "&boxDr;"], [0, "&boxDR;"], [0, "&boxdL;"], [0, "&boxDl;"], [0, "&boxDL;"], [0, "&boxuR;"], [0, "&boxUr;"], [0, "&boxUR;"], [0, "&boxuL;"], [0, "&boxUl;"], [0, "&boxUL;"], [0, "&boxvR;"], [0, "&boxVr;"], [0, "&boxVR;"], [0, "&boxvL;"], [0, "&boxVl;"], [0, "&boxVL;"], [0, "&boxHd;"], [0, "&boxhD;"], [0, "&boxHD;"], [0, "&boxHu;"], [0, "&boxhU;"], [0, "&boxHU;"], [0, "&boxvH;"], [0, "&boxVh;"], [0, "&boxVH;"], [19, "&uhblk;"], [3, "&lhblk;"], [3, "&block;"], [8, "&blk14;"], [0, "&blk12;"], [0, "&blk34;"], [13, "&square;"], [8, "&blacksquare;"], [0, "&EmptyVerySmallSquare;"], [1, "&rect;"], [0, "&marker;"], [2, "&fltns;"], [1, "&bigtriangleup;"], [0, "&blacktriangle;"], [0, "&triangle;"], [2, "&blacktriangleright;"], [0, "&rtri;"], [3, "&bigtriangledown;"], [0, "&blacktriangledown;"], [0, "&dtri;"], [2, "&blacktriangleleft;"], [0, "&ltri;"], [6, "&loz;"], [0, "&cir;"], [32, "&tridot;"], [2, "&bigcirc;"], [8, "&ultri;"], [0, "&urtri;"], [0, "&lltri;"], [0, "&EmptySmallSquare;"], [0, "&FilledSmallSquare;"], [8, "&bigstar;"], [0, "&star;"], [7, "&phone;"], [49, "&female;"], [1, "&male;"], [29, "&spades;"], [2, "&clubs;"], [1, "&hearts;"], [0, "&diamondsuit;"], [3, "&sung;"], [2, "&flat;"], [0, "&natural;"], [0, "&sharp;"], [163, "&check;"], [3, "&cross;"], [8, "&malt;"], [21, "&sext;"], [33, "&VerticalSeparator;"], [25, "&lbbrk;"], [0, "&rbbrk;"], [84, "&bsolhsub;"], [0, "&suphsol;"], [28, "&LeftDoubleBracket;"], [0, "&RightDoubleBracket;"], [0, "&lang;"], [0, "&rang;"], [0, "&Lang;"], [0, "&Rang;"], [0, "&loang;"], [0, "&roang;"], [7, "&longleftarrow;"], [0, "&longrightarrow;"], [0, "&longleftrightarrow;"], [0, "&DoubleLongLeftArrow;"], [0, "&DoubleLongRightArrow;"], [0, "&DoubleLongLeftRightArrow;"], [1, "&longmapsto;"], [2, "&dzigrarr;"], [258, "&nvlArr;"], [0, "&nvrArr;"], [0, "&nvHarr;"], [0, "&Map;"], [6, "&lbarr;"], [0, "&bkarow;"], [0, "&lBarr;"], [0, "&dbkarow;"], [0, "&drbkarow;"], [0, "&DDotrahd;"], [0, "&UpArrowBar;"], [0, "&DownArrowBar;"], [2, "&Rarrtl;"], [2, "&latail;"], [0, "&ratail;"], [0, "&lAtail;"], [0, "&rAtail;"], [0, "&larrfs;"], [0, "&rarrfs;"], [0, "&larrbfs;"], [0, "&rarrbfs;"], [2, "&nwarhk;"], [0, "&nearhk;"], [0, "&hksearow;"], [0, "&hkswarow;"], [0, "&nwnear;"], [0, "&nesear;"], [0, "&seswar;"], [0, "&swnwar;"], [8, { v: "&rarrc;", n: 824, o: "&nrarrc;" }], [1, "&cudarrr;"], [0, "&ldca;"], [0, "&rdca;"], [0, "&cudarrl;"], [0, "&larrpl;"], [2, "&curarrm;"], [0, "&cularrp;"], [7, "&rarrpl;"], [2, "&harrcir;"], [0, "&Uarrocir;"], [0, "&lurdshar;"], [0, "&ldrushar;"], [2, "&LeftRightVector;"], [0, "&RightUpDownVector;"], [0, "&DownLeftRightVector;"], [0, "&LeftUpDownVector;"], [0, "&LeftVectorBar;"], [0, "&RightVectorBar;"], [0, "&RightUpVectorBar;"], [0, "&RightDownVectorBar;"], [0, "&DownLeftVectorBar;"], [0, "&DownRightVectorBar;"], [0, "&LeftUpVectorBar;"], [0, "&LeftDownVectorBar;"], [0, "&LeftTeeVector;"], [0, "&RightTeeVector;"], [0, "&RightUpTeeVector;"], [0, "&RightDownTeeVector;"], [0, "&DownLeftTeeVector;"], [0, "&DownRightTeeVector;"], [0, "&LeftUpTeeVector;"], [0, "&LeftDownTeeVector;"], [0, "&lHar;"], [0, "&uHar;"], [0, "&rHar;"], [0, "&dHar;"], [0, "&luruhar;"], [0, "&ldrdhar;"], [0, "&ruluhar;"], [0, "&rdldhar;"], [0, "&lharul;"], [0, "&llhard;"], [0, "&rharul;"], [0, "&lrhard;"], [0, "&udhar;"], [0, "&duhar;"], [0, "&RoundImplies;"], [0, "&erarr;"], [0, "&simrarr;"], [0, "&larrsim;"], [0, "&rarrsim;"], [0, "&rarrap;"], [0, "&ltlarr;"], [1, "&gtrarr;"], [0, "&subrarr;"], [1, "&suplarr;"], [0, "&lfisht;"], [0, "&rfisht;"], [0, "&ufisht;"], [0, "&dfisht;"], [5, "&lopar;"], [0, "&ropar;"], [4, "&lbrke;"], [0, "&rbrke;"], [0, "&lbrkslu;"], [0, "&rbrksld;"], [0, "&lbrksld;"], [0, "&rbrkslu;"], [0, "&langd;"], [0, "&rangd;"], [0, "&lparlt;"], [0, "&rpargt;"], [0, "&gtlPar;"], [0, "&ltrPar;"], [3, "&vzigzag;"], [1, "&vangrt;"], [0, "&angrtvbd;"], [6, "&ange;"], [0, "&range;"], [0, "&dwangle;"], [0, "&uwangle;"], [0, "&angmsdaa;"], [0, "&angmsdab;"], [0, "&angmsdac;"], [0, "&angmsdad;"], [0, "&angmsdae;"], [0, "&angmsdaf;"], [0, "&angmsdag;"], [0, "&angmsdah;"], [0, "&bemptyv;"], [0, "&demptyv;"], [0, "&cemptyv;"], [0, "&raemptyv;"], [0, "&laemptyv;"], [0, "&ohbar;"], [0, "&omid;"], [0, "&opar;"], [1, "&operp;"], [1, "&olcross;"], [0, "&odsold;"], [1, "&olcir;"], [0, "&ofcir;"], [0, "&olt;"], [0, "&ogt;"], [0, "&cirscir;"], [0, "&cirE;"], [0, "&solb;"], [0, "&bsolb;"], [3, "&boxbox;"], [3, "&trisb;"], [0, "&rtriltri;"], [0, { v: "&LeftTriangleBar;", n: 824, o: "&NotLeftTriangleBar;" }], [0, { v: "&RightTriangleBar;", n: 824, o: "&NotRightTriangleBar;" }], [11, "&iinfin;"], [0, "&infintie;"], [0, "&nvinfin;"], [4, "&eparsl;"], [0, "&smeparsl;"], [0, "&eqvparsl;"], [5, "&blacklozenge;"], [8, "&RuleDelayed;"], [1, "&dsol;"], [9, "&bigodot;"], [0, "&bigoplus;"], [0, "&bigotimes;"], [1, "&biguplus;"], [1, "&bigsqcup;"], [5, "&iiiint;"], [0, "&fpartint;"], [2, "&cirfnint;"], [0, "&awint;"], [0, "&rppolint;"], [0, "&scpolint;"], [0, "&npolint;"], [0, "&pointint;"], [0, "&quatint;"], [0, "&intlarhk;"], [10, "&pluscir;"], [0, "&plusacir;"], [0, "&simplus;"], [0, "&plusdu;"], [0, "&plussim;"], [0, "&plustwo;"], [1, "&mcomma;"], [0, "&minusdu;"], [2, "&loplus;"], [0, "&roplus;"], [0, "&Cross;"], [0, "&timesd;"], [0, "&timesbar;"], [1, "&smashp;"], [0, "&lotimes;"], [0, "&rotimes;"], [0, "&otimesas;"], [0, "&Otimes;"], [0, "&odiv;"], [0, "&triplus;"], [0, "&triminus;"], [0, "&tritime;"], [0, "&intprod;"], [2, "&amalg;"], [0, "&capdot;"], [1, "&ncup;"], [0, "&ncap;"], [0, "&capand;"], [0, "&cupor;"], [0, "&cupcap;"], [0, "&capcup;"], [0, "&cupbrcap;"], [0, "&capbrcup;"], [0, "&cupcup;"], [0, "&capcap;"], [0, "&ccups;"], [0, "&ccaps;"], [2, "&ccupssm;"], [2, "&And;"], [0, "&Or;"], [0, "&andand;"], [0, "&oror;"], [0, "&orslope;"], [0, "&andslope;"], [1, "&andv;"], [0, "&orv;"], [0, "&andd;"], [0, "&ord;"], [1, "&wedbar;"], [6, "&sdote;"], [3, "&simdot;"], [2, { v: "&congdot;", n: 824, o: "&ncongdot;" }], [0, "&easter;"], [0, "&apacir;"], [0, { v: "&apE;", n: 824, o: "&napE;" }], [0, "&eplus;"], [0, "&pluse;"], [0, "&Esim;"], [0, "&Colone;"], [0, "&Equal;"], [1, "&ddotseq;"], [0, "&equivDD;"], [0, "&ltcir;"], [0, "&gtcir;"], [0, "&ltquest;"], [0, "&gtquest;"], [0, { v: "&leqslant;", n: 824, o: "&nleqslant;" }], [0, { v: "&geqslant;", n: 824, o: "&ngeqslant;" }], [0, "&lesdot;"], [0, "&gesdot;"], [0, "&lesdoto;"], [0, "&gesdoto;"], [0, "&lesdotor;"], [0, "&gesdotol;"], [0, "&lap;"], [0, "&gap;"], [0, "&lne;"], [0, "&gne;"], [0, "&lnap;"], [0, "&gnap;"], [0, "&lEg;"], [0, "&gEl;"], [0, "&lsime;"], [0, "&gsime;"], [0, "&lsimg;"], [0, "&gsiml;"], [0, "&lgE;"], [0, "&glE;"], [0, "&lesges;"], [0, "&gesles;"], [0, "&els;"], [0, "&egs;"], [0, "&elsdot;"], [0, "&egsdot;"], [0, "&el;"], [0, "&eg;"], [2, "&siml;"], [0, "&simg;"], [0, "&simlE;"], [0, "&simgE;"], [0, { v: "&LessLess;", n: 824, o: "&NotNestedLessLess;" }], [0, { v: "&GreaterGreater;", n: 824, o: "&NotNestedGreaterGreater;" }], [1, "&glj;"], [0, "&gla;"], [0, "&ltcc;"], [0, "&gtcc;"], [0, "&lescc;"], [0, "&gescc;"], [0, "&smt;"], [0, "&lat;"], [0, { v: "&smte;", n: 65024, o: "&smtes;" }], [0, { v: "&late;", n: 65024, o: "&lates;" }], [0, "&bumpE;"], [0, { v: "&PrecedesEqual;", n: 824, o: "&NotPrecedesEqual;" }], [0, { v: "&sce;", n: 824, o: "&NotSucceedsEqual;" }], [2, "&prE;"], [0, "&scE;"], [0, "&precneqq;"], [0, "&scnE;"], [0, "&prap;"], [0, "&scap;"], [0, "&precnapprox;"], [0, "&scnap;"], [0, "&Pr;"], [0, "&Sc;"], [0, "&subdot;"], [0, "&supdot;"], [0, "&subplus;"], [0, "&supplus;"], [0, "&submult;"], [0, "&supmult;"], [0, "&subedot;"], [0, "&supedot;"], [0, { v: "&subE;", n: 824, o: "&nsubE;" }], [0, { v: "&supE;", n: 824, o: "&nsupE;" }], [0, "&subsim;"], [0, "&supsim;"], [2, { v: "&subnE;", n: 65024, o: "&varsubsetneqq;" }], [0, { v: "&supnE;", n: 65024, o: "&varsupsetneqq;" }], [2, "&csub;"], [0, "&csup;"], [0, "&csube;"], [0, "&csupe;"], [0, "&subsup;"], [0, "&supsub;"], [0, "&subsub;"], [0, "&supsup;"], [0, "&suphsub;"], [0, "&supdsub;"], [0, "&forkv;"], [0, "&topfork;"], [0, "&mlcp;"], [8, "&Dashv;"], [1, "&Vdashl;"], [0, "&Barv;"], [0, "&vBar;"], [0, "&vBarv;"], [1, "&Vbar;"], [0, "&Not;"], [0, "&bNot;"], [0, "&rnmid;"], [0, "&cirmid;"], [0, "&midcir;"], [0, "&topcir;"], [0, "&nhpar;"], [0, "&parsim;"], [9, { v: "&parsl;", n: 8421, o: "&nparsl;" }], [44343, { n: new Map(/* @__PURE__ */ restoreDiff([[56476, "&Ascr;"], [1, "&Cscr;"], [0, "&Dscr;"], [2, "&Gscr;"], [2, "&Jscr;"], [0, "&Kscr;"], [2, "&Nscr;"], [0, "&Oscr;"], [0, "&Pscr;"], [0, "&Qscr;"], [1, "&Sscr;"], [0, "&Tscr;"], [0, "&Uscr;"], [0, "&Vscr;"], [0, "&Wscr;"], [0, "&Xscr;"], [0, "&Yscr;"], [0, "&Zscr;"], [0, "&ascr;"], [0, "&bscr;"], [0, "&cscr;"], [0, "&dscr;"], [1, "&fscr;"], [1, "&hscr;"], [0, "&iscr;"], [0, "&jscr;"], [0, "&kscr;"], [0, "&lscr;"], [0, "&mscr;"], [0, "&nscr;"], [1, "&pscr;"], [0, "&qscr;"], [0, "&rscr;"], [0, "&sscr;"], [0, "&tscr;"], [0, "&uscr;"], [0, "&vscr;"], [0, "&wscr;"], [0, "&xscr;"], [0, "&yscr;"], [0, "&zscr;"], [52, "&Afr;"], [0, "&Bfr;"], [1, "&Dfr;"], [0, "&Efr;"], [0, "&Ffr;"], [0, "&Gfr;"], [2, "&Jfr;"], [0, "&Kfr;"], [0, "&Lfr;"], [0, "&Mfr;"], [0, "&Nfr;"], [0, "&Ofr;"], [0, "&Pfr;"], [0, "&Qfr;"], [1, "&Sfr;"], [0, "&Tfr;"], [0, "&Ufr;"], [0, "&Vfr;"], [0, "&Wfr;"], [0, "&Xfr;"], [0, "&Yfr;"], [1, "&afr;"], [0, "&bfr;"], [0, "&cfr;"], [0, "&dfr;"], [0, "&efr;"], [0, "&ffr;"], [0, "&gfr;"], [0, "&hfr;"], [0, "&ifr;"], [0, "&jfr;"], [0, "&kfr;"], [0, "&lfr;"], [0, "&mfr;"], [0, "&nfr;"], [0, "&ofr;"], [0, "&pfr;"], [0, "&qfr;"], [0, "&rfr;"], [0, "&sfr;"], [0, "&tfr;"], [0, "&ufr;"], [0, "&vfr;"], [0, "&wfr;"], [0, "&xfr;"], [0, "&yfr;"], [0, "&zfr;"], [0, "&Aopf;"], [0, "&Bopf;"], [1, "&Dopf;"], [0, "&Eopf;"], [0, "&Fopf;"], [0, "&Gopf;"], [1, "&Iopf;"], [0, "&Jopf;"], [0, "&Kopf;"], [0, "&Lopf;"], [0, "&Mopf;"], [1, "&Oopf;"], [3, "&Sopf;"], [0, "&Topf;"], [0, "&Uopf;"], [0, "&Vopf;"], [0, "&Wopf;"], [0, "&Xopf;"], [0, "&Yopf;"], [1, "&aopf;"], [0, "&bopf;"], [0, "&copf;"], [0, "&dopf;"], [0, "&eopf;"], [0, "&fopf;"], [0, "&gopf;"], [0, "&hopf;"], [0, "&iopf;"], [0, "&jopf;"], [0, "&kopf;"], [0, "&lopf;"], [0, "&mopf;"], [0, "&nopf;"], [0, "&oopf;"], [0, "&popf;"], [0, "&qopf;"], [0, "&ropf;"], [0, "&sopf;"], [0, "&topf;"], [0, "&uopf;"], [0, "&vopf;"], [0, "&wopf;"], [0, "&xopf;"], [0, "&yopf;"], [0, "&zopf;"]])) }], [8906, "&fflig;"], [0, "&filig;"], [0, "&fllig;"], [0, "&ffilig;"], [0, "&ffllig;"]]));
618
+ }
619
+ });
620
+
621
+ // ../../../../node_modules/entities/lib/esm/escape.js
622
+ function encodeXML(str) {
623
+ let ret = "";
624
+ let lastIdx = 0;
625
+ let match;
626
+ while ((match = xmlReplacer.exec(str)) !== null) {
627
+ const i = match.index;
628
+ const char = str.charCodeAt(i);
629
+ const next = xmlCodeMap.get(char);
630
+ if (next !== void 0) {
631
+ ret += str.substring(lastIdx, i) + next;
632
+ lastIdx = i + 1;
633
+ } else {
634
+ ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;
635
+ lastIdx = xmlReplacer.lastIndex += Number((char & 64512) === 55296);
636
+ }
637
+ }
638
+ return ret + str.substr(lastIdx);
639
+ }
640
+ function getEscaper(regex, map) {
641
+ return function escape2(data) {
642
+ let match;
643
+ let lastIdx = 0;
644
+ let result = "";
645
+ while (match = regex.exec(data)) {
646
+ if (lastIdx !== match.index) {
647
+ result += data.substring(lastIdx, match.index);
648
+ }
649
+ result += map.get(match[0].charCodeAt(0));
650
+ lastIdx = match.index + 1;
651
+ }
652
+ return result + data.substring(lastIdx);
653
+ };
654
+ }
655
+ var xmlReplacer, xmlCodeMap, getCodePoint, escapeUTF8, escapeAttribute, escapeText;
656
+ var init_escape = __esm({
657
+ "../../../../node_modules/entities/lib/esm/escape.js"() {
658
+ "use strict";
659
+ xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
660
+ xmlCodeMap = /* @__PURE__ */ new Map([
661
+ [34, "&quot;"],
662
+ [38, "&amp;"],
663
+ [39, "&apos;"],
664
+ [60, "&lt;"],
665
+ [62, "&gt;"]
666
+ ]);
667
+ getCodePoint = // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
668
+ String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
669
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
670
+ (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
671
+ );
672
+ escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
673
+ escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
674
+ [34, "&quot;"],
675
+ [38, "&amp;"],
676
+ [160, "&nbsp;"]
677
+ ]));
678
+ escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
679
+ [38, "&amp;"],
680
+ [60, "&lt;"],
681
+ [62, "&gt;"],
682
+ [160, "&nbsp;"]
683
+ ]));
684
+ }
685
+ });
686
+
687
+ // ../../../../node_modules/entities/lib/esm/encode.js
688
+ var init_encode = __esm({
689
+ "../../../../node_modules/entities/lib/esm/encode.js"() {
690
+ "use strict";
691
+ init_encode_html();
692
+ init_escape();
693
+ }
694
+ });
695
+
696
+ // ../../../../node_modules/entities/lib/esm/index.js
697
+ var EntityLevel, EncodingMode;
698
+ var init_esm2 = __esm({
699
+ "../../../../node_modules/entities/lib/esm/index.js"() {
700
+ "use strict";
701
+ init_decode();
702
+ init_encode();
703
+ init_escape();
704
+ init_escape();
705
+ init_encode();
706
+ init_decode();
707
+ (function(EntityLevel2) {
708
+ EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
709
+ EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
710
+ })(EntityLevel || (EntityLevel = {}));
711
+ (function(EncodingMode2) {
712
+ EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
713
+ EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
714
+ EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
715
+ EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
716
+ EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
717
+ })(EncodingMode || (EncodingMode = {}));
718
+ }
719
+ });
720
+
721
+ // ../../../../node_modules/dom-serializer/lib/esm/foreignNames.js
722
+ var elementNames, attributeNames;
723
+ var init_foreignNames = __esm({
724
+ "../../../../node_modules/dom-serializer/lib/esm/foreignNames.js"() {
725
+ "use strict";
726
+ elementNames = new Map([
727
+ "altGlyph",
728
+ "altGlyphDef",
729
+ "altGlyphItem",
730
+ "animateColor",
731
+ "animateMotion",
732
+ "animateTransform",
733
+ "clipPath",
734
+ "feBlend",
735
+ "feColorMatrix",
736
+ "feComponentTransfer",
737
+ "feComposite",
738
+ "feConvolveMatrix",
739
+ "feDiffuseLighting",
740
+ "feDisplacementMap",
741
+ "feDistantLight",
742
+ "feDropShadow",
743
+ "feFlood",
744
+ "feFuncA",
745
+ "feFuncB",
746
+ "feFuncG",
747
+ "feFuncR",
748
+ "feGaussianBlur",
749
+ "feImage",
750
+ "feMerge",
751
+ "feMergeNode",
752
+ "feMorphology",
753
+ "feOffset",
754
+ "fePointLight",
755
+ "feSpecularLighting",
756
+ "feSpotLight",
757
+ "feTile",
758
+ "feTurbulence",
759
+ "foreignObject",
760
+ "glyphRef",
761
+ "linearGradient",
762
+ "radialGradient",
763
+ "textPath"
764
+ ].map((val) => [val.toLowerCase(), val]));
765
+ attributeNames = new Map([
766
+ "definitionURL",
767
+ "attributeName",
768
+ "attributeType",
769
+ "baseFrequency",
770
+ "baseProfile",
771
+ "calcMode",
772
+ "clipPathUnits",
773
+ "diffuseConstant",
774
+ "edgeMode",
775
+ "filterUnits",
776
+ "glyphRef",
777
+ "gradientTransform",
778
+ "gradientUnits",
779
+ "kernelMatrix",
780
+ "kernelUnitLength",
781
+ "keyPoints",
782
+ "keySplines",
783
+ "keyTimes",
784
+ "lengthAdjust",
785
+ "limitingConeAngle",
786
+ "markerHeight",
787
+ "markerUnits",
788
+ "markerWidth",
789
+ "maskContentUnits",
790
+ "maskUnits",
791
+ "numOctaves",
792
+ "pathLength",
793
+ "patternContentUnits",
794
+ "patternTransform",
795
+ "patternUnits",
796
+ "pointsAtX",
797
+ "pointsAtY",
798
+ "pointsAtZ",
799
+ "preserveAlpha",
800
+ "preserveAspectRatio",
801
+ "primitiveUnits",
802
+ "refX",
803
+ "refY",
804
+ "repeatCount",
805
+ "repeatDur",
806
+ "requiredExtensions",
807
+ "requiredFeatures",
808
+ "specularConstant",
809
+ "specularExponent",
810
+ "spreadMethod",
811
+ "startOffset",
812
+ "stdDeviation",
813
+ "stitchTiles",
814
+ "surfaceScale",
815
+ "systemLanguage",
816
+ "tableValues",
817
+ "targetX",
818
+ "targetY",
819
+ "textLength",
820
+ "viewBox",
821
+ "viewTarget",
822
+ "xChannelSelector",
823
+ "yChannelSelector",
824
+ "zoomAndPan"
825
+ ].map((val) => [val.toLowerCase(), val]));
826
+ }
827
+ });
828
+
829
+ // ../../../../node_modules/dom-serializer/lib/esm/index.js
830
+ var esm_exports = {};
831
+ __export(esm_exports, {
832
+ default: () => esm_default,
833
+ render: () => render
834
+ });
835
+ function replaceQuotes(value) {
836
+ return value.replace(/"/g, "&quot;");
837
+ }
838
+ function formatAttributes(attributes, opts) {
839
+ var _a2;
840
+ if (!attributes)
841
+ return;
842
+ const encode = ((_a2 = opts.encodeEntities) !== null && _a2 !== void 0 ? _a2 : opts.decodeEntities) === false ? replaceQuotes : opts.xmlMode || opts.encodeEntities !== "utf8" ? encodeXML : escapeAttribute;
843
+ return Object.keys(attributes).map((key) => {
844
+ var _a3, _b;
845
+ const value = (_a3 = attributes[key]) !== null && _a3 !== void 0 ? _a3 : "";
846
+ if (opts.xmlMode === "foreign") {
847
+ key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;
848
+ }
849
+ if (!opts.emptyAttrs && !opts.xmlMode && value === "") {
850
+ return key;
851
+ }
852
+ return `${key}="${encode(value)}"`;
853
+ }).join(" ");
854
+ }
855
+ function render(node, options = {}) {
856
+ const nodes = "length" in node ? node : [node];
857
+ let output = "";
858
+ for (let i = 0; i < nodes.length; i++) {
859
+ output += renderNode(nodes[i], options);
860
+ }
861
+ return output;
862
+ }
863
+ function renderNode(node, options) {
864
+ switch (node.type) {
865
+ case Root:
866
+ return render(node.children, options);
867
+ // @ts-expect-error We don't use `Doctype` yet
868
+ case Doctype:
869
+ case Directive:
870
+ return renderDirective(node);
871
+ case Comment:
872
+ return renderComment(node);
873
+ case CDATA:
874
+ return renderCdata(node);
875
+ case Script:
876
+ case Style:
877
+ case Tag:
878
+ return renderTag(node, options);
879
+ case Text:
880
+ return renderText(node, options);
881
+ }
882
+ }
883
+ function renderTag(elem, opts) {
884
+ var _a2;
885
+ if (opts.xmlMode === "foreign") {
886
+ elem.name = (_a2 = elementNames.get(elem.name)) !== null && _a2 !== void 0 ? _a2 : elem.name;
887
+ if (elem.parent && foreignModeIntegrationPoints.has(elem.parent.name)) {
888
+ opts = { ...opts, xmlMode: false };
889
+ }
890
+ }
891
+ if (!opts.xmlMode && foreignElements.has(elem.name)) {
892
+ opts = { ...opts, xmlMode: "foreign" };
893
+ }
894
+ let tag = `<${elem.name}`;
895
+ const attribs = formatAttributes(elem.attribs, opts);
896
+ if (attribs) {
897
+ tag += ` ${attribs}`;
898
+ }
899
+ if (elem.children.length === 0 && (opts.xmlMode ? (
900
+ // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags
901
+ opts.selfClosingTags !== false
902
+ ) : (
903
+ // User explicitly asked for self-closing tags, even in HTML mode
904
+ opts.selfClosingTags && singleTag.has(elem.name)
905
+ ))) {
906
+ if (!opts.xmlMode)
907
+ tag += " ";
908
+ tag += "/>";
909
+ } else {
910
+ tag += ">";
911
+ if (elem.children.length > 0) {
912
+ tag += render(elem.children, opts);
913
+ }
914
+ if (opts.xmlMode || !singleTag.has(elem.name)) {
915
+ tag += `</${elem.name}>`;
916
+ }
917
+ }
918
+ return tag;
919
+ }
920
+ function renderDirective(elem) {
921
+ return `<${elem.data}>`;
922
+ }
923
+ function renderText(elem, opts) {
924
+ var _a2;
925
+ let data = elem.data || "";
926
+ if (((_a2 = opts.encodeEntities) !== null && _a2 !== void 0 ? _a2 : opts.decodeEntities) !== false && !(!opts.xmlMode && elem.parent && unencodedElements.has(elem.parent.name))) {
927
+ data = opts.xmlMode || opts.encodeEntities !== "utf8" ? encodeXML(data) : escapeText(data);
928
+ }
929
+ return data;
930
+ }
931
+ function renderCdata(elem) {
932
+ return `<![CDATA[${elem.children[0].data}]]>`;
933
+ }
934
+ function renderComment(elem) {
935
+ return `<!--${elem.data}-->`;
936
+ }
937
+ var unencodedElements, singleTag, esm_default, foreignModeIntegrationPoints, foreignElements;
938
+ var init_esm3 = __esm({
939
+ "../../../../node_modules/dom-serializer/lib/esm/index.js"() {
940
+ "use strict";
941
+ init_esm();
942
+ init_esm2();
943
+ init_foreignNames();
944
+ unencodedElements = /* @__PURE__ */ new Set([
945
+ "style",
946
+ "script",
947
+ "xmp",
948
+ "iframe",
949
+ "noembed",
950
+ "noframes",
951
+ "plaintext",
952
+ "noscript"
953
+ ]);
954
+ singleTag = /* @__PURE__ */ new Set([
955
+ "area",
956
+ "base",
957
+ "basefont",
958
+ "br",
959
+ "col",
960
+ "command",
961
+ "embed",
962
+ "frame",
963
+ "hr",
964
+ "img",
965
+ "input",
966
+ "isindex",
967
+ "keygen",
968
+ "link",
969
+ "meta",
970
+ "param",
971
+ "source",
972
+ "track",
973
+ "wbr"
974
+ ]);
975
+ esm_default = render;
976
+ foreignModeIntegrationPoints = /* @__PURE__ */ new Set([
977
+ "mi",
978
+ "mo",
979
+ "mn",
980
+ "ms",
981
+ "mtext",
982
+ "annotation-xml",
983
+ "foreignObject",
984
+ "desc",
985
+ "title"
986
+ ]);
987
+ foreignElements = /* @__PURE__ */ new Set(["svg", "math"]);
988
+ }
989
+ });
990
+
127
991
  // src/index.ts
128
992
  var import_commander = require("commander");
129
- var import_chalk6 = __toESM(require("chalk"), 1);
993
+ var import_chalk7 = __toESM(require("chalk"), 1);
130
994
 
131
995
  // src/commands/init.ts
132
996
  var import_universal_pwa_core = require("@julien-lin/universal-pwa-core");
@@ -631,7 +1495,8 @@ async function initCommand(options = {}) {
631
1495
  }
632
1496
  let finalOutputDir;
633
1497
  if (outputDir) {
634
- finalOutputDir = (0, import_path2.resolve)(outputDir);
1498
+ finalOutputDir = outputDir.startsWith("/") || process.platform === "win32" && /^[A-Z]:/.test(outputDir) ? (0, import_path2.resolve)(outputDir) : (0, import_path2.join)(result.projectPath, outputDir);
1499
+ console.log(import_chalk2.default.gray(` Using output directory: ${finalOutputDir}`));
635
1500
  } else {
636
1501
  const distDir = (0, import_path2.join)(result.projectPath, "dist");
637
1502
  const publicDir = (0, import_path2.join)(result.projectPath, "public");
@@ -869,9 +1734,9 @@ async function initCommand(options = {}) {
869
1734
  if (!skipInjection) {
870
1735
  console.log(import_chalk2.default.blue("\u{1F489} Injecting meta-tags..."));
871
1736
  try {
872
- const htmlFiles = await (0, import_glob.glob)("**/*.html", {
1737
+ const htmlFiles = await (0, import_glob.glob)("**/*.{html,twig,html.twig,blade.php}", {
873
1738
  cwd: result.projectPath,
874
- ignore: ["**/node_modules/**", "**/.next/**", "**/.nuxt/**"],
1739
+ ignore: ["**/node_modules/**", "**/.next/**", "**/.nuxt/**", "**/vendor/**"],
875
1740
  absolute: true
876
1741
  });
877
1742
  htmlFiles.sort((a, b) => {
@@ -887,7 +1752,15 @@ async function initCommand(options = {}) {
887
1752
  });
888
1753
  const htmlFilesToProcess = maxHtmlFiles && maxHtmlFiles > 0 ? htmlFiles.slice(0, maxHtmlFiles) : htmlFiles;
889
1754
  if (htmlFiles.length > 0) {
890
- console.log(import_chalk2.default.gray(` Found ${htmlFiles.length} HTML file(s)${maxHtmlFiles && maxHtmlFiles > 0 ? ` (processing ${htmlFilesToProcess.length})` : ""}`));
1755
+ const htmlCount = htmlFiles.filter((f) => f.endsWith(".html") && !f.endsWith(".html.twig")).length;
1756
+ const twigCount = htmlFiles.filter((f) => f.endsWith(".twig") || f.endsWith(".html.twig")).length;
1757
+ const bladeCount = htmlFiles.filter((f) => f.endsWith(".blade.php")).length;
1758
+ const fileTypes = [];
1759
+ if (htmlCount > 0) fileTypes.push(`${htmlCount} HTML`);
1760
+ if (twigCount > 0) fileTypes.push(`${twigCount} Twig`);
1761
+ if (bladeCount > 0) fileTypes.push(`${bladeCount} Blade`);
1762
+ const typeSummary = fileTypes.length > 0 ? ` (${fileTypes.join(", ")})` : "";
1763
+ console.log(import_chalk2.default.gray(` Found ${htmlFiles.length} template file(s)${typeSummary}${maxHtmlFiles && maxHtmlFiles > 0 ? ` (processing ${htmlFilesToProcess.length})` : ""}`));
891
1764
  }
892
1765
  for (const htmlFile of htmlFilesToProcess) {
893
1766
  const htmlRelativePath = (0, import_path2.relative)(result.projectPath, htmlFile);
@@ -955,7 +1828,8 @@ async function initCommand(options = {}) {
955
1828
  }
956
1829
  }
957
1830
  result.htmlFilesInjected = injectedCount;
958
- console.log(import_chalk2.default.green(`\u2713 Injected meta-tags in ${injectedCount} HTML file(s)`));
1831
+ const fileTypeLabel = htmlFilesToProcess.some((f) => f.endsWith(".twig") || f.endsWith(".html.twig") || f.endsWith(".blade.php")) ? "template file(s)" : "HTML file(s)";
1832
+ console.log(import_chalk2.default.green(`\u2713 Injected meta-tags in ${injectedCount} ${fileTypeLabel}`));
959
1833
  } catch (error) {
960
1834
  const errorMessage = error instanceof Error ? error.message : String(error);
961
1835
  const errorCode = detectErrorCode(error);
@@ -1271,25 +2145,255 @@ async function verifyCommand(options = {}) {
1271
2145
  }
1272
2146
  }
1273
2147
 
1274
- // src/index.ts
2148
+ // src/commands/remove.ts
1275
2149
  var import_universal_pwa_core9 = require("@julien-lin/universal-pwa-core");
2150
+ var import_chalk5 = __toESM(require("chalk"), 1);
2151
+ var import_fs6 = require("fs");
2152
+ var import_glob4 = require("glob");
2153
+ var import_path6 = require("path");
2154
+ init_environment_detector();
2155
+ var PWA_FILES_TO_REMOVE = [
2156
+ "manifest.json",
2157
+ "sw.js",
2158
+ "apple-touch-icon.png",
2159
+ "icon-72x72.png",
2160
+ "icon-96x96.png",
2161
+ "icon-128x128.png",
2162
+ "icon-144x144.png",
2163
+ "icon-152x152.png",
2164
+ "icon-192x192.png",
2165
+ "icon-384x384.png",
2166
+ "icon-512x512.png"
2167
+ ];
2168
+ function isPWAScript(content) {
2169
+ const lowerContent = content.toLowerCase();
2170
+ return lowerContent.includes("serviceworker") || lowerContent.includes("navigator.serviceworker") || lowerContent.includes("register") && lowerContent.includes("sw") || lowerContent.includes("sw.js") || lowerContent.includes("beforeinstallprompt") || lowerContent.includes("window.installpwa") || lowerContent.includes("ispwainstalled") || lowerContent.includes("ispwainstallable") || lowerContent.includes("deferredprompt");
2171
+ }
2172
+ async function removeMetaTags(htmlContent) {
2173
+ const parsed = (0, import_universal_pwa_core9.parseHTML)(htmlContent);
2174
+ const removed = [];
2175
+ if (!parsed.head) {
2176
+ return { html: htmlContent, removed: [] };
2177
+ }
2178
+ const head = parsed.head;
2179
+ if (!head.children) {
2180
+ head.children = [];
2181
+ }
2182
+ const tagsToRemove = [
2183
+ { type: "link", attr: "rel", value: "manifest", name: "manifest link" },
2184
+ { type: "meta", attr: "name", value: "theme-color", name: "theme-color meta tag" },
2185
+ { type: "link", attr: "rel", value: "apple-touch-icon", name: "apple-touch-icon link" },
2186
+ { type: "meta", attr: "name", value: "mobile-web-app-capable", name: "mobile-web-app-capable meta tag" }
2187
+ ];
2188
+ for (const tag of tagsToRemove) {
2189
+ const index = head.children.findIndex((child) => {
2190
+ return child.type === "tag" && child.tagName === tag.type && child.attribs?.[tag.attr] === tag.value;
2191
+ });
2192
+ if (index !== -1) {
2193
+ head.children.splice(index, 1);
2194
+ removed.push(tag.name);
2195
+ }
2196
+ }
2197
+ const findAndRemoveScripts = (node) => {
2198
+ if (!node?.children) return;
2199
+ for (let i = node.children.length - 1; i >= 0; i--) {
2200
+ const child = node.children[i];
2201
+ if (child.type === "tag" && child.tagName === "script") {
2202
+ const content = child.children?.[0]?.data || "";
2203
+ if (isPWAScript(content)) {
2204
+ node.children.splice(i, 1);
2205
+ removed.push("service worker registration script");
2206
+ }
2207
+ } else if (child.children) {
2208
+ findAndRemoveScripts(child);
2209
+ }
2210
+ }
2211
+ };
2212
+ if (parsed.document) {
2213
+ findAndRemoveScripts(parsed.document);
2214
+ }
2215
+ const { render: render2 } = await Promise.resolve().then(() => (init_esm3(), esm_exports));
2216
+ const html = render2(parsed.document);
2217
+ return { html, removed };
2218
+ }
2219
+ async function removeCommand(options = {}) {
2220
+ const {
2221
+ projectPath = process.cwd(),
2222
+ outputDir,
2223
+ skipHtmlRestore = false,
2224
+ skipFiles = false
2225
+ } = options;
2226
+ const result = {
2227
+ success: false,
2228
+ projectPath: (0, import_path6.resolve)(projectPath),
2229
+ outputDir: "",
2230
+ filesRemoved: [],
2231
+ htmlFilesRestored: 0,
2232
+ warnings: [],
2233
+ errors: []
2234
+ };
2235
+ let transaction = null;
2236
+ try {
2237
+ if (!(0, import_fs6.existsSync)(result.projectPath)) {
2238
+ const errorCode = "E1001" /* PROJECT_PATH_NOT_FOUND */;
2239
+ const errorMessage = formatError(errorCode, result.projectPath);
2240
+ result.errors.push(errorMessage);
2241
+ console.log(import_chalk5.default.red(`\u2717 ${errorMessage}`));
2242
+ return result;
2243
+ }
2244
+ console.log(import_chalk5.default.blue("\u{1F50D} Scanning project for PWA files..."));
2245
+ const scanResult = await (0, import_universal_pwa_core9.scanProject)({
2246
+ projectPath: result.projectPath,
2247
+ includeAssets: false,
2248
+ includeArchitecture: false
2249
+ });
2250
+ let finalOutputDir;
2251
+ if (outputDir) {
2252
+ finalOutputDir = outputDir.startsWith("/") || process.platform === "win32" && /^[A-Z]:/.test(outputDir) ? (0, import_path6.resolve)(outputDir) : (0, import_path6.join)(result.projectPath, outputDir);
2253
+ } else {
2254
+ const envDetection = detectEnvironment(result.projectPath, scanResult.framework.framework);
2255
+ const distDir = (0, import_path6.join)(result.projectPath, "dist");
2256
+ const publicDir = (0, import_path6.join)(result.projectPath, "public");
2257
+ if (envDetection.suggestedOutputDir === "dist" && (0, import_fs6.existsSync)(distDir)) {
2258
+ finalOutputDir = distDir;
2259
+ } else if (envDetection.suggestedOutputDir === "build" && (0, import_fs6.existsSync)((0, import_path6.join)(result.projectPath, "build"))) {
2260
+ finalOutputDir = (0, import_path6.join)(result.projectPath, "build");
2261
+ } else if ((0, import_fs6.existsSync)(publicDir)) {
2262
+ finalOutputDir = publicDir;
2263
+ } else if ((0, import_fs6.existsSync)(distDir)) {
2264
+ finalOutputDir = distDir;
2265
+ } else {
2266
+ finalOutputDir = publicDir;
2267
+ }
2268
+ }
2269
+ result.outputDir = finalOutputDir;
2270
+ console.log(import_chalk5.default.gray(` Output directory: ${finalOutputDir}`));
2271
+ transaction = new Transaction({
2272
+ projectPath: result.projectPath,
2273
+ outputDir: (0, import_path6.relative)(result.projectPath, finalOutputDir) || void 0,
2274
+ verbose: false
2275
+ });
2276
+ const pwaFiles = [...PWA_FILES_TO_REMOVE];
2277
+ if ((0, import_fs6.existsSync)(finalOutputDir)) {
2278
+ const workboxFiles = await (0, import_glob4.glob)("workbox-*.js", {
2279
+ cwd: finalOutputDir,
2280
+ absolute: true
2281
+ });
2282
+ pwaFiles.push(...workboxFiles.map((f) => (0, import_path6.relative)(finalOutputDir, f)));
2283
+ }
2284
+ if (!skipFiles) {
2285
+ console.log(import_chalk5.default.blue("\u{1F5D1}\uFE0F Removing PWA files..."));
2286
+ for (const file of pwaFiles) {
2287
+ const filePath = (0, import_path6.join)(finalOutputDir, file);
2288
+ if ((0, import_fs6.existsSync)(filePath)) {
2289
+ try {
2290
+ const fileRelative = (0, import_path6.relative)(result.projectPath, filePath);
2291
+ if (fileRelative && !fileRelative.startsWith("..")) {
2292
+ transaction.backupFile(fileRelative);
2293
+ }
2294
+ (0, import_fs6.rmSync)(filePath, { force: true });
2295
+ result.filesRemoved.push(file);
2296
+ console.log(import_chalk5.default.green(` \u2713 Removed ${file}`));
2297
+ } catch (error) {
2298
+ const errorMessage = error instanceof Error ? error.message : String(error);
2299
+ result.warnings.push(`Failed to remove ${file}: ${errorMessage}`);
2300
+ console.log(import_chalk5.default.yellow(` \u26A0 Failed to remove ${file}: ${errorMessage}`));
2301
+ }
2302
+ }
2303
+ }
2304
+ if (result.filesRemoved.length === 0) {
2305
+ console.log(import_chalk5.default.gray(" No PWA files found to remove"));
2306
+ } else {
2307
+ console.log(import_chalk5.default.green(`\u2713 Removed ${result.filesRemoved.length} file(s)`));
2308
+ }
2309
+ }
2310
+ if (!skipHtmlRestore) {
2311
+ console.log(import_chalk5.default.blue("\u{1F489} Restoring HTML files..."));
2312
+ const htmlFiles = await (0, import_glob4.glob)("**/*.html", {
2313
+ cwd: result.projectPath,
2314
+ ignore: ["**/node_modules/**", "**/.next/**", "**/.nuxt/**"],
2315
+ absolute: true
2316
+ });
2317
+ if (htmlFiles.length > 0) {
2318
+ console.log(import_chalk5.default.gray(` Found ${htmlFiles.length} HTML file(s)`));
2319
+ for (const htmlFile of htmlFiles) {
2320
+ try {
2321
+ const htmlRelative = (0, import_path6.relative)(result.projectPath, htmlFile);
2322
+ if (htmlRelative && !htmlRelative.startsWith("..")) {
2323
+ transaction.backupFile(htmlRelative);
2324
+ }
2325
+ const htmlContent = (0, import_fs6.readFileSync)(htmlFile, "utf-8");
2326
+ const { html: restoredHtml, removed } = await removeMetaTags(htmlContent);
2327
+ if (removed.length > 0) {
2328
+ (0, import_fs6.writeFileSync)(htmlFile, restoredHtml, "utf-8");
2329
+ result.htmlFilesRestored++;
2330
+ console.log(import_chalk5.default.green(` \u2713 Restored ${htmlRelative} (removed ${removed.length} PWA element(s))`));
2331
+ }
2332
+ } catch (error) {
2333
+ const errorMessage = error instanceof Error ? error.message : String(error);
2334
+ result.warnings.push(`Failed to restore ${htmlFile}: ${errorMessage}`);
2335
+ console.log(import_chalk5.default.yellow(` \u26A0 Failed to restore ${htmlFile}: ${errorMessage}`));
2336
+ }
2337
+ }
2338
+ if (result.htmlFilesRestored > 0) {
2339
+ console.log(import_chalk5.default.green(`\u2713 Restored ${result.htmlFilesRestored} HTML file(s)`));
2340
+ } else {
2341
+ console.log(import_chalk5.default.gray(" No PWA meta-tags found in HTML files"));
2342
+ }
2343
+ } else {
2344
+ console.log(import_chalk5.default.gray(" No HTML files found"));
2345
+ }
2346
+ }
2347
+ result.success = result.errors.length === 0;
2348
+ if (result.success) {
2349
+ if (transaction) {
2350
+ transaction.commit();
2351
+ }
2352
+ console.log(import_chalk5.default.green("\n\u2705 PWA removal completed successfully!"));
2353
+ console.log(import_chalk5.default.gray(` Files removed: ${result.filesRemoved.length}`));
2354
+ console.log(import_chalk5.default.gray(` HTML files restored: ${result.htmlFilesRestored}`));
2355
+ } else {
2356
+ if (transaction) {
2357
+ console.log(import_chalk5.default.yellow("\n\u{1F504} Rolling back changes due to errors..."));
2358
+ transaction.rollback();
2359
+ }
2360
+ console.log(import_chalk5.default.red(`
2361
+ \u274C PWA removal completed with ${result.errors.length} error(s)`));
2362
+ }
2363
+ return result;
2364
+ } catch (error) {
2365
+ const errorMessage = error instanceof Error ? error.message : String(error);
2366
+ const errorCode = "E9001" /* UNEXPECTED_ERROR */;
2367
+ const formattedError = formatError(errorCode, errorMessage);
2368
+ result.errors.push(formattedError);
2369
+ console.log(import_chalk5.default.red(`\u2717 ${formattedError}`));
2370
+ if (transaction) {
2371
+ console.log(import_chalk5.default.yellow("\n\u{1F504} Rolling back changes due to unexpected error..."));
2372
+ transaction.rollback();
2373
+ }
2374
+ return result;
2375
+ }
2376
+ }
2377
+
2378
+ // src/index.ts
2379
+ var import_universal_pwa_core10 = require("@julien-lin/universal-pwa-core");
1276
2380
 
1277
2381
  // src/prompts.ts
1278
2382
  var import_inquirer = __toESM(require("inquirer"), 1);
1279
- var import_fs7 = require("fs");
1280
- var import_path7 = require("path");
1281
- var import_chalk5 = __toESM(require("chalk"), 1);
2383
+ var import_fs8 = require("fs");
2384
+ var import_path8 = require("path");
2385
+ var import_chalk6 = __toESM(require("chalk"), 1);
1282
2386
  init_environment_detector();
1283
2387
 
1284
2388
  // src/utils/suggestions.ts
1285
- var import_fs6 = require("fs");
1286
- var import_path6 = require("path");
1287
- var import_glob4 = require("glob");
2389
+ var import_fs7 = require("fs");
2390
+ var import_path7 = require("path");
2391
+ var import_glob5 = require("glob");
1288
2392
  function suggestAppName(projectPath, _framework) {
1289
- const packageJsonPath = (0, import_path6.join)(projectPath, "package.json");
1290
- if ((0, import_fs6.existsSync)(packageJsonPath)) {
2393
+ const packageJsonPath = (0, import_path7.join)(projectPath, "package.json");
2394
+ if ((0, import_fs7.existsSync)(packageJsonPath)) {
1291
2395
  try {
1292
- const packageContent = JSON.parse((0, import_fs6.readFileSync)(packageJsonPath, "utf-8"));
2396
+ const packageContent = JSON.parse((0, import_fs7.readFileSync)(packageJsonPath, "utf-8"));
1293
2397
  const name = packageContent.displayName || packageContent.productName || packageContent.name;
1294
2398
  if (name && typeof name === "string" && name.trim().length > 0) {
1295
2399
  const cleanName = name.trim();
@@ -1305,10 +2409,10 @@ function suggestAppName(projectPath, _framework) {
1305
2409
  } catch {
1306
2410
  }
1307
2411
  }
1308
- const composerJsonPath = (0, import_path6.join)(projectPath, "composer.json");
1309
- if ((0, import_fs6.existsSync)(composerJsonPath)) {
2412
+ const composerJsonPath = (0, import_path7.join)(projectPath, "composer.json");
2413
+ if ((0, import_fs7.existsSync)(composerJsonPath)) {
1310
2414
  try {
1311
- const composerContent = JSON.parse((0, import_fs6.readFileSync)(composerJsonPath, "utf-8"));
2415
+ const composerContent = JSON.parse((0, import_fs7.readFileSync)(composerJsonPath, "utf-8"));
1312
2416
  if (composerContent.name && typeof composerContent.name === "string") {
1313
2417
  const parts = composerContent.name.split("/");
1314
2418
  const packageName = parts[parts.length - 1] || composerContent.name;
@@ -1356,8 +2460,8 @@ function suggestIconPath(projectPath) {
1356
2460
  "static/icon.png"
1357
2461
  ];
1358
2462
  for (const iconPath of commonIconPaths) {
1359
- const fullPath = (0, import_path6.join)(projectPath, iconPath);
1360
- if ((0, import_fs6.existsSync)(fullPath)) {
2463
+ const fullPath = (0, import_path7.join)(projectPath, iconPath);
2464
+ if ((0, import_fs7.existsSync)(fullPath)) {
1361
2465
  suggestions.push({
1362
2466
  path: iconPath,
1363
2467
  confidence: "high",
@@ -1366,7 +2470,7 @@ function suggestIconPath(projectPath) {
1366
2470
  }
1367
2471
  }
1368
2472
  try {
1369
- const imageFiles = (0, import_glob4.globSync)("**/*.{png,svg,jpg,jpeg,webp}", {
2473
+ const imageFiles = (0, import_glob5.globSync)("**/*.{png,svg,jpg,jpeg,webp}", {
1370
2474
  cwd: projectPath,
1371
2475
  ignore: ["**/node_modules/**", "**/dist/**", "**/build/**", "**/.git/**"],
1372
2476
  absolute: false,
@@ -1424,18 +2528,18 @@ function suggestColors(_projectPath, framework, _iconPath) {
1424
2528
  };
1425
2529
  }
1426
2530
  function suggestConfiguration(projectPath, framework, _architecture) {
1427
- const distDir = (0, import_path6.join)(projectPath, "dist");
1428
- const buildDir = (0, import_path6.join)(projectPath, "build");
1429
- const publicDir = (0, import_path6.join)(projectPath, "public");
2531
+ const distDir = (0, import_path7.join)(projectPath, "dist");
2532
+ const buildDir = (0, import_path7.join)(projectPath, "build");
2533
+ const publicDir = (0, import_path7.join)(projectPath, "public");
1430
2534
  let outputDir = "public";
1431
2535
  let reason = "Default output directory";
1432
- if ((0, import_fs6.existsSync)(distDir)) {
2536
+ if ((0, import_fs7.existsSync)(distDir)) {
1433
2537
  outputDir = "dist";
1434
2538
  reason = "dist/ directory detected (production build)";
1435
- } else if ((0, import_fs6.existsSync)(buildDir)) {
2539
+ } else if ((0, import_fs7.existsSync)(buildDir)) {
1436
2540
  outputDir = "build";
1437
2541
  reason = "build/ directory detected (production build)";
1438
- } else if ((0, import_fs6.existsSync)(publicDir)) {
2542
+ } else if ((0, import_fs7.existsSync)(publicDir)) {
1439
2543
  outputDir = "public";
1440
2544
  reason = "public/ directory detected";
1441
2545
  } else if (framework === "wordpress" || framework === "drupal" || framework === "joomla") {
@@ -1461,21 +2565,81 @@ function generateSuggestions(projectPath, framework, architecture, iconPath) {
1461
2565
  }
1462
2566
 
1463
2567
  // src/prompts.ts
2568
+ function validateName(input) {
2569
+ if (!input || input.trim().length === 0) {
2570
+ return "Le nom de l'application est requis";
2571
+ }
2572
+ if (input.length > 50) {
2573
+ return "Le nom doit faire moins de 50 caract\xE8res";
2574
+ }
2575
+ return true;
2576
+ }
2577
+ function validateShortName(input) {
2578
+ if (!input || input.trim().length === 0) {
2579
+ return "Le nom court est requis";
2580
+ }
2581
+ if (input.length > 12) {
2582
+ return "Le nom court doit faire maximum 12 caract\xE8res";
2583
+ }
2584
+ return true;
2585
+ }
2586
+ function filterShortName(input) {
2587
+ return input.trim().substring(0, 12);
2588
+ }
2589
+ function validateIconSource(input, projectPath) {
2590
+ if (!input || input.trim().length === 0) {
2591
+ return true;
2592
+ }
2593
+ const fullPath = (0, import_fs8.existsSync)(input) ? input : (0, import_path8.join)(projectPath, input);
2594
+ if (!(0, import_fs8.existsSync)(fullPath)) {
2595
+ const suggestions = [
2596
+ "public/logo.png",
2597
+ "src/assets/icon.png",
2598
+ "assets/logo.png",
2599
+ "logo.png"
2600
+ ].join(", ");
2601
+ return `Le fichier n'existe pas: ${input}
2602
+ Suggestions: ${suggestions}`;
2603
+ }
2604
+ const ext = (0, import_path8.extname)(fullPath).toLowerCase();
2605
+ const supportedFormats = [".png", ".jpg", ".jpeg", ".svg", ".webp"];
2606
+ if (!supportedFormats.includes(ext)) {
2607
+ return `Format non support\xE9: ${ext}. Utilisez PNG, JPG, SVG ou WebP`;
2608
+ }
2609
+ return true;
2610
+ }
2611
+ function validateHexColor(input, fieldName) {
2612
+ if (!input || input.trim().length === 0) {
2613
+ return true;
2614
+ }
2615
+ const trimmed = input.trim();
2616
+ if (!/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(trimmed)) {
2617
+ return `Format hex invalide (ex: ${fieldName === "themeColor" ? "#ffffff ou #fff" : "#000000 ou #000"})`;
2618
+ }
2619
+ return true;
2620
+ }
2621
+ function filterHexColor(input) {
2622
+ const trimmed = input.trim();
2623
+ if (/^#[A-Fa-f0-9]{3}$/.test(trimmed)) {
2624
+ return `#${trimmed[1]}${trimmed[1]}${trimmed[2]}${trimmed[2]}${trimmed[3]}${trimmed[3]}`;
2625
+ }
2626
+ return trimmed;
2627
+ }
1464
2628
  async function promptInitOptions(projectPath, framework, architecture = null) {
1465
2629
  const suggestions = generateSuggestions(projectPath, framework, architecture);
1466
2630
  const defaultName = suggestions.name.name;
1467
2631
  const defaultShortName = suggestions.name.shortName;
1468
2632
  const defaultIconSource = suggestions.icons.length > 0 ? suggestions.icons[0].path : void 0;
1469
2633
  const envDetection = detectEnvironment(projectPath, framework);
1470
- console.log(import_chalk5.default.blue("\n\u{1F4CB} Configuration PWA\n"));
2634
+ console.log(import_chalk6.default.blue("\n\u{1F4CB} Configuration PWA\n"));
1471
2635
  if (suggestions.name.confidence === "high") {
1472
- console.log(import_chalk5.default.gray(`\u{1F4A1} Suggestion: Nom "${suggestions.name.name}" (${suggestions.name.source})`));
2636
+ console.log(import_chalk6.default.gray(`\u{1F4A1} Suggestion: Nom "${suggestions.name.name}" (${suggestions.name.source})`));
1473
2637
  }
1474
2638
  if (suggestions.icons.length > 0) {
1475
- console.log(import_chalk5.default.gray(`\u{1F4A1} Suggestion: ${suggestions.icons.length} ic\xF4ne(s) trouv\xE9e(s)`));
2639
+ console.log(import_chalk6.default.gray(`\u{1F4A1} Suggestion: ${suggestions.icons.length} ic\xF4ne(s) trouv\xE9e(s)`));
1476
2640
  }
1477
2641
  if (suggestions.colors.confidence === "high") {
1478
- console.log(import_chalk5.default.gray(`\u{1F4A1} Suggestion: Couleurs bas\xE9es sur ${framework}`));
2642
+ console.log(import_chalk6.default.gray(`\u{1F4A1} Suggestion: Couleurs bas\xE9es sur ${framework}`));
1479
2643
  }
1480
2644
  const environmentAnswer = await import_inquirer.default.prompt([
1481
2645
  {
@@ -1498,7 +2662,7 @@ async function promptInitOptions(projectPath, framework, architecture = null) {
1498
2662
  }
1499
2663
  ]);
1500
2664
  if (envDetection.indicators.length > 0) {
1501
- console.log(import_chalk5.default.gray(` ${envDetection.indicators.join(", ")}`));
2665
+ console.log(import_chalk6.default.gray(` ${envDetection.indicators.join(", ")}`));
1502
2666
  }
1503
2667
  const configAnswers = await import_inquirer.default.prompt([
1504
2668
  {
@@ -1506,15 +2670,7 @@ async function promptInitOptions(projectPath, framework, architecture = null) {
1506
2670
  name: "name",
1507
2671
  message: "Nom de l'application:",
1508
2672
  default: defaultName,
1509
- validate: (input) => {
1510
- if (!input || input.trim().length === 0) {
1511
- return "Le nom de l'application est requis";
1512
- }
1513
- if (input.length > 50) {
1514
- return "Le nom doit faire moins de 50 caract\xE8res";
1515
- }
1516
- return true;
1517
- }
2673
+ validate: validateName
1518
2674
  },
1519
2675
  {
1520
2676
  type: "input",
@@ -1523,44 +2679,15 @@ async function promptInitOptions(projectPath, framework, architecture = null) {
1523
2679
  default: (answers) => {
1524
2680
  return answers.name ? answers.name.substring(0, 12) : defaultShortName;
1525
2681
  },
1526
- validate: (input) => {
1527
- if (!input || input.trim().length === 0) {
1528
- return "Le nom court est requis";
1529
- }
1530
- if (input.length > 12) {
1531
- return "Le nom court doit faire maximum 12 caract\xE8res";
1532
- }
1533
- return true;
1534
- },
1535
- filter: (input) => input.trim().substring(0, 12)
2682
+ validate: validateShortName,
2683
+ filter: filterShortName
1536
2684
  },
1537
2685
  {
1538
2686
  type: "input",
1539
2687
  name: "iconSource",
1540
2688
  message: "Chemin vers l'image source pour les ic\xF4nes:",
1541
2689
  default: defaultIconSource,
1542
- validate: (input) => {
1543
- if (!input || input.trim().length === 0) {
1544
- return true;
1545
- }
1546
- const fullPath = (0, import_fs7.existsSync)(input) ? input : (0, import_path7.join)(projectPath, input);
1547
- if (!(0, import_fs7.existsSync)(fullPath)) {
1548
- const suggestions2 = [
1549
- "public/logo.png",
1550
- "src/assets/icon.png",
1551
- "assets/logo.png",
1552
- "logo.png"
1553
- ].join(", ");
1554
- return `Le fichier n'existe pas: ${input}
1555
- Suggestions: ${suggestions2}`;
1556
- }
1557
- const ext = (0, import_path7.extname)(fullPath).toLowerCase();
1558
- const supportedFormats = [".png", ".jpg", ".jpeg", ".svg", ".webp"];
1559
- if (!supportedFormats.includes(ext)) {
1560
- return `Format non support\xE9: ${ext}. Utilisez PNG, JPG, SVG ou WebP`;
1561
- }
1562
- return true;
1563
- }
2690
+ validate: (input) => validateIconSource(input, projectPath)
1564
2691
  },
1565
2692
  {
1566
2693
  type: "confirm",
@@ -1576,46 +2703,16 @@ Suggestions: ${suggestions2}`;
1576
2703
  name: "themeColor",
1577
2704
  message: "Couleur du th\xE8me (hex, ex: #ffffff):",
1578
2705
  default: suggestions.colors.themeColor,
1579
- validate: (input) => {
1580
- if (!input || input.trim().length === 0) {
1581
- return true;
1582
- }
1583
- const trimmed = input.trim();
1584
- if (!/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(trimmed)) {
1585
- return "Format hex invalide (ex: #ffffff ou #fff)";
1586
- }
1587
- return true;
1588
- },
1589
- filter: (input) => {
1590
- const trimmed = input.trim();
1591
- if (/^#[A-Fa-f0-9]{3}$/.test(trimmed)) {
1592
- return `#${trimmed[1]}${trimmed[1]}${trimmed[2]}${trimmed[2]}${trimmed[3]}${trimmed[3]}`;
1593
- }
1594
- return trimmed;
1595
- }
2706
+ validate: (input) => validateHexColor(input, "themeColor"),
2707
+ filter: filterHexColor
1596
2708
  },
1597
2709
  {
1598
2710
  type: "input",
1599
2711
  name: "backgroundColor",
1600
2712
  message: "Couleur de fond (hex, ex: #000000):",
1601
2713
  default: suggestions.colors.backgroundColor,
1602
- validate: (input) => {
1603
- if (!input || input.trim().length === 0) {
1604
- return true;
1605
- }
1606
- const trimmed = input.trim();
1607
- if (!/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(trimmed)) {
1608
- return "Format hex invalide (ex: #000000 ou #000)";
1609
- }
1610
- return true;
1611
- },
1612
- filter: (input) => {
1613
- const trimmed = input.trim();
1614
- if (/^#[A-Fa-f0-9]{3}$/.test(trimmed)) {
1615
- return `#${trimmed[1]}${trimmed[1]}${trimmed[2]}${trimmed[2]}${trimmed[3]}${trimmed[3]}`;
1616
- }
1617
- return trimmed;
1618
- }
2714
+ validate: (input) => validateHexColor(input, "backgroundColor"),
2715
+ filter: filterHexColor
1619
2716
  }
1620
2717
  ]);
1621
2718
  configAnswers.skipIcons = !configAnswers.skipIcons;
@@ -1637,7 +2734,7 @@ Suggestions: ${suggestions2}`;
1637
2734
  // package.json
1638
2735
  var package_default = {
1639
2736
  name: "@julien-lin/universal-pwa-cli",
1640
- version: "1.3.2",
2737
+ version: "1.3.4",
1641
2738
  description: "CLI to transform any web project into a PWA",
1642
2739
  keywords: [
1643
2740
  "pwa",
@@ -1726,14 +2823,14 @@ program.command("init").description("Initialize PWA in your project").option("-p
1726
2823
  const hasOptions = options.name || options.shortName || options.iconSource || options.themeColor || options.backgroundColor || options.skipIcons !== void 0;
1727
2824
  let finalOptions = { ...options };
1728
2825
  if (!hasOptions) {
1729
- console.log(import_chalk6.default.blue("\u{1F50D} Scanning project..."));
1730
- const scanResult = await (0, import_universal_pwa_core9.scanProject)({
2826
+ console.log(import_chalk7.default.blue("\u{1F50D} Scanning project..."));
2827
+ const scanResult = await (0, import_universal_pwa_core10.scanProject)({
1731
2828
  projectPath,
1732
2829
  includeAssets: false,
1733
2830
  includeArchitecture: false
1734
2831
  });
1735
- console.log(import_chalk6.default.green(`\u2713 Framework detected: ${scanResult.framework.framework ?? "Unknown"}`));
1736
- console.log(import_chalk6.default.green(`\u2713 Architecture: ${scanResult.architecture.architecture}`));
2832
+ console.log(import_chalk7.default.green(`\u2713 Framework detected: ${scanResult.framework.framework ?? "Unknown"}`));
2833
+ console.log(import_chalk7.default.green(`\u2713 Architecture: ${scanResult.architecture.architecture}`));
1737
2834
  const promptAnswers = await promptInitOptions(
1738
2835
  projectPath,
1739
2836
  scanResult.framework.framework,
@@ -1748,10 +2845,10 @@ program.command("init").description("Initialize PWA in your project").option("-p
1748
2845
  finalOptions.outputDir = "build";
1749
2846
  } else {
1750
2847
  finalOptions.outputDir = "dist";
1751
- console.log(import_chalk6.default.yellow("\u26A0 dist/ directory not found. Run build first:"));
1752
- console.log(import_chalk6.default.gray(" npm run build"));
1753
- console.log(import_chalk6.default.gray(" or"));
1754
- console.log(import_chalk6.default.gray(" pnpm build"));
2848
+ console.log(import_chalk7.default.yellow("\u26A0 dist/ directory not found. Run build first:"));
2849
+ console.log(import_chalk7.default.gray(" npm run build"));
2850
+ console.log(import_chalk7.default.gray(" or"));
2851
+ console.log(import_chalk7.default.gray(" pnpm build"));
1755
2852
  }
1756
2853
  } else {
1757
2854
  finalOptions.outputDir = "public";
@@ -1783,7 +2880,7 @@ program.command("init").description("Initialize PWA in your project").option("-p
1783
2880
  });
1784
2881
  process.exit(result.success ? 0 : 1);
1785
2882
  } catch (error) {
1786
- console.error(import_chalk6.default.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
2883
+ console.error(import_chalk7.default.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
1787
2884
  process.exit(1);
1788
2885
  }
1789
2886
  });
@@ -1796,31 +2893,31 @@ program.command("preview").description("Preview PWA setup").option("-p, --projec
1796
2893
  });
1797
2894
  process.exit(result.success ? 0 : 1);
1798
2895
  } catch (error) {
1799
- console.error(import_chalk6.default.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
2896
+ console.error(import_chalk7.default.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
1800
2897
  process.exit(1);
1801
2898
  }
1802
2899
  });
1803
2900
  program.command("scan").description("Scan project and detect framework/architecture").option("-p, --project-path <path>", "Project path", process.cwd()).action(async (options) => {
1804
2901
  try {
1805
- console.log(import_chalk6.default.blue("\u{1F50D} Scanning project..."));
1806
- const result = await (0, import_universal_pwa_core9.scanProject)({
2902
+ console.log(import_chalk7.default.blue("\u{1F50D} Scanning project..."));
2903
+ const result = await (0, import_universal_pwa_core10.scanProject)({
1807
2904
  projectPath: options.projectPath ?? process.cwd(),
1808
2905
  includeAssets: true,
1809
2906
  includeArchitecture: true
1810
2907
  });
1811
- console.log(import_chalk6.default.green(`
2908
+ console.log(import_chalk7.default.green(`
1812
2909
  \u2713 Framework: ${result.framework.framework ?? "Unknown"}`));
1813
- console.log(import_chalk6.default.green(`\u2713 Architecture: ${result.architecture.architecture}`));
1814
- console.log(import_chalk6.default.green(`\u2713 Build Tool: ${result.architecture.buildTool ?? "Unknown"}`));
1815
- console.log(import_chalk6.default.gray(`
2910
+ console.log(import_chalk7.default.green(`\u2713 Architecture: ${result.architecture.architecture}`));
2911
+ console.log(import_chalk7.default.green(`\u2713 Build Tool: ${result.architecture.buildTool ?? "Unknown"}`));
2912
+ console.log(import_chalk7.default.gray(`
1816
2913
  Assets found:`));
1817
- console.log(import_chalk6.default.gray(` - JavaScript: ${result.assets.javascript.length} files`));
1818
- console.log(import_chalk6.default.gray(` - CSS: ${result.assets.css.length} files`));
1819
- console.log(import_chalk6.default.gray(` - Images: ${result.assets.images.length} files`));
1820
- console.log(import_chalk6.default.gray(` - Fonts: ${result.assets.fonts.length} files`));
2914
+ console.log(import_chalk7.default.gray(` - JavaScript: ${result.assets.javascript.length} files`));
2915
+ console.log(import_chalk7.default.gray(` - CSS: ${result.assets.css.length} files`));
2916
+ console.log(import_chalk7.default.gray(` - Images: ${result.assets.images.length} files`));
2917
+ console.log(import_chalk7.default.gray(` - Fonts: ${result.assets.fonts.length} files`));
1821
2918
  process.exit(0);
1822
2919
  } catch (error) {
1823
- console.error(import_chalk6.default.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
2920
+ console.error(import_chalk7.default.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
1824
2921
  process.exit(1);
1825
2922
  }
1826
2923
  });
@@ -1833,7 +2930,22 @@ program.command("verify").description("Verify PWA setup and check for missing fi
1833
2930
  });
1834
2931
  process.exit(result.success ? 0 : 1);
1835
2932
  } catch (error) {
1836
- console.error(import_chalk6.default.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
2933
+ console.error(import_chalk7.default.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
2934
+ process.exit(1);
2935
+ }
2936
+ });
2937
+ program.command("remove").description("Remove PWA files and restore HTML files").option("-p, --project-path <path>", "Project path", process.cwd()).option("-o, --output-dir <dir>", "Output directory (auto-detected if not specified)").option("--skip-html-restore", "Skip HTML file restoration").option("--skip-files", "Skip PWA file removal").option("--force", "Force removal without confirmation").action(async (options) => {
2938
+ try {
2939
+ const result = await removeCommand({
2940
+ projectPath: options.projectPath,
2941
+ outputDir: options.outputDir,
2942
+ skipHtmlRestore: options.skipHtmlRestore,
2943
+ skipFiles: options.skipFiles,
2944
+ force: options.force
2945
+ });
2946
+ process.exit(result.success ? 0 : 1);
2947
+ } catch (error) {
2948
+ console.error(import_chalk7.default.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
1837
2949
  process.exit(1);
1838
2950
  }
1839
2951
  });