{"version":3,"file":"static/js/c8f6cf2bbc91ae19276b.bundle.js","mappings":"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AS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,SAC7D,GAGEI,GAAmB,CAAC,IAAIJ,WAAW,CACvC,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,EAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,IAC7D,GAmSJ,SAjSA,YAKE,WAAY3jB,EAAoBqjB,GAAhC,MACE,YAAMA,IAAY,KAElB,EAAKrjB,OAASA,EAEd,IAAMgkB,EAAMhkB,EAAOuhB,UACb0C,EAAMjkB,EAAOuhB,UACnB,IAAa,IAATyC,IAAuB,IAATC,EAChB,MAAM,IAAItkB,MAAM,mCAAmCqkB,EAAG,KAAKC,GAE7D,GAAqB,IAAV,GAAND,GACH,MAAM,IAAIrkB,MACR,+CAA+CqkB,EAAG,KAAKC,GAG3D,KAAMD,GAAO,GAAKC,GAAO,IAAO,EAC9B,MAAM,IAAItkB,MAAM,+BAA+BqkB,EAAG,KAAKC,GAEzD,GAAU,GAANA,EACF,MAAM,IAAItkB,MAAM,kCAAkCqkB,EAAG,KAAKC,G,OAG5D,EAAKC,SAAW,EAChB,EAAKC,QAAU,E,EAmQnB,OA/R0B,aA+Bd,YAAArB,UAAV,WACE,IAAIrhB,EACAnW,EACE84B,EAAMhnB,KAAK4C,OAEbqkB,EAAMjnB,KAAKknB,QAAQ,GAMvB,GALU,EAAND,IACFjnB,KAAKwlB,KAAM,GAID,KAFZyB,IAAQ,GAER,CAgDA,IAAIE,EACAC,EACJ,GAAY,IAARH,EAEFE,EAAeT,GACfU,EAAgBT,OACX,IAAY,IAARM,EAuDT,MAAM,IAAI1kB,MAAM,sCArDhB,IAAM8kB,EAAcrnB,KAAKknB,QAAQ,GAAK,IAChCI,EAAetnB,KAAKknB,QAAQ,GAAK,EACjCK,EAAkBvnB,KAAKknB,QAAQ,GAAK,EAGpCM,EAAqB,IAAIngB,WAAWif,GAAej6B,QAErDd,OAAC,EACL,IAAKA,EAAI,EAAGA,EAAIg8B,IAAmBh8B,EACjCi8B,EAAmBlB,GAAe/6B,IAAMyU,KAAKknB,QAAQ,GAEvD,IAAMO,EAAiBznB,KAAK0nB,qBAAqBF,GAGjDt5B,EAAM,EACN3C,EAAI,EAMJ,IALA,IAAMo8B,EAAQN,EAAcC,EACtBM,EAAc,IAAIvgB,WAAWsgB,GAC/BE,OAAU,EACVC,OAAU,EACVC,OAAI,EACDx8B,EAAIo8B,GAAO,CAChB,IAAMnf,EAAOxI,KAAKgoB,QAAQP,GAC1B,GAAa,KAATjf,EACFqf,EAAa,EACbC,EAAa,EACbC,EAAO75B,OACF,GAAa,KAATsa,EACTqf,EAAa,EACbC,EAAa,EACbC,EAAO75B,EAAM,MACR,IAAa,KAATsa,EAIJ,CACLof,EAAYr8B,KAAO2C,EAAMsa,EACzB,SALAqf,EAAa,EACbC,EAAa,GACbC,EAAO75B,EAAM,EAOf,IADA,IAAI+5B,EAAejoB,KAAKknB,QAAQW,GAAcC,EACvCG,KAAiB,GACtBL,EAAYr8B,KAAOw8B,EAIvBZ,EAAennB,KAAK0nB,qBAClBE,EAAYlD,SAAS,EAAG2C,IAE1BD,EAAgBpnB,KAAK0nB,qBACnBE,EAAYlD,SAAS2C,EAAaM,IAStC,IAFA,IAAIO,GADJ7jB,EAASrE,KAAKqE,QACOA,EAAOhY,OAAS,EACjCgX,EAAMrD,KAAKulB,eACF,CACX,IAAI4C,EAAQnoB,KAAKgoB,QAAQb,GACzB,GAAIgB,EAAQ,IACN9kB,EAAM,GAAK6kB,IAEbA,GADA7jB,EAASrE,KAAK2lB,aAAatiB,EAAM,IAClBhX,QAEjBgY,EAAOhB,KAAS8kB,MALlB,CAQA,GAAc,MAAVA,EAEF,YADAnoB,KAAKulB,aAAeliB,GAKtB,IAAI+kB,GADJD,EAAQ3B,GADR2B,GAAS,OAEY,GACjBC,EAAQ,IACVA,EAAQpoB,KAAKknB,QAAQkB,IAEvBl6B,GAAe,MAARi6B,GAAkBC,EACzBD,EAAQnoB,KAAKgoB,QAAQZ,IAErBgB,GADAD,EAAQ1B,GAAW0B,KACF,IACL,IACVC,EAAQpoB,KAAKknB,QAAQkB,IAEvB,IAAMC,GAAgB,MAARF,GAAkBC,EAC5B/kB,EAAMnV,GAAOg6B,IAEfA,GADA7jB,EAASrE,KAAK2lB,aAAatiB,EAAMnV,IAClB7B,QAEjB,IAAK,IAAIi8B,EAAI,EAAGA,EAAIp6B,IAAOo6B,IAAKjlB,EAC9BgB,EAAOhB,GAAOgB,EAAOhB,EAAMglB,SApJ/B,CAEE,IAAIz1B,OAAC,EAEL,IAA6B,KAAxBA,EAAIo0B,EAAI7C,WACX,MAAM,IAAI5hB,MAAM,oCAElB,IAAIgmB,EAAW31B,EACf,IAA6B,KAAxBA,EAAIo0B,EAAI7C,WACX,MAAM,IAAI5hB,MAAM,oCAGlB,GADAgmB,GAAY31B,GAAK,GACY,KAAxBA,EAAIo0B,EAAI7C,WACX,MAAM,IAAI5hB,MAAM,oCAElB,IAAIimB,EAAQ51B,EACZ,IAA6B,KAAxBA,EAAIo0B,EAAI7C,WACX,MAAM,IAAI5hB,MAAM,oCAGlB,IADAimB,GAAS51B,GAAK,MACa,OAAX21B,KAAoC,IAAbA,GAA4B,IAAVC,GAEvD,MAAM,IAAIjmB,MAAM,iDAGlBvC,KAAK+mB,QAAU,EACf/mB,KAAK8mB,SAAW,EAEhB,IAAMvB,EAAevlB,KAAKulB,aAC1BlhB,EAASrE,KAAK2lB,aAAaJ,EAAegD,GAC1C,IAAMx5B,EAAMw2B,EAAegD,EAE3B,GADAvoB,KAAKulB,aAAex2B,EACH,IAAbw5B,GACsB,IAApBvB,EAAIpC,aACN5kB,KAAKwlB,KAAM,QAGb,IAAK,IAAIpa,EAAIma,EAAcna,EAAIrc,IAAOqc,EAAG,CACvC,IAA6B,KAAxBxY,EAAIo0B,EAAI7C,WAAmB,CAC9BnkB,KAAKwlB,KAAM,EACX,MAEFnhB,EAAO+G,GAAKxY,KA+GZ,YAAAs0B,QAAR,SAAgBuB,GAMd,IALA,IAII71B,EAJEo0B,EAAMhnB,KAAK4C,OACbkkB,EAAW9mB,KAAK8mB,SAChBC,EAAU/mB,KAAK+mB,QAGZD,EAAW2B,GAAM,CACtB,IAA6B,KAAxB71B,EAAIo0B,EAAI7C,WACX,MAAM,IAAI5hB,MAAM,gCAElBwkB,GAAWn0B,GAAKk0B,EAChBA,GAAY,EAMd,OAJAl0B,EAAIm0B,GAAY,GAAK0B,GAAQ,EAC7BzoB,KAAK+mB,QAAUA,GAAW0B,EAC1BzoB,KAAK8mB,SAAWA,GAAY2B,EAErB71B,GAGD,YAAAo1B,QAAR,SAAgBU,GAQd,IAPA,IAMI91B,EANEo0B,EAAMhnB,KAAK4C,OACX+kB,EAAQe,EAAM,GACdC,EAASD,EAAM,GACjB5B,EAAW9mB,KAAK8mB,SAChBC,EAAU/mB,KAAK+mB,QAGZD,EAAW6B,IACa,KAAxB/1B,EAAIo0B,EAAI7C,YAKb4C,GAAWn0B,GAAKk0B,EAChBA,GAAY,EAEd,IAAMte,EAAOmf,EAAMZ,GAAY,GAAK4B,GAAU,GACzB,iBAAVhB,GACTiB,QAAQC,IAAI,SAAUrgB,GAExB,IAAMsgB,EAAUtgB,GAAQ,GAClBugB,EAAiB,MAAPvgB,EAChB,GAAIsgB,EAAU,GAAKhC,EAAWgC,EAC5B,MAAM,IAAIvmB,MAAM,gCAIlB,OAFAvC,KAAK+mB,QAAUA,GAAW+B,EAC1B9oB,KAAK8mB,SAAWA,EAAWgC,EACpBC,GAGD,YAAArB,qBAAR,SAA6BsB,GAC3B,IAIIz9B,EAJE6f,EAAI4d,EAAQ38B,OAGds8B,EAAS,EAEb,IAAKp9B,EAAI,EAAGA,EAAI6f,IAAK7f,EACfy9B,EAAQz9B,GAAKo9B,IACfA,EAASK,EAAQz9B,IAOrB,IAFA,IAAMmC,EAAO,GAAKi7B,EACZhB,EAAQ,IAAIpB,WAAW74B,GAEvBQ,EAAM,EAAGsa,EAAO,EAAGuc,EAAO,EAC9B72B,GAAOy6B,IACLz6B,EAAKsa,IAAS,EAAGuc,IAAS,EAE5B,IAAK,IAAIkE,EAAM,EAAGA,EAAM7d,IAAK6d,EAC3B,GAAID,EAAQC,KAAS/6B,EAAK,CAExB,IAAIk6B,EAAQ,EACRvgC,EAAI2gB,EACR,IAAKjd,EAAI,EAAGA,EAAI2C,IAAO3C,EACrB68B,EAASA,GAAS,EAAU,EAAJvgC,EACxBA,IAAM,EAIR,IAAK0D,EAAI68B,EAAO78B,EAAImC,EAAMnC,GAAKw5B,EAC7B4C,EAAMp8B,GAAM2C,GAAO,GAAM+6B,IAEzBzgB,EAKR,MAAO,CAACmf,EAAOgB,IAEnB,EA/RA,CAA0B,IC8C1B,SAxJA,YAgBE,WACE/lB,EACAqjB,EACAiD,GAHF,MAKE,YAAMjD,IAAY,KAElB,EAAKrjB,OAASA,EACd,EAAKumB,WAAa,EAClB,EAAKC,WAAa,EAalB,IAXA,IAAMC,EAAuB,KACvBC,EAAW,CACfJ,YAAW,EACXK,WAAY,EACZC,SAAU,IACVC,iBAAkB,IAAIpiB,WAAWgiB,GACjCK,kBAAmB,IAAIC,YAAYN,GACnCO,oBAAqB,IAAID,YAAYN,GACrCQ,gBAAiB,IAAIxiB,WAAWgiB,GAChCS,sBAAuB,GAEhBv+B,EAAI,EAAGA,EAAI,MAAOA,EACzB+9B,EAASG,iBAAiBl+B,GAAKA,EAC/B+9B,EAASI,kBAAkBn+B,GAAK,E,OAElC,EAAK+9B,SAAWA,E,EA4GpB,OAtJwB,aA6CZ,YAAA5D,UAAV,WACE,IAIIn6B,EACAkrB,EACA9uB,EAJAoiC,EAAuBC,KAMrBV,EAAWtpB,KAAKspB,SACtB,GAAKA,EAAL,CAIA,IAAMJ,EAAcI,EAASJ,YACzBM,EAAWF,EAASE,SAClBC,EAAmBH,EAASG,iBAC5BC,EAAoBJ,EAASI,kBAC7BE,EAAsBN,EAASM,oBACjCL,EAAaD,EAASC,WACtBU,EAAWX,EAASW,SAClBJ,EAAkBP,EAASO,gBAC7BC,EAAwBR,EAASQ,sBAEjCI,EAAgB,EAChBC,EAAsBnqB,KAAKulB,aAC3BlhB,EAASrE,KAAK2lB,aAAa3lB,KAAKulB,aAAewE,GAEnD,IAAKx+B,EAAI,EAAGA,EA3BM,IA2BSA,IAAK,CAC9B,IAAMid,EAAOxI,KAAKoqB,SAASb,GACrBc,EAAUP,EAAwB,EACxC,IAAKthB,GAAQA,EAAO,IAClBqhB,EAAgB,GAAKrhB,EACrBshB,EAAwB,MACnB,MAAIthB,GAAQ,KAUZ,IAAa,MAATA,EAAc,CACvB+gB,EAAa,EACbC,EAAW,IACXM,EAAwB,EACxB,SAEA9pB,KAAKwlB,KAAM,SACJxlB,KAAKspB,SACZ,MAjBA,GAAI9gB,EAAOghB,EAET,IAAK/S,GADLqT,EAAwBJ,EAAkBlhB,IACT,EAAG7gB,EAAI6gB,EAAMiO,GAAK,EAAGA,IACpDoT,EAAgBpT,GAAKgT,EAAiB9hC,GACtCA,EAAIiiC,EAAoBjiC,QAG1BkiC,EAAgBC,KAA2BD,EAAgB,GA6B/D,GAhBIQ,IACFT,EAAoBJ,GAAYS,EAChCP,EAAkBF,GAAYE,EAAkBO,GAAsB,EACtER,EAAiBD,GAAYK,EAAgB,GAE7CN,IADAC,EAEcN,EAAgBM,EAAWN,EAAc,EACjDK,EAII,EAHJ3/B,KAAKiH,IACHjH,KAAKi/B,IAAIW,EAAWN,GAAe,kBAAqB,EACxD,KAGVe,EAAWzhB,EAGPuhB,GADJG,GAAiBJ,GACyB,CACxC,GACEC,GAxEY,UAyELA,EAAuBG,GAChC7lB,EAASrE,KAAK2lB,aAAa3lB,KAAKulB,aAAewE,GAEjD,IAAKtT,EAAI,EAAGA,EAAIqT,EAAuBrT,IACrCpS,EAAO8lB,KAAyBN,EAAgBpT,GAGpD6S,EAASE,SAAWA,EACpBF,EAASC,WAAaA,EACtBD,EAASW,SAAWA,EACpBX,EAASQ,sBAAwBA,EAEjC9pB,KAAKulB,aAAe4E,IAGd,YAAAC,SAAR,SAAiBhf,GAGf,IAFA,IAAIge,EAAappB,KAAKopB,WAClBD,EAAanpB,KAAKmpB,WACfC,EAAahe,GAAG,CACrB,IAAM9jB,EAAI0Y,KAAK4C,OAAOuhB,UACtB,IAAW,IAAP78B,EAEF,OADA0Y,KAAKwlB,KAAM,EACJ,KAET2D,EAAcA,GAAc,EAAK7hC,EACjC8hC,GAAc,EAIhB,OAFAppB,KAAKopB,WAAaA,GAAche,EAChCpL,KAAKmpB,WAAaA,EACVA,IAAeC,GAAgB,GAAKhe,GAAK,GAErD,EAtJA,CAAwB,IC2CxB,SA3CA,YAGE,WAAYxI,EAAoBqjB,GAAhC,MACE,YAAMA,IAAY,K,OAClB,EAAKrjB,OAASA,E,EAoClB,OAzC8B,aAQlB,YAAA8iB,UAAV,WAKE,IAAM4E,EAAetqB,KAAK4C,OAAO2hB,SAAS,GAC1C,IAAK+F,GAAgBA,EAAaj+B,OAAS,GAAyB,MAApBi+B,EAAa,GAC3DtqB,KAAKwlB,KAAM,MADb,CAKA,IAAInhB,EACAkhB,EAAevlB,KAAKulB,aACpBna,EAAIkf,EAAa,GACrB,GAAIlf,EAAI,KAIN,IAFA/G,EAASrE,KAAK2lB,aAAaJ,EAAena,EAAI,IACvCma,KAAkB+E,EAAa,GAClClf,EAAI,EAAG,CACT,IAAMmf,EAASvqB,KAAK4C,OAAO2hB,SAASnZ,GACpC/G,EAAOsB,IAAI4kB,EAAQhF,GACnBA,GAAgBna,OAEb,CACLA,EAAI,IAAMA,EACV,IAAMxY,EAAI03B,EAAa,GACvBjmB,EAASrE,KAAK2lB,aAAaJ,EAAena,EAAI,GAC9C,IAAK,IAAI7f,EAAI,EAAGA,EAAI6f,EAAG7f,IACrB8Y,EAAOkhB,KAAkB3yB,EAG7BoN,KAAKulB,aAAeA,IAExB,EAzCA,CAA8B,ICM9B,IAAMiF,GAAe,SACnB5nB,EACAD,EACA7V,GAEA,GAAI6V,IAAa,EAAQtc,GAAG,eAC1B,OAAO,IAAI,GAAYuc,GAEzB,GAAID,IAAa,EAAQtc,GAAG,aAAc,CACxC,IAAI6iC,EAAc,EAClB,GAAIp8B,aAAkB,EAAS,CAC7B,IAAM29B,EAAc39B,EAAOgZ,OAAO,EAAQzf,GAAG,gBACzCokC,aAAuB,IACzBvB,EAAcuB,EAAYjkC,YAG9B,OAAO,IAAI,GAAUoc,OAAQ/S,EAAWq5B,GAE1C,GAAIvmB,IAAa,EAAQtc,GAAG,iBAC1B,OAAO,IAAI,GAAcuc,GAE3B,GAAID,IAAa,EAAQtc,GAAG,kBAC1B,OAAO,IAAI,GAAeuc,GAE5B,GAAID,IAAa,EAAQtc,GAAG,mBAC1B,OAAO,IAAI,GAAgBuc,GAE7B,MAAM,IAAI,KAAyBD,EAAS2G,aAGjCohB,GAAqB,SAAC,G,IAAErf,EAAI,OAAEoB,EAAQ,WAC7C7J,EAAqB,IAAI,GAAO6J,GAE9BgC,EAASpD,EAAKvF,OAAO,EAAQzf,GAAG,WAChCskC,EAActf,EAAKvF,OAAO,EAAQzf,GAAG,gBAE3C,GAAIooB,aAAkB,EACpB7L,EAAS4nB,GACP5nB,EACA6L,EACAkc,QAEG,GAAIlc,aAAkB,EAC3B,IAAK,IAAIxgB,EAAM,EAAGC,EAAMugB,EAAO/gB,OAAQO,EAAMC,EAAKD,IAChD2U,EAAS4nB,GACP5nB,EACA6L,EAAO3I,OAAO7X,EAAK,GACnB08B,GAAgBA,EAAyB/kB,YAAY3X,EAAK,SAGzD,GAAMwgB,EACX,MAAM,IAAI,KAA0B,CAAC,EAAS,GAAWA,GAG3D,OAAO7L,GCqET,SAjFA,WAgBE,WACEgoB,EACAC,EACAC,GAEA9qB,KAAK4qB,KAAOA,EAEZ,IAAMG,EAAKF,MAAAA,EAAAA,EA3Ca,SAACD,GAC3B,IAAMI,EAAWJ,EAAKvgB,WAUtB,MAAO,CAAEkQ,KAAM,EAAG0Q,OAAQ,EAAGzQ,MAP3BwQ,EAASllB,OAAO,EAAG,GAAWtf,WAC9BwkC,EAASllB,OAAO,EAAG,GAAWtf,WAMW0kC,IAHzCF,EAASllB,OAAO,EAAG,GAAWtf,WAC9BwkC,EAASllB,OAAO,EAAG,GAAWtf,YAkCJ2kC,CAAoBP,GAE9C5qB,KAAK5R,MAAQ28B,EAAGvQ,MAAQuQ,EAAGxQ,KAC3Bva,KAAK3R,OAAS08B,EAAGG,IAAMH,EAAGE,OAC1BjrB,KAAK6qB,YAAcE,EACnB/qB,KAAK8qB,qBACHA,MAAAA,EAAAA,EAjC4B,SAChCC,GACyB,OAAC,EAAG,EAAG,EAAG,GAAIA,EAAGxQ,MAAOwQ,EAAGE,QA+BxBG,CAA0BL,GAkDxD,OA9Ee,EAAA9qB,IAAb,SACE2qB,EACAC,EACAC,G,+EAEA,MAAO,CAAP,EAAO,IAAIO,EAAgBT,EAAMC,EAAaC,WA0B1C,YAAA1qB,iBAAN,SAAuBC,EAAqBC,G,uGAG1C,GAFM,EAA0BN,KAAK4qB,KAAKra,oBAAlCpG,EAAQ,WAAEJ,EAAS,aAEtBI,EAAU,MAAM,IAAI,KAazB,OAZMmhB,EAAkBtrB,KAAKurB,eAAephB,GAEtC,EAA+BnK,KAAK6qB,YAAlCtQ,EAAI,OAAE0Q,EAAM,SAAEzQ,EAAK,QAAE0Q,EAAG,MAC1B3H,EAAUljB,EAAQQ,YAAYyqB,EAAiB,CACnDxqB,KAAM,UACNC,QAAS,OACTyqB,SAAU,EACV5c,KAAM,CAAC2L,EAAM0Q,EAAQzQ,EAAO0Q,GAC5Brc,OAAQ7O,KAAK8qB,qBACb/gB,UAAS,IAGPzJ,GACFD,EAAQyB,OAAOxB,EAAKijB,GACb,CAAP,EAAOjjB,IAEA,CAAP,EAAOD,EAAQiB,SAASiiB,WAMpB,YAAAgI,eAAR,SAAuB9e,GAIrB,IAHA,IAAMgf,EAAUpkB,WAAWhhB,GAAGke,EAAA,EAAUM,SAClCymB,EAAgC,GAE7Br9B,EAAM,EAAGC,EAAMue,EAAS/e,OAAQO,EAAMC,EAAKD,IAAO,CACzD,IAAM2U,EAAS6J,EAAS3G,OAAO7X,EAAK,GAEhCy9B,OAAO,EACX,GAAI9oB,aAAkB,EACpB8oB,EAAUhB,GAAmB9nB,GAAQwiB,aAChC,MAAIxiB,aAAkB,GAG3B,MAAM,IAAI,KAA4BA,GAFtC8oB,EAAU9oB,EAAOyK,uBAKnBie,EAAgB/hC,KAAKmiC,EAASD,GAGhC,OAAO,KAAmB,aAAIH,IAElC,EA/EA,GC9CA,IAQYK,GAoBAC,GAWAC,GAQAC,GA/CNC,GAAS,SACbC,EACAC,GAEA,QAAiBp8B,IAAbm8B,EACJ,OAAOC,EAASD,KAGlB,SAAYL,GAKV,oBAGA,4BAGA,wBAMA,gBAjBF,CAAYA,KAAAA,GAAqB,KAoBjC,SAAYC,GAEV,YAMA,YARF,CAAYA,KAAAA,GAAgB,KAW5B,SAAYC,GAEV,cAGA,0BALF,CAAYA,KAAAA,GAAY,KAQxB,SAAYC,GAEV,oBAMAA,EAAA,0CAMAA,EAAA,wCAdF,CAAYA,KAAAA,GAAM,KAsgBlB,SAleA,WAeE,WAAsBzgB,GACpBrL,KAAKqL,KAAOA,EAgdhB,OA7cY,YAAA6gB,WAAV,SAAqBl0B,GACnB,IAAMm0B,EAAYnsB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG2R,IAC9C,GAAIm0B,aAAqB,EAAS,OAAOA,GAIjC,YAAAC,WAAV,SAAqBp0B,GACnB,IAAMm0B,EAAYnsB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG2R,IAC9C,GAAIm0B,aAAqB,EAAS,OAAOA,GAK3C,YAAAE,YAAA,WACE,OAAOrsB,KAAKksB,WAAW,gBAIzB,YAAAI,YAAA,WACE,OAAOtsB,KAAKksB,WAAW,gBAIzB,YAAAK,aAAA,WACE,OAAOvsB,KAAKksB,WAAW,iBAIzB,YAAAM,UAAA,WACE,OAAOxsB,KAAKksB,WAAW,cAIzB,YAAAO,aAAA,WACE,OAAOzsB,KAAKksB,WAAW,iBAIzB,YAAAQ,gBAAA,WACE,OAAO1sB,KAAKksB,WAAW,oBAIzB,YAAAP,sBAAA,WACE,OAAO3rB,KAAKosB,WAAW,0BAIzB,YAAAO,UAAA,WACE,OAAO3sB,KAAKosB,WAAW,cAIzB,YAAAP,aAAA,WACE,OAAO7rB,KAAKosB,WAAW,iBAIzB,YAAAN,OAAA,WACE,OAAO9rB,KAAKosB,WAAW,WAIzB,YAAAQ,kBAAA,WACE,OAAO5sB,KAAKksB,WAAW,sBAIzB,YAAAW,eAAA,WACE,IAAMA,EAAiB7sB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,mBACnD,GAAIwmC,aAA0B,EAAU,OAAOA,GAKjD,YAAAC,UAAA,WACE,IAAMA,EAAY9sB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,cAC9C,GAAIymC,aAAqB,EAAW,OAAOA,GAS7C,YAAAC,eAAA,W,QACE,OAAoC,QAApC,EAAyB,QAAzB,EAAO/sB,KAAKqsB,qBAAa,eAAEtlB,mBAAS,UAQtC,YAAAimB,eAAA,W,QACE,OAAoC,QAApC,EAAyB,QAAzB,EAAOhtB,KAAKssB,qBAAa,eAAEvlB,mBAAS,UAStC,YAAAkmB,gBAAA,W,QACE,OAAqC,QAArC,EAA0B,QAA1B,EAAOjtB,KAAKusB,sBAAc,eAAExlB,mBAAS,UAQvC,YAAAmmB,aAAA,W,QACE,OAAkC,QAAlC,EAAuB,QAAvB,EAAOltB,KAAKwsB,mBAAW,eAAEzlB,mBAAS,UAQpC,YAAAomB,gBAAA,W,QACE,OAAqC,QAArC,EAA0B,QAA1B,EAAOntB,KAAKysB,sBAAc,eAAE1lB,mBAAS,UAUvC,YAAAqmB,mBAAA,W,QACE,OAAwC,QAAxC,EAA6B,QAA7B,EAAOptB,KAAK0sB,yBAAiB,eAAE3lB,mBAAS,UAQ1C,YAAAsmB,yBAAA,W,QACQC,EAAmC,QAA/B,EAAGttB,KAAK2rB,+BAAuB,eAAExiB,aAC3C,OAA0C,QAA1C,EAAO4iB,GAAOuB,EAAM3B,WAAsB,QAAIA,GAAsB4B,SAOtE,YAAAC,oBAAA,W,QACQC,EAA4B,QAAnB,EAAGztB,KAAK2sB,mBAAW,eAAExjB,aACpC,OAA0C,QAA1C,EAAO4iB,GAAO0B,EAAW7B,WAAiB,QAAIA,GAAiB8B,KAQjE,YAAAC,gBAAA,W,QACQC,EAA6B,QAAtB,EAAG5tB,KAAK6rB,sBAAc,eAAE1iB,aACrC,OAAoC,QAApC,EAAO4iB,GAAO6B,EAAS/B,WAAa,QAAIA,GAAagC,YAQvD,YAAAC,UAAA,W,MACQC,EAAsB,QAAhB,EAAG/tB,KAAK8rB,gBAAQ,eAAE3iB,aAC9B,OAAO4iB,GAAOgC,EAAQjC,KASxB,YAAAkC,qBAAA,W,MACE,OAA+B,QAA/B,EAAOhuB,KAAK4sB,2BAAmB,eAAE7lB,aAoBnC,YAAAknB,kBAAA,WACE,IAAMjgB,EAAMhO,KAAK6sB,iBACjB,IAAK7e,EAAK,MAAO,GAGjB,IADA,IAAMkgB,EAA0B,GACvB3iC,EAAI,EAAGA,EAAIyiB,EAAItgB,OAAQnC,GAAK,EAAG,CAKtC,IAAMsD,EAAQmf,EAAIlI,OAAOva,EAAG,GAAW/E,WACjCuI,EAAMif,EAAIlI,OAAOva,EAAI,EAAG,GAAW/E,WACzC0nC,EAAW3kC,KAAK,CAAEsF,MAAK,EAAEE,IAAG,IAG9B,OAAOm/B,GAQT,YAAAC,aAAA,W,QACE,OAAiC,QAAjC,EAAuB,QAAvB,EAAOnuB,KAAK8sB,mBAAW,eAAEtmC,kBAAQ,QAAM,GAQzC,YAAA4nC,eAAA,SAAeC,GACb,IAAMhC,EAAcrsB,KAAKqL,KAAKhL,QAAQmB,IAAI6sB,GAC1CruB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,eAAgBgmC,IAQ3C,YAAAiC,eAAA,SAAeC,GACb,IAAMjC,EAActsB,KAAKqL,KAAKhL,QAAQmB,IAAI+sB,GAC1CvuB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,eAAgBimC,IAS3C,YAAAkC,gBAAA,SAAgBC,GACd,IAAMlC,EAAevsB,KAAKqL,KAAKhL,QAAQmB,IAAIitB,GAC3CzuB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,gBAAiBkmC,IAQ5C,YAAAmC,aAAA,SAAaC,GACX,IAAMnC,EAAYxsB,KAAKqL,KAAKhL,QAAQmB,IAAImtB,GACxC3uB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,aAAcmmC,IAQzC,YAAAoC,gBAAA,SAAgBC,GACd,IAAMpC,EAAezsB,KAAKqL,KAAKhL,QAAQmB,IAAIqtB,GAC3C7uB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,gBAAiBomC,IAS5C,YAAAqC,mBAAA,SAAmBC,GACjB,IAAMrC,EAAkB1sB,KAAKqL,KAAKhL,QAAQmB,IAAIutB,GAC9C/uB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,mBAAoBqmC,IAyB/C,YAAAsC,yBAAA,SAAyBC,IACvB,QACEA,EACA,wBACAtD,IAEF,IAAM2B,EAAO,EAAQjnC,GAAG4oC,GACxBjvB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,yBAA0BinC,IAqBrD,YAAA4B,oBAAA,SAAoBC,IAClB,QAAcA,EAAkB,mBAAoBvD,IACpD,IAAM6B,EAAY,EAAQpnC,GAAG8oC,GAC7BnvB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,aAAconC,IAkBzC,YAAA2B,gBAAA,SAAgBC,IACd,QAAcA,EAAc,eAAgBxD,IAC5C,IAAM+B,EAAU,EAAQvnC,GAAGgpC,GAC3BrvB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,gBAAiBunC,IAkB5C,YAAA0B,UAAA,SAAUvB,IACR,QAAcA,EAAQ,SAAUjC,IAChC,IAAMyD,EAAM,EAAQlpC,GAAG0nC,GACvB/tB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,UAAWkpC,IAgBtC,YAAAC,qBAAA,SAAqBC,GACnB,IAAM7C,EAAoB5sB,KAAKqL,KAAKhL,QAAQmB,IAAIiuB,GAChDzvB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,qBAAsBumC,IA6BjD,YAAA8C,kBAAA,SAAkBC,GACXpjC,MAAMC,QAAQmjC,KAAiBA,EAAiB,CAACA,IAGtD,IADA,IAAMC,EAAsB,GACnB3hC,EAAM,EAAGC,EAAMyhC,EAAetjC,OAAQ4B,EAAMC,EAAKD,IACxD2hC,EAAUrmC,KAAKomC,EAAe1hC,GAAKY,OACnC+gC,EAAUrmC,KAAKomC,EAAe1hC,GAAKc,MAGrC,OAAa6gC,EAAW,iBAAkB,CAAC,WAE3C,IAAM1B,EAAaluB,KAAKqL,KAAKhL,QAAQmB,IAAIouB,GACzC5vB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,kBAAmB6nC,IAQ9C,YAAA2B,aAAA,SAAaC,IACX,QAAYA,EAAW,YAAa,EAAGC,OAAOC,YAC9C,QAAcF,EAAW,aACzB,IAAMhD,EAAY9sB,KAAKqL,KAAKhL,QAAQmB,IAAIsuB,GACxC9vB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,aAAcymC,IAzdlC,EAAAmD,SAAW,SAAC5kB,GACjB,WAAI6kB,EAAkB7kB,IAGjB,EAAAkE,OAAS,SAAClP,GAEf,OAAO,IAAI6vB,EADE7vB,EAAQmB,IAAI,MAsd7B,EAheA,GCjFA,IAAM2uB,GAAU,sEAuJhB,SArJA,WAIE,WAAsB9kB,EAAe/K,GACnCN,KAAKqL,KAAOA,EACZrL,KAAKM,IAAMA,EA6If,OA1IE,YAAA1Y,EAAA,WACE,OAAOoY,KAAKqL,KAAKzF,YAAY,EAAQvf,GAAG,KAAM63B,GAAA,EAAW7D,EAAA,IAG3D,YAAA+V,GAAA,WACE,IAAMrgB,EAAc/P,KAAK6P,wBAAwB,EAAQxpB,GAAG,OAC5D,OAAO2Z,KAAKqL,KAAKhL,QAAQuF,YAAYmK,EAAa,IAGpD,YAAA1nB,EAAA,WACE,IAAMgoC,EAAarwB,KAAK6P,wBAAwB,EAAQxpB,GAAG,MAC3D,OAAO2Z,KAAKqL,KAAKhL,QAAQyF,OAAOuqB,IAGlC,YAAAC,KAAA,WACE,OAAOtwB,KAAKqL,KAAKzF,YAAY,EAAQvf,GAAG,QAAS,IAOnD,YAAAkqC,GAAA,WACE,IAAMC,EAAKxwB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,OACvC,GAAImqC,aAActS,GAAA,GAAasS,aAAcnW,EAAA,EAAc,OAAOmW,GAIpE,YAAAC,QAAA,SAAQC,GACN1wB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,QAAS2Z,KAAKqL,KAAKhL,QAAQmB,IAAIkvB,KAG1D,YAAAC,UAAA,WAKE,IAAMvgB,EAAYpQ,KAAKqL,KAAKre,IAAI,EAAQ3G,GAAG,WAC3C,GAAI+pB,aAAqB,EAEvB,OAAO,IAAIwgB,EADI5wB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,UAAW,GACtB+pB,IAMpC,YAAAD,UAAA,SAAU4B,GACHA,EACA/R,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,UAAW0rB,GAD5B/R,KAAKqL,KAAKK,OAAO,EAAQrlB,GAAG,YAI3C,YAAAwqC,sBAAA,WACE,IAAM9e,EAAS/R,KAAK2wB,YACpB,OAAK5e,EACKA,EAAO8e,wBAAuB,IAAI7wB,KAAK8wB,iBAD7B9wB,KAAK8wB,kBAI3B,YAAAA,eAAA,W,MACE,OAAe,QAAf,EAAO9wB,KAAKpY,WAAG,eAAEuhB,cAGnB,YAAA4nB,eAAA,SAAeC,GACRA,EACAhxB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAMg0B,EAAA,EAAa1Y,SAASqvB,IADxChxB,KAAKqL,KAAKK,OAAO,EAAQrlB,GAAG,OAIhD,YAAA4qC,qBAAA,SAAqBC,GACnBlxB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAO63B,GAAA,EAAU73B,GAAG6qC,KAG/C,YAAAC,qBAAA,WACE,IAAMZ,EAAKvwB,KAAKuwB,KAEhB,OAAIA,aAAclW,EAAA,EACTkW,EAAGpnB,aAGLonB,MAAAA,OAAE,EAAFA,EAAIjnB,YAGb,YAAA8nB,YAAA,SAAY5/B,G,MACJpL,EAAmC,QAA/B,EAAG4Z,KAAK6wB,+BAAuB,QAAI,GAEvCL,EAAKxwB,KAAKmxB,uBAChB,IAAKX,EAAI,MAAM,IAAI,KAAoBpqC,GAEvC,IAAMirC,GAAU,QAAcb,EAAIL,IAClC,IAAKkB,EAAQC,MAAO,MAAM,IAAI,KAAuBlrC,GAErD,IAAMmrC,EAAUf,EAAGrqB,MAAM,EAAGkrB,EAAQhuB,IAAMguB,EAAQC,MAAM,GAAGjlC,QACrDmlC,EAAQH,EAAQhuB,KAAOmtB,EAAGnkC,OAASmkC,EAAGrqB,MAAMkrB,EAAQhuB,KAAO,GAE3DouB,EAAgBF,EAAO,KADZF,EAAQC,MAAM,GACW,IAAI9/B,EAAQ,OAAOggC,EAE7DxxB,KAAKixB,qBAAqBQ,IAG5B,YAAAC,SAAA,W,QACE,OAA0B,QAA1B,EAAgB,QAAhB,EAAO1xB,KAAKowB,YAAI,eAAE5pC,kBAAQ,QAAM,GAGlC,YAAAmrC,SAAA,SAASlS,GACPzf,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAO,EAAUA,GAAGo5B,KAG/C,YAAAmS,QAAA,SAAQC,GAEN,OAA0B,IADZ7xB,KAAK0xB,WACHG,IAGlB,YAAAC,QAAA,SAAQD,GACN,IAAMpS,EAAQzf,KAAK0xB,WACnB1xB,KAAK2xB,SAASlS,EAAQoS,IAGxB,YAAAE,UAAA,SAAUF,GACR,IAAMpS,EAAQzf,KAAK0xB,WACnB1xB,KAAK2xB,SAASlS,GAASoS,IAGzB,YAAAG,UAAA,SAAUH,EAAcI,GAClBA,EAAQjyB,KAAK8xB,QAAQD,GACpB7xB,KAAK+xB,UAAUF,IAGtB,YAAAhiB,wBAAA,SAAwBzpB,GACtB,IAAI4pB,EAIJ,OAHAhQ,KAAKiQ,QAAO,SAACC,GACNF,IAAWA,EAAYE,EAAK7E,KAAKre,IAAI5G,OAErC4pB,GAGT,YAAAC,OAAA,SAAOyB,GACLA,EAAQ1R,MACR,IAAM+R,EAAS/R,KAAK2wB,YAChB5e,GAAQA,EAAO9B,OAAOyB,IAE9B,EAnJA,GCaA,SAzBA,WAKE,WAAsBrG,GACpBrL,KAAKqL,KAAOA,EAiBhB,OAdE,YAAAiT,EAAA,WACE,IAAMA,EAAIte,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,MACtC,GAAIi4B,aAAa,EAAW,OAAOA,GAIrC,YAAA4T,SAAA,W,QACE,OAAyB,QAAzB,EAAe,QAAf,EAAOlyB,KAAKse,WAAG,eAAE93B,kBAAQ,QAAM,GAGjC,YAAA2rC,SAAA,SAAS/jC,GACP,IAAMkwB,EAAIte,KAAKqL,KAAKhL,QAAQmB,IAAIpT,GAChC4R,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAMi4B,IAlB1B,EAAA2R,SAAW,SAAC5kB,GAA+B,WAAI+mB,EAAY/mB,IAoBpE,EAvBA,GC8IA,SA5IA,WAKE,WAAsBA,GACpBrL,KAAKqL,KAAOA,EAoIhB,OAhIE,YAAAgnB,KAAA,WACE,OAAOryB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,QAAS,IAG9C,YAAAisC,GAAA,WACE,OAAOtyB,KAAKqL,KAAKzF,YAAY,EAAQvf,GAAG,MAAO,IAGjD,YAAAob,EAAA,WACE,IAAMsO,EAAc/P,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,MAChD,OAAO2Z,KAAKqL,KAAKhL,QAAQuF,YAAYmK,EAAa,IAGpD,YAAAwiB,aAAA,W,MACQF,EAAOryB,KAAKqyB,OAClB,OAAwB,QAAxB,EAAOA,MAAAA,OAAI,EAAJA,EAAMtsB,qBAAW,QAAM,CAAEtd,EAAG,EAAGC,EAAG,EAAG0F,MAAO,EAAGC,OAAQ,IAGhE,YAAAmkC,aAAA,SAAaC,GACH,IAAAhqC,EAAwBgqC,EAAI,EAAzB/pC,EAAqB+pC,EAAI,EAAtBrkC,EAAkBqkC,EAAI,MAAfpkC,EAAWokC,EAAI,OAC9BJ,EAAOryB,KAAKqL,KAAKhL,QAAQmB,IAAI,CAAC/Y,EAAGC,EAAGD,EAAI2F,EAAO1F,EAAI2F,IACzD2R,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,QAASgsC,IAGpC,YAAAK,mBAAA,WACE,IAAMC,EAAK3yB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,OACvC,GAAIssC,aAAc,EAAS,OAAOA,GAIpC,YAAAC,mBAAA,SAAmBx+B,GACjB4L,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAO+N,IAGlC,YAAAy+B,eAAA,SAAeC,GACb9yB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAOysC,IAGlC,YAAAC,SAAA,WACE,IAAIT,EAAKtyB,KAAKsyB,KAKd,OAJKA,IACHA,EAAKtyB,KAAKqL,KAAKhL,QAAQmB,IAAI,IAC3BxB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAOisC,IAE3BA,GAGT,YAAAU,oBAAA,WACE,IACMC,EADKjzB,KAAK+yB,WACH/lC,IAAI,EAAQ3G,GAAG,MAC5B,GAAI4sC,aAAa,GAAUA,aAAa,EAAS,OAAOA,EAExD,MAAM,IAAI1wB,MAAM,uBAAsB0wB,MAAAA,OAAC,EAADA,EAAGvwB,YAAYtc,QAIvD,YAAA8sC,oBAAA,SAAoBhC,GACPlxB,KAAK+yB,WACbptB,IAAI,EAAQtf,GAAG,KAAM6qC,IAI1B,YAAAiC,sBAAA,SAAsBjC,GACTlxB,KAAK+yB,WACbptB,IAAI,EAAQtf,GAAG,KAAM6qC,IAI1B,YAAAkC,kBAAA,SAAkBlC,GACLlxB,KAAK+yB,WACbptB,IAAI,EAAQtf,GAAG,KAAM6qC,IAG1B,YAAAmC,yBAAA,WACE,IAAMf,EAAKtyB,KAAKsyB,KAChBA,MAAAA,GAAAA,EAAI5mB,OAAO,EAAQrlB,GAAG,OAGxB,YAAAitC,qBAAA,WACE,IAAMhB,EAAKtyB,KAAKsyB,KAChBA,MAAAA,GAAAA,EAAI5mB,OAAO,EAAQrlB,GAAG,OAGxB,YAAAktC,eAAA,WAOE,IAAMjB,EAAKtyB,KAAKsyB,KAEhB,GAAKA,EAML,MAAO,CAAEkB,OAJClB,EAAGxsB,OAAO,EAAQzf,GAAG,KAAM,EAAS,GAI1BotC,SAHVnB,EAAG1sB,YAAY,EAAQvf,GAAG,KAAM,EAAS,GAGlBqtC,KAFvBpB,EAAG1sB,YAAY,EAAQvf,GAAG,KAAM,EAAS,KAKrD,YAAAqrC,SAAA,W,QACE,OAAyB,QAAzB,EAAe,QAAf,EAAO1xB,KAAKyB,WAAG,eAAEjb,kBAAQ,QAAM,GAGjC,YAAAmrC,SAAA,SAASlS,GACPzf,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAM,EAAUA,GAAGo5B,KAG9C,YAAAmS,QAAA,SAAQC,GAEN,OAA0B,IADZ7xB,KAAK0xB,WACHG,IAGlB,YAAAC,QAAA,SAAQD,GACN,IAAMpS,EAAQzf,KAAK0xB,WACnB1xB,KAAK2xB,SAASlS,EAAQoS,IAGxB,YAAAE,UAAA,SAAUF,GACR,IAAMpS,EAAQzf,KAAK0xB,WACnB1xB,KAAK2xB,SAASlS,GAASoS,IAGzB,YAAAG,UAAA,SAAUH,EAAcI,GAClBA,EAAQjyB,KAAK8xB,QAAQD,GACpB7xB,KAAK+xB,UAAUF,IArIf,EAAA5B,SAAW,SAAC5kB,GAAiC,WAAIsoB,EAActoB,IAuIxE,EA1IA,GC6HA,SA7HA,WAME,WAAsBA,GACpBrL,KAAKqL,KAAOA,EAoHhB,OAjHE,YAAAuoB,EAAA,WACE,IAAMA,EAAI5zB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,MACtC,GAAIutC,aAAa,EAAW,OAAOA,GAIrC,YAAAC,GAAA,WACE,IAAMA,EAAK7zB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,OACvC,GAAIwtC,aAAc,EAAU,OAAOA,GAIrC,YAAAC,GAAA,WACE,IAAMA,EAAK9zB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,OACvC,GAAIytC,aAAc,EAAU,OAAOA,GAIrC,YAAAC,GAAA,WACE,IAAMA,EAAK/zB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,OACvC,GAAI0tC,aAAc1Z,EAAA,GAAgB0Z,aAAc7V,GAAA,EAAW,OAAO6V,GAIpE,YAAAC,GAAA,WACE,IAAMA,EAAKh0B,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,OACvC,GAAI2tC,aAAc3Z,EAAA,GAAgB2Z,aAAc9V,GAAA,EAAW,OAAO8V,GAIpE,YAAAC,GAAA,WACE,IAAMA,EAAKj0B,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,OACvC,GAAI4tC,aAAc5Z,EAAA,GAAgB4Z,aAAc/V,GAAA,EAAW,OAAO+V,GAIpE,YAAAC,YAAA,W,MACE,OAAe,QAAf,EAAOl0B,KAAK4zB,WAAG,eAAEptC,YAGnB,YAAA2tC,eAAA,WACE,IAAMN,EAAK7zB,KAAK6zB,KAEhB,GAAKA,EAAL,CAGA,IADA,IAAMO,EAAuB,GACpBnmC,EAAM,EAAGC,EAAM2lC,MAAAA,OAAE,EAAFA,EAAInmC,OAAQO,EAAMC,EAAKD,IAAO,CACpD,IAAMomC,EAAYR,EAAG7mC,IAAIiB,GACrBomC,aAAqB,GAAWD,EAAW7qC,KAAK8qC,EAAU7tC,YAGhE,OAAO4tC,IAGT,YAAAE,mBAAA,WACE,IAAMR,EAAK9zB,KAAK8zB,KAEhB,GAAKA,EAAL,CAGA,IADA,IAAMM,EAAuB,GACpBnmC,EAAM,EAAGC,EAAM4lC,MAAAA,OAAE,EAAFA,EAAIpmC,OAAQO,EAAMC,EAAKD,IAAO,CACpD,IAAMomC,EAAYP,EAAG9mC,IAAIiB,GACrBomC,aAAqB,GAAWD,EAAW7qC,KAAK8qC,EAAU7tC,YAGhE,OAAO4tC,IAGT,YAAAG,YAAA,WACE,IAAMR,EAAK/zB,KAAK+zB,KACVC,EAAKh0B,KAAKg0B,KACVC,EAAKj0B,KAAKi0B,KAEhB,MAAO,CACLT,OAAQO,MAAAA,OAAE,EAAFA,EAAI5qB,aACZsqB,SAAUO,MAAAA,OAAE,EAAFA,EAAI7qB,aACduqB,KAAMO,MAAAA,OAAE,EAAFA,EAAI9qB,eAId,YAAAqrB,YAAA,SAAYpkC,GACV,IAAMwjC,EAAI5zB,KAAKqL,KAAKhL,QAAQmB,IAAIpR,GAChC4P,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAMutC,IAGjC,YAAAa,eAAA,SAAejnC,GACb,IAAMqmC,EAAK7zB,KAAKqL,KAAKhL,QAAQmB,IAAIhU,GACjCwS,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAOwtC,IAGlC,YAAAa,mBAAA,SAAmBlnC,GACjB,IAAMsmC,EAAK9zB,KAAKqL,KAAKhL,QAAQmB,IAAIhU,GACjCwS,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAOytC,IAGlC,YAAAa,YAAA,SAAYC,GACV,IAAMb,EAAK1Z,EAAA,EAAa1Y,SAASizB,EAASpB,QAG1C,GAFAxzB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAO0tC,GAE5Ba,EAASnB,SAAU,CACrB,IAAMO,EAAK3Z,EAAA,EAAa1Y,SAASizB,EAASnB,UAC1CzzB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAO2tC,QAEhCh0B,KAAKqL,KAAKK,OAAO,EAAQrlB,GAAG,OAG9B,GAAIuuC,EAASlB,KAAM,CACjB,IAAMO,EAAK5Z,EAAA,EAAa1Y,SAASizB,EAASlB,MAC1C1zB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAO4tC,QAEhCj0B,KAAKqL,KAAKK,OAAO,EAAQrlB,GAAG,QArHzB,EAAA4pC,SAAW,SAAC5kB,GACjB,WAAIwpB,EAA0BxpB,IAuHlC,EA3HA,GCwGA,SArGA,yB,+CAmGA,OAnGkC,aAchC,YAAAypB,GAAA,WACE,IAAMA,EAAK90B,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,OACvC,GAAIyuC,aAAc,EAAS,OAAOA,GAIpC,YAAAC,GAAA,WACE,IAAMA,EAAK/0B,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,OACvC,GAAI0uC,aAAc,EAAS,OAAOA,GAIpC,YAAAxE,GAAA,WACE,IAAMC,EAAKxwB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,OACvC,GAAImqC,aAActS,GAAA,GAAasS,aAAcnW,EAAA,EAAc,OAAOmW,GAIpE,YAAA/rB,EAAA,WACE,IAAMA,EAAIzE,KAAKqL,KAAKre,IAAI,EAAQ3G,GAAG,MACnC,GAAIoe,aAAa,EAAQ,OAAOA,GAIlC,YAAAuwB,KAAA,SAAKpK,GACH5qB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAMukC,IAGjC,YAAAqG,qBAAA,SAAqBC,GACnBlxB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAO63B,GAAA,EAAU73B,GAAG6qC,KAG/C,YAAAC,qBAAA,WACE,IAAMZ,EAAKvwB,KAAKuwB,KAEhB,OAAIA,aAAclW,EAAA,EACTkW,EAAGpnB,aAGLonB,MAAAA,OAAE,EAAFA,EAAIjnB,YAGb,YAAA2rB,6BAAA,WACE,IAAMH,EAAK90B,KAAK80B,KAChB,GAAIA,EAAI,OAAO,GAA0B7E,SAAS6E,IAIpD,YAAAI,qCAAA,WACE,IAAMJ,EAAK90B,KAAK80B,KAChB,GAAIA,EAAI,OAAO,GAA0B7E,SAAS6E,GAElD,IAAMK,EAAK,GAA0BlF,SAASjwB,KAAKqL,KAAKhL,QAAQmB,IAAI,KAEpE,OADAxB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAO8uC,EAAG9pB,MAC5B8pB,GAGT,YAAAC,eAAA,WACE,IAAML,EAAK/0B,KAAK+0B,KAChB,GAAIA,EAAI,OAAO,GAAY9E,SAAS8E,IAItC,YAAAM,uBAAA,WACE,IAAMN,EAAK/0B,KAAK+0B,KAChB,GAAIA,EAAI,OAAO,GAAY9E,SAAS8E,GAEpC,IAAMO,EAAK,GAAYrF,SAASjwB,KAAKqL,KAAKhL,QAAQmB,IAAI,KAEtD,OADAxB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,MAAOivC,EAAGjqB,MAC5BiqB,GAGT,YAAAC,WAAA,W,MACQ/B,EAA8B,QAAxB,EAAGxzB,KAAKuzB,wBAAgB,eAAEC,OAEtC,GAAIA,aAAkB,EAEpB,IADA,IAAMloB,EAAOkoB,EAAOloB,OACXrd,EAAM,EAAGC,EAAMod,EAAKjf,OAAQ4B,EAAMC,EAAKD,IAAO,CACrD,IAAM+J,EAAMsT,EAAKrd,GACjB,GAAI+J,IAAQ,EAAQ3R,GAAG,OAAQ,OAAO2R,IA5FrC,EAAAi4B,SAAW,SAAC5kB,GACjB,WAAImqB,EAAoBnqB,IAEnB,EAAAkE,OAAS,SAAClP,EAAqB0R,GAOpC,OAAO,IAAIyjB,EANEn1B,EAAQmB,IAAI,CACvBV,KAAM,QACNC,QAAS,SACTsxB,KAAM,CAAC,EAAG,EAAG,EAAG,GAChBjoB,OAAQ2H,MA0Fd,EAnGA,CAAkC,IC4DlC,SA/DA,yB,+CA6DA,OA7D8B,aAI5B,YAAA0jB,GAAA,WACE,IAAMC,EAAY11B,KAAK6P,wBAAwB,EAAQxpB,GAAG,OAC1D,OAAO2Z,KAAKqL,KAAKhL,QAAQyF,OAAO4vB,EAAW,IAG7C,YAAAC,WAAA,WACE,IAAMC,EAAW51B,KAAKswB,OAGtB,IAAKsF,EAAU,MAAO,CAAC,GAAoB3F,SAASjwB,KAAKqL,OAIzD,IADA,IAAMwqB,EAAU,IAAItpC,MAA2BqpC,EAASloC,QAC/CO,EAAM,EAAGC,EAAM0nC,EAASloC,OAAQO,EAAMC,EAAKD,IAAO,CACzD,IAAMod,EAAOuqB,EAAS9vB,OAAO7X,EAAK,GAClC4nC,EAAQ5nC,GAAO,GAAoBgiC,SAAS5kB,GAG9C,OAAOwqB,GAGT,YAAAC,UAAA,SAAUx1B,GACSN,KAAKuQ,oBAAmB,KACpChnB,KAAK+W,IAGZ,YAAAy1B,aAAA,SAAa9nC,GACX,IAAM2nC,EAAW51B,KAAKswB,OAEtB,GAAKsF,EAIE,CAEL,GAAI3nC,EAAM,GAAKA,EAAM2nC,EAASloC,OAC5B,MAAM,IAAI,KAAsBO,EAAK,EAAG2nC,EAASloC,QAEnDkoC,EAASlwB,OAAOzX,OATH,CAEb,GAAY,IAARA,EAAW,MAAM,IAAI,KAAsBA,EAAK,EAAG,GACvD+R,KAAKywB,QAAQ,MAUjB,YAAAlgB,kBAAA,WACE,IAAI+f,EAAOtwB,KAAKswB,OAYhB,OALKA,IACHA,EAAOtwB,KAAKqL,KAAKhL,QAAQmB,IAAI,CAACxB,KAAKM,MACnCN,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,QAASiqC,IAG7B,CAAEA,KAAI,IA1DR,EAAAL,SAAW,SAAC5kB,EAAe/K,GAChC,WAAI01B,EAAgB3qB,EAAM/K,IA2D9B,EA7DA,CAA8B,IC0G9B,SAxGA,yB,+CAsGA,OAtG4B,aAC1B,YAAA21B,IAAA,WACE,OAAOj2B,KAAKqL,KAAKzF,YACf,EAAQvf,GAAG,OACX63B,GAAA,EACA7D,EAAA,EACA,IAIJ,YAAA6b,OAAA,SAAOC,GACLn2B,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,OAAQ2Z,KAAKqL,KAAKhL,QAAQmB,IAAI20B,KAGzD,YAAAC,gBAAA,WACE,IAAMD,EAAMn2B,KAAKi2B,MAEjB,GAAKE,EAAL,CAEA,GAAIA,aAAejY,GAAA,GAAaiY,aAAe9b,EAAA,EAC7C,MAAO,CAAC8b,GAIV,IADA,IAAM5qB,EAAuC,GACpCtd,EAAM,EAAGC,EAAMioC,EAAIzoC,OAAQO,EAAMC,EAAKD,IAAO,CACpD,IAAM6U,EAAQqzB,EAAIrwB,OAAO7X,IACrB6U,aAAiBob,GAAA,GAAapb,aAAiBuX,EAAA,IACjD9O,EAAOhiB,KAAKuZ,GAIhB,OAAOyI,IAGT,YAAA8qB,kBAAA,SAAkBpoC,GAChB,IAAMkoC,EAAMn2B,KAAKi2B,MAEjB,GAAKE,EAEL,GAAIA,aAAejY,GAAA,GAAaiY,aAAe9b,EAAA,EAAc,CAC3D,GAAY,IAARpsB,EAAW,MAAM,IAAI,KAAsBA,EAAK,EAAG,GACvD+R,KAAKk2B,OAAO,QACP,CACL,GAAIjoC,EAAM,GAAKA,EAAMkoC,EAAIzoC,OACvB,MAAM,IAAI,KAAsBO,EAAK,EAAGkoC,EAAIzoC,QAE9CyoC,EAAIzwB,OAAOzX,KAKf,YAAAqoC,sBAAA,WAME,I,YALMC,EAAqC,QAAzB,EAAGv2B,KAAKo2B,yBAAiB,QAAI,GAEzCH,EAAoC,GAEpCJ,EAAU71B,KAAK21B,aACZ1nC,EAAM,EAAGC,EAAM2nC,EAAQxpC,OAAQ4B,EAAMC,EAAKD,IAAO,CACxD,IAAMuoC,EAASX,EAAQ5nC,GACjBwoC,EACa,QADJ,EACbF,EAAatoC,UAAI,QACjBosB,EAAA,EAAa1Y,SAAwC,QAAhC,EAAoB,QAApB,EAAC60B,EAAOjB,oBAAY,eAAEpsB,oBAAU,QAAM,IAC7D8sB,EAAI1sC,KAAKktC,GAGXz2B,KAAKk2B,OAAOD,IAOd,YAAAS,OAAA,SAAOP,EAA+BQ,G,MACpC32B,KAAKs2B,wBAEL,IAEIM,EAFEC,EAAUV,EAAIhtB,aAGpB,GAAIwtB,EAEF,IADA,IAAMJ,EAAqC,QAAzB,EAAGv2B,KAAKo2B,yBAAiB,QAAI,GACtCnoC,EAAM,EAAGC,EAAMqoC,EAAalqC,OAAQ4B,EAAMC,EAAKD,IAAO,CAC3CsoC,EAAatoC,GACjBkb,eAAiB0tB,IAASD,EAAc3oC,GAI1D,IAAMgoC,EAAMj2B,KAAKi2B,MAGjB,OAFAA,EAAI1sC,KAAK4sC,GAEFS,MAAAA,EAAAA,EAAeX,EAAIvoC,OAAS,GAGrC,YAAAopC,iBAAA,SACEN,EACAL,EACAQ,GAEA,IAAMI,EAAS/2B,KAAK02B,OAAOP,EAAKQ,GAC1BK,EAAe,EAAQ3wC,GAAG2d,OAAO+yB,IAEvC,OADA/2B,KAAK81B,UAAUU,GACRQ,GAEX,EAtGA,CAA4B,ICuC5B,SAzCA,yB,+CAuCA,OAvC8B,aAa5B,YAAAC,SAAA,SAASn0B,G,MAEP,GAAIA,KAD6B,QAApB,EAAG9C,KAAKu1B,oBAAY,QAAI,EAAQlvC,GAAG,SACvByc,IAAU,EAAQzc,GAAG,OAC5C,MAAM,IAAI,KAGZ2Z,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAMyc,GAG/B,IADA,IAAM+yB,EAAU71B,KAAK21B,aACZ1nC,EAAM,EAAGC,EAAM2nC,EAAQxpC,OAAQ4B,EAAMC,EAAKD,IAAO,CACxD,IAAMuoC,EAASX,EAAQ5nC,GACjBmG,EAAQoiC,EAAOjB,eAAiBzyB,EAAQA,EAAQ,EAAQzc,GAAG,OACjEmwC,EAAO5D,mBAAmBx+B,KAI9B,YAAA8iC,SAAA,WACE,IAAM5uC,EAAI0X,KAAK3X,IACf,OAAIC,aAAa,EAAgBA,EAC1B,EAAQjC,GAAG,QAGpB,YAAAkvC,WAAA,WACS,IAAAiB,EAAUx2B,KAAK21B,aAAY,GAClC,OAAOa,MAAAA,OAAM,EAANA,EAAQjB,cApCV,EAAAtF,SAAW,SAAC5kB,EAAe/K,GAChC,WAAI62B,EAAgB9rB,EAAM/K,IAErB,EAAAiP,OAAS,SAAClP,GACf,IAAMgL,EAAOhL,EAAQmB,IAAI,CACvBi0B,GAAI,MACJnF,KAAM,KAGR,OAAO,IAAI6G,EAAgB9rB,EADfhL,EAAQiB,SAAS+J,KA8BjC,EAvCA,CAA8B,ICP9B,IAGY+rB,GAwBAC,GA6BAC,GAyDAC,GAjHN1F,GAAO,SAAC2F,GAAqB,UAAKA,IAGxC,SAAYJ,GAQV,aAAWvF,GAAK,IAAM,WAMtB,aAAWA,GAAK,IAAM,WAMtB,aAAWA,GAAK,IAAM,WApBxB,CAAYuF,KAAAA,GAAc,KAwB1B,SAAYC,GAMV,kBAAgBxF,GAAK,KAAO,gBAM5B,UAAQA,GAAK,KAAO,QAKpB,eAAaA,GAAK,KAAO,aAQzB,mBAAiBA,GAAK,KAAO,iBAzB/B,CAAYwF,KAAAA,GAAe,KA6B3B,SAAYC,GAKV,cAAYzF,GAAK,KAAO,YAUxB,aAAWA,GAAK,KAAO,WAMvB,eAAaA,GAAK,KAAO,aAKzB,oBAAkBA,GAAK,KAAO,kBAU9B,gBAAcA,GAAK,KAAO,cAS1B,SAAOA,GAAK,KAAO,OAQnB,aAAWA,GAAK,KAAO,WArDzB,CAAYyF,KAAAA,GAAa,KAyDzB,SAAYC,GAIV,UAAQ1F,GAAK,KAAO,QAOpB,SAAOA,GAAK,KAAO,OAQnB,SAAOA,GAAK,KAAO,OAMnB,gBAAcA,GAAK,KAAO,cAM1B,oBAAkBA,GAAK,KAAO,kBAgB9B,sBAAoBA,GAAK,KAAO,oBA/ClC,CAAY0F,KAAAA,GAAe,KCuC3B,SA7IA,yB,+CA2IA,OA3I4B,aAC1B,YAAAE,UAAA,SAAUlsB,GACR,GACEvL,KAAK4xB,QAAQ2F,GAAgBG,SAC5B13B,KAAK4xB,QAAQ2F,GAAgBI,QAC7B33B,KAAK43B,eAAersB,GAErB,MAAM,IAAI,KASZ,GANsB,IAAlBA,EAAOlf,QACT2T,KAAKqL,KAAKK,OAAO,EAAQrlB,GAAG,MAER,IAAlBklB,EAAOlf,QACT2T,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAMklB,EAAO,IAEpCA,EAAOlf,OAAS,EAAG,CACrB,IAAK2T,KAAK4xB,QAAQ2F,GAAgBM,aAChC,MAAM,IAAI,KAEZ73B,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAM2Z,KAAKqL,KAAKhL,QAAQmB,IAAI+J,IAGvDvL,KAAK83B,sBAAsBvsB,IAG7B,YAAAqsB,eAAA,SAAersB,GAEb,IADA,IAAMle,EAAU2S,KAAK+3B,a,WACZ9pC,EAASC,GAChB,IAAM+6B,EAAM1d,EAAOtd,GAAKkb,aACxB,IAAK9b,EAAQ2qC,MAAK,SAACxhB,GAAM,OAAAyS,KAASzS,EAAEyhB,SAAWzhB,EAAE1T,OAAOqG,gB,cAC/C,IAHFlb,EAAM,EAAGC,EAAMqd,EAAOlf,OAAQ4B,EAAMC,EAAKD,IAAO,C,QAAhDA,G,qCAMT,OAAO,GAGT,YAAA6pC,sBAAA,SAAsBvsB,GACpB,GAAIA,EAAOlf,OAAS,EAAG,CAGrB,IAFA,IAAM6rC,EAAU,IAAI3rC,MAAcgf,EAAOlf,QACnCgB,EAAU2S,KAAK+3B,a,WACZ9pC,EAASC,GAChB,IAAM+6B,EAAM1d,EAAOtd,GAAKkb,aACxB+uB,EAAQjqC,GAAOZ,EAAQ8qC,WACrB,SAAC3hB,GAAM,OAAAyS,KAASzS,EAAEyhB,SAAWzhB,EAAE1T,OAAOqG,iBAHjClb,EAAM,EAAGC,EAAMqd,EAAOlf,OAAQ4B,EAAMC,EAAKD,I,EAAzCA,GAMT+R,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAM2Z,KAAKqL,KAAKhL,QAAQmB,IAAI02B,EAAQ5pB,cAE7DtO,KAAKqL,KAAKK,OAAO,EAAQrlB,GAAG,OAIhC,YAAA+xC,UAAA,WACE,IAAM9vC,EAAI0X,KAAK3X,IAEf,GAAIC,aAAa41B,GAAA,GAAa51B,aAAa+xB,EAAA,EAAc,MAAO,CAAC/xB,GAEjE,GAAIA,aAAa,EAAU,CAGzB,IAFA,IAAMijB,EAAuC,GAEpCtd,EAAM,EAAGC,EAAM5F,EAAEoF,OAAQO,EAAMC,EAAKD,IAAO,CAClD,IAAM6U,EAAQxa,EAAEwd,OAAO7X,IACnB6U,aAAiBob,GAAA,GAAapb,aAAiBuX,EAAA,IACjD9O,EAAOhiB,KAAKuZ,GAIhB,OAAOyI,EAGT,MAAO,IAGT,YAAA0qB,IAAA,WACE,OAAOj2B,KAAKqL,KAAKzF,YACf,EAAQvf,GAAG,OACX63B,GAAA,EACA7D,EAAA,EACA,IAIJ,YAAAge,WAAA,SACEhrC,GAMA,IADA,IAAMirC,EAAS,IAAI/rC,MAAgBc,EAAQhB,QAClC4B,EAAM,EAAGC,EAAMb,EAAQhB,OAAQ4B,EAAMC,EAAKD,IAAO,CAClD,MAAqBZ,EAAQY,GAA3B6U,EAAK,QAAEm1B,EAAO,UACtBK,EAAOrqC,GAAO+R,KAAKqL,KAAKhL,QAAQmB,IAAI,CAACsB,EAAOm1B,GAAWn1B,IAEzD9C,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,OAAQ2Z,KAAKqL,KAAKhL,QAAQmB,IAAI82B,KAGzD,YAAAP,WAAA,WAIE,IAAM9B,EAAMj2B,KAAKi2B,MAGjB,GAAIA,aAAe/X,GAAA,GAAa+X,aAAe5b,EAAA,EAC7C,MAAO,CAAC,CAAEvX,MAAOmzB,EAAKgC,QAAShC,IAGjC,GAAIA,aAAe,EAAU,CAM3B,IALA,IAAMsC,EAGA,GAEGtqC,EAAM,EAAGC,EAAM+nC,EAAIvoC,OAAQO,EAAMC,EAAKD,IAAO,CACpD,IAAMuqC,EAAOvC,EAAInwB,OAAO7X,GAUxB,IAPIuqC,aAAgBta,GAAA,GAAasa,aAAgBne,EAAA,IAC/Cke,EAAIhvC,KAAK,CAAEuZ,MAAO01B,EAAMP,QAASO,IAM/BA,aAAgB,GACdA,EAAK9qC,OAAS,EAAG,CACnB,IAAMuqB,EAAQugB,EAAK1yB,OAAO,EAAGoY,GAAA,EAAW7D,EAAA,GAClCnC,EAASsgB,EAAK5yB,YAAY,EAAGsY,GAAA,EAAW7D,EAAA,GAC9Cke,EAAIhvC,KAAK,CAAEuZ,MAAOmV,EAAOggB,QAAS/f,GAAUD,KAKlD,OAAOsgB,EAGT,MAAO,IAEX,EA3IA,CAA4B,ICU5B,SAfA,yB,+CAaA,OAb8B,aACrB,EAAAtI,SAAW,SAAC5kB,EAAe/K,GAChC,WAAIm4B,EAAgBptB,EAAM/K,IAErB,EAAAiP,OAAS,SAAClP,GACf,IAAMgL,EAAOhL,EAAQmB,IAAI,CACvBi0B,GAAI,KACJrF,GAAImH,GAAgBG,MACpBpH,KAAM,KAGR,OAAO,IAAImI,EAAgBptB,EADfhL,EAAQiB,SAAS+J,KAGjC,EAbA,CAA8B,IC2B9B,SA3BA,yB,+CAyBA,OAzBiC,aAU/B,YAAAqtB,SAAA,SAASC,GACC,IAAArI,EAAStwB,KAAKuQ,oBAAmB,KACzC+f,MAAAA,GAAAA,EAAM/mC,KAAKovC,IAGb,YAAApoB,kBAAA,WACE,IAAI+f,EAAOtwB,KAAKswB,OAOhB,OALKA,IACHA,EAAOtwB,KAAKqL,KAAKhL,QAAQmB,IAAI,IAC7BxB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,QAASiqC,IAG7B,CAAEA,KAAI,IAtBR,EAAAL,SAAW,SAAC5kB,EAAe/K,GAChC,WAAIs4B,EAAmBvtB,EAAM/K,IAExB,EAAAiP,OAAS,SAAClP,GACf,IAAMgL,EAAOhL,EAAQmB,IAAI,IAEzB,OAAO,IAAIo3B,EAAmBvtB,EADlBhL,EAAQiB,SAAS+J,KAmBjC,EAzBA,CAAiC,ICGjC,SALA,yB,+CAGA,OAH+B,aACtB,EAAA4kB,SAAW,SAAC5kB,EAAe/K,GAChC,WAAIu4B,EAAiBxtB,EAAM/K,IAC/B,EAHA,CAA+B,ICuE/B,SAlEA,yB,+CAgEA,OAhE0B,aAYxB,YAAAw4B,OAAA,WACE,IAAMnQ,EAAS3oB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,WAC3C,GAAIsiC,aAAkB,EAAW,OAAOA,GAI1C,YAAAjhC,EAAA,WACE,IAAMC,EAAIqY,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,MACtC,GAAIsB,aAAa,EAAW,OAAOA,GAIrC,YAAAoxC,aAAA,SAAaC,GACXh5B,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,UAAW,EAAUA,GAAG2yC,KAGnD,YAAAC,gBAAA,WACEj5B,KAAKqL,KAAKK,OAAO,EAAQrlB,GAAG,YAG9B,YAAA6yC,aAAA,W,MACE,OAAoB,QAApB,EAAOl5B,KAAK84B,gBAAQ,eAAEtyC,YAGxB,YAAA2yC,YAAA,SAAYC,GACVp5B,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAM,EAAUA,GAAG+yC,KAG9C,YAAAC,YAAA,W,MACE,OAAe,QAAf,EAAOr5B,KAAKtY,WAAG,eAAElB,YAGnB,YAAAywC,SAAA,SAASn0B,GACP9C,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAMyc,IAUjC,YAAAw2B,YAAA,WACEt5B,KAAKqL,KAAKK,OAAO,EAAQrlB,GAAG,OAG9B,YAAA6wC,SAAA,WACE,IAAM5uC,EAAI0X,KAAK3X,IACf,GAAIC,aAAa41B,GAAA,GAAa51B,aAAa+xB,EAAA,EAAc,OAAO/xB,GA5D3D,EAAA2nC,SAAW,SAAC5kB,EAAe/K,GAAgB,WAAIi5B,EAAYluB,EAAM/K,IAEjE,EAAAiP,OAAS,SAAClP,GACf,IAAMgL,EAAOhL,EAAQmB,IAAI,CACvBi0B,GAAI,KACJnF,KAAM,KAGR,OAAO,IAAIiJ,EAAYluB,EADXhL,EAAQiB,SAAS+J,KAwDjC,EAhEA,CAA0B,ICY1B,SAfA,yB,+CAaA,OAbgC,aACvB,EAAA4kB,SAAW,SAAC5kB,EAAe/K,GAChC,WAAIk5B,EAAkBnuB,EAAM/K,IAEvB,EAAAiP,OAAS,SAAClP,GACf,IAAMgL,EAAOhL,EAAQmB,IAAI,CACvBi0B,GAAI,MACJrF,GAAIiH,GAAgBoC,WACpBnJ,KAAM,KAGR,OAAO,IAAIkJ,EAAkBnuB,EADjBhL,EAAQiB,SAAS+J,KAGjC,EAbA,CAAgC,ICmDhC,SAjDA,yB,+CA+CA,OA/CiC,aAc/B,YAAA4rB,SAAA,SAASn0B,GAEP,IADiB9C,KAAK05B,cACRzsC,SAAS6V,IAAUA,IAAU,EAAQzc,GAAG,OACpD,MAAM,IAAI,KAGZ2Z,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,KAAMyc,GAG/B,IADA,IAAM+yB,EAAU71B,KAAK21B,aACZ1nC,EAAM,EAAGC,EAAM2nC,EAAQxpC,OAAQ4B,EAAMC,EAAKD,IAAO,CACxD,IAAMuoC,EAASX,EAAQ5nC,GACjBmG,EAAQoiC,EAAOjB,eAAiBzyB,EAAQA,EAAQ,EAAQzc,GAAG,OACjEmwC,EAAO5D,mBAAmBx+B,KAI9B,YAAA8iC,SAAA,WACE,IAAM5uC,EAAI0X,KAAK3X,IACf,OAAIC,aAAa,EAAgBA,EAC1B,EAAQjC,GAAG,QAGpB,YAAAqzC,YAAA,WAIE,IAHA,IAAM7D,EAAU71B,KAAK21B,aAEfgE,EAAsB,GACnB1rC,EAAM,EAAGC,EAAM2nC,EAAQxpC,OAAQ4B,EAAMC,EAAKD,IAAO,CACxD,IAAM2rC,EAAU/D,EAAQ5nC,GAAKsnC,aACzBqE,GAASD,EAASpwC,KAAKqwC,GAG7B,OAAOD,GA5CF,EAAA1J,SAAW,SAAC5kB,EAAe/K,GAChC,WAAIu5B,EAAmBxuB,EAAM/K,IAExB,EAAAiP,OAAS,SAAClP,GACf,IAAMgL,EAAOhL,EAAQmB,IAAI,CACvBi0B,GAAI,MACJrF,GAAIiH,GAAgByC,MACpBxJ,KAAM,KAGR,OAAO,IAAIuJ,EAAmBxuB,EADlBhL,EAAQiB,SAAS+J,KAqCjC,EA/CA,CAAiC,ICWjC,SAdA,yB,+CAYA,OAZ6B,aACpB,EAAA4kB,SAAW,SAAC5kB,EAAe/K,GAChC,WAAIy5B,EAAe1uB,EAAM/K,IAEpB,EAAAiP,OAAS,SAAClP,GACf,IAAMgL,EAAOhL,EAAQmB,IAAI,CACvBi0B,GAAI,KACJnF,KAAM,KAGR,OAAO,IAAIyJ,EAAe1uB,EADdhL,EAAQiB,SAAS+J,KAGjC,EAZA,CAA6B,ICgBtB,IAAM2uB,GAAsB,SACjCpE,GAEA,IAAKA,EAAU,MAAO,GAGtB,IADA,IAAMlF,EAAiC,GAC9BziC,EAAM,EAAGC,EAAM0nC,EAASloC,OAAQO,EAAMC,EAAKD,IAAO,CACzD,IAAMqS,EAAMs1B,EAAS5oC,IAAIiB,GACnBod,EAAOuqB,EAAS9vB,OAAO7X,GAEzBqS,aAAe,GAAU+K,aAAgB,GAC3CqlB,EAAKnnC,KAAK,CAAC0wC,GAAmB5uB,EAAM/K,GAAMA,IAI9C,OAAOowB,GAGIuJ,GAAqB,SAChC5uB,EACA/K,GAGA,OADsB45B,GAAuB7uB,GACnB,GAAmB4kB,SAAS5kB,EAAM/K,GACrD65B,GAAsB9uB,EAAM/K,IAmB/B45B,GAAyB,SAAC7uB,GAC9B,IAAMqlB,EAAOrlB,EAAKvF,OAAO,EAAQzf,GAAG,SAEpC,GAAIqqC,aAAgB,EAClB,IAAK,IAAIziC,EAAM,EAAGC,EAAMwiC,EAAKhjC,OAAQO,EAAMC,EAAKD,IAAO,CACrD,IAAMmsC,EAAM1J,EAAK5qB,OAAO7X,GAExB,GADmBmsC,aAAe,GAAWA,EAAIrtC,IAAI,EAAQ1G,GAAG,MAChD,OAAO,EAI3B,OAAO,GAGH8zC,GAAwB,SAAC9uB,EAAe/K,GAC5C,IAAM+5B,EAAcxqB,GAAwBxE,EAAM,EAAQhlB,GAAG,OACvDuS,EAAOyS,EAAKhL,QAAQyF,OAAOu0B,EAAa,GAE9C,OAAIzhC,IAAS,EAAQvS,GAAG,OAAei0C,GAAoBjvB,EAAM/K,GAC7D1H,IAAS,EAAQvS,GAAG,MAAck0C,GAAoBlvB,EAAM/K,GAC5D1H,IAAS,EAAQvS,GAAG,MAAc,GAAY4pC,SAAS5kB,EAAM/K,GAC7D1H,IAAS,EAAQvS,GAAG,OAAe,GAAiB4pC,SAAS5kB,EAAM/K,GAKhE,GAAgB2vB,SAAS5kB,EAAM/K,IAGlCg6B,GAAsB,SAACjvB,EAAe/K,G,MACpCk6B,EAAgB3qB,GAAwBxE,EAAM,EAAQhlB,GAAG,OACzDo0C,EAAWpvB,EAAKhL,QAAQuF,YAAY40B,EAAe,GACnD/a,EAA0B,QAArB,EAAGgb,MAAAA,OAAQ,EAARA,EAAUj0C,kBAAQ,QAAM,EAEtC,OAAIk0C,GAAUjb,EAAO4X,GAAgBoC,YAC5B,GAAkBxJ,SAAS5kB,EAAM/K,GAC/Bo6B,GAAUjb,EAAO4X,GAAgByC,OACnC,GAAmB7J,SAAS5kB,EAAM/K,GAElC,GAAgB2vB,SAAS5kB,EAAM/K,IAIpCi6B,GAAsB,SAAClvB,EAAe/K,G,MACpCk6B,EAAgB3qB,GAAwBxE,EAAM,EAAQhlB,GAAG,OACzDo0C,EAAWpvB,EAAKhL,QAAQuF,YAAY40B,EAAe,GACnD/a,EAA0B,QAArB,EAAGgb,MAAAA,OAAQ,EAARA,EAAUj0C,kBAAQ,QAAM,EAEtC,OAAIk0C,GAAUjb,EAAO8X,GAAgBG,OAC5B,GAAgBzH,SAAS5kB,EAAM/K,GAE/B,GAAe2vB,SAAS5kB,EAAM/K,IAInCo6B,GAAY,SAACjb,EAAeoS,GAChC,OAAmB,IAAlBpS,EAAQoS,IAELhiB,GAA0B,SAAC8qB,EAAoBv0C,GACnD,IAAI4pB,EAIJ,OAHAC,GAAO0qB,GAAW,SAACzqB,GACZF,IAAWA,EAAYE,EAAKljB,IAAI5G,OAEhC4pB,GAGHC,GAAS,SAAC0qB,EAAoBjpB,GAClCA,EAAQipB,GACR,IAAMvwB,EAASuwB,EAAU/0B,YAAY,EAAQvf,GAAG,UAAW,GACvD+jB,GAAQ6F,GAAO7F,EAAQsH,IChC7B,SAzFA,WAUE,WAAoBrG,GAClBrL,KAAKqL,KAAOA,EA4EhB,OAzEE,YAAAuvB,OAAA,WACE,IAAMC,EAAS76B,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,WAC3C,GAAIw0C,aAAkB,EAAU,OAAOA,GAIzC,YAAAC,UAAA,WAIE,IAHQ,IAAAF,EAAW56B,KAAKuQ,oBAAmB,OAErCsqB,EAAS,IAAItuC,MAAMquC,EAAOltC,QACvBO,EAAM,EAAGC,EAAM0sC,EAAOltC,OAAQO,EAAMC,EAAKD,IAAO,CACvD,IAAMqS,EAAMs6B,EAAO5tC,IAAIiB,GACjBod,EAAOuvB,EAAO90B,OAAO7X,EAAK,GAChC4sC,EAAO5sC,GAAO,CAACgsC,GAAmB5uB,EAAM/K,GAAMA,GAGhD,OAAOu6B,GAGT,YAAAE,aAAA,WACE,IAAMC,EAAsC,GAEtCC,EAAa,SAACJ,GAClB,GAAKA,EACL,IAAK,IAAI5sC,EAAM,EAAGC,EAAM2sC,EAAOxuC,OAAQ4B,EAAMC,EAAKD,IAAO,CACvD,IAAM0qC,EAAQkC,EAAO5sC,GACrB+sC,EAAUzxC,KAAKovC,GACR,IAAAuC,EAAcvC,EAAK,GACtBuC,aAAsB,IACxBD,EAAWjB,GAAoBkB,EAAW5K,WAOhD,OAFA2K,EAAWj7B,KAAK86B,aAETE,GAGT,YAAAtC,SAAA,SAASC,GACC,IAAAiC,EAAW56B,KAAKuQ,oBAAmB,OAC3CqqB,MAAAA,GAAAA,EAAQrxC,KAAKovC,IAGf,YAAAwC,YAAA,SAAYxC,GACV,IAAM5mB,EAAS4mB,EAAMhI,YACfkK,OACOhrC,IAAXkiB,EAAuB/R,KAAKuQ,oBAAoBqqB,OAAS7oB,EAAOue,OAE5DptB,EAAQ23B,MAAAA,OAAM,EAANA,EAAQp1B,QAAQkzB,EAAMr4B,KACpC,QAAezQ,IAAXgrC,QAAkChrC,IAAVqT,EAC1B,MAAM,IAAIX,MACR,oCAAoCo2B,EAAM9H,yBAI9CgK,EAAOn1B,OAAOxC,QAECrT,IAAXkiB,GAA0C,IAAlB8oB,EAAOntC,QACjCsS,KAAKm7B,YAAYppB,IAIrB,YAAAxB,kBAAA,WACE,IAAIqqB,EAAS56B,KAAK46B,SAOlB,OALKA,IACHA,EAAS56B,KAAKqL,KAAKhL,QAAQmB,IAAI,IAC/BxB,KAAKqL,KAAK1F,IAAI,EAAQtf,GAAG,UAAWu0C,IAG/B,CAAEA,OAAM,IAlFV,EAAA3K,SAAW,SAAC5kB,GAAkB,WAAI+vB,EAAY/vB,IAE9C,EAAAkE,OAAS,SAAClP,GAEf,OAAO,IAAI+6B,EADE/6B,EAAQmB,IAAI,CAAEo5B,OAAQ,OAiFvC,EAvFA,GCwEA,SA5EA,yB,+CA0EA,OA1EyB,aAcvB,YAAAS,MAAA,WACE,OAAOr7B,KAAK8F,OAAO,EAAQzf,GAAG,SAAU,IAG1C,YAAAi1C,SAAA,WACE,OAAOt7B,KAAK4F,YAAY,EAAQvf,GAAG,YAAa,IAGlD,YAAAk1C,YAAA,WACE,IAAMlwB,EAAOrL,KAAKs7B,WAClB,GAAKjwB,EACL,OAAO,GAAY4kB,SAAS5kB,IAG9B,YAAAmwB,oBAAA,WACE,IAAIC,EAAWz7B,KAAKu7B,cACpB,IAAKE,EAAU,CACbA,EAAW,GAAYlsB,OAAOvP,KAAKK,SACnC,IAAMq7B,EAAc17B,KAAKK,QAAQiB,SAASm6B,EAASpwB,MACnDrL,KAAK2F,IAAI,EAAQtf,GAAG,YAAaq1C,GAEnC,OAAOD,GAGT,YAAAvL,kBAAA,WACE,OAAOlwB,KAAK4F,YAAY,EAAQvf,GAAG,qBAAsB,IAG3D,YAAAs1C,qBAAA,WACE,IAAMtwB,EAAOrL,KAAKkwB,oBAClB,GAAK7kB,EACL,OAAO,GAAkB4kB,SAAS5kB,IAGpC,YAAAuwB,6BAAA,WACE,IAAIC,EAAc77B,KAAK27B,uBACvB,IAAKE,EAAa,CAChBA,EAAc,GAAkBtsB,OAAOvP,KAAKK,SAC5C,IAAMy7B,EAAiB97B,KAAKK,QAAQiB,SAASu6B,EAAYxwB,MACzDrL,KAAK2F,IAAI,EAAQtf,GAAG,qBAAsBy1C,GAE5C,OAAOD,GAUT,YAAAE,eAAA,SAAeC,EAAiB94B,GAC9B,IAAM+4B,EAAWj8B,KAAKhT,IAAI,EAAQ3G,GAAG,UAErC,OADuB2Z,KAAKq7B,QAAQU,eAAeC,EAAS94B,IACnC+4B,GAG3B,YAAAC,eAAA,SAAeh5B,GACblD,KAAKq7B,QAAQa,eAAeh5B,IAvEvB,EAAAi5B,oBAAsB,SAC3B97B,EACA+7B,GAEA,IAAM/wB,EAAO,IAAIrkB,IAGjB,OAFAqkB,EAAK1F,IAAI,EAAQtf,GAAG,QAAS,EAAQA,GAAG,YACxCglB,EAAK1F,IAAI,EAAQtf,GAAG,SAAU+1C,GACvB,IAAIC,EAAWhxB,EAAMhL,IAGvB,EAAA4L,mBAAqB,SAACrY,EAAcyM,GACzC,WAAIg8B,EAAWzoC,EAAKyM,IA8DxB,EA1EA,CAAyB,GC0LzB,SAvLA,yB,+CAqLA,OArL0B,aAaxB,YAAA+J,OAAA,WACE,OAAOpK,KAAK8F,OAAO,EAAQzf,GAAG,YAGhC,YAAAiqC,KAAA,WACE,OAAOtwB,KAAK8F,OAAO,EAAQzf,GAAG,QAAS,IAGzC,YAAA2c,MAAA,WACE,OAAOhD,KAAK8F,OAAO,EAAQzf,GAAG,SAAU,IAG1C,YAAAi2C,aAAA,SAAaC,GACEv8B,KAAKswB,OACb/mC,KAAKgzC,IAGZ,YAAAC,aAAA,SAAaR,GACX,IAAM1L,EAAOtwB,KAAKswB,OAClBtwB,KAAKy8B,cAAcnM,EAAK5iC,OAAQsuC,IAYlC,YAAAD,eAAA,SAAeC,EAAiBj5B,GAC9B,IAAMutB,EAAOtwB,KAAKswB,OACZttB,EAAQhD,KAAKgD,QAAQxc,WAE3B,GAAIuc,EAAcC,EAChB,MAAM,IAAI,KAAwBD,EAAaC,GAIjD,IADA,IAAI05B,EAA4B35B,EACvB9U,EAAM,EAAGC,EAAMoiC,EAAK5iC,OAAQO,EAAMC,EAAKD,IAAO,CACrD,GAAkC,IAA9ByuC,EAGF,YADA18B,KAAKy8B,cAAcxuC,EAAK+tC,GAI1B,IAAMW,EAASrM,EAAKtjC,IAAIiB,GAClBmsC,EAAMp6B,KAAKK,QAAQyF,OAAO62B,GAEhC,GAAIvC,aAAewC,EAAa,CAC9B,GAAIxC,EAAIp3B,QAAQxc,WAAak2C,EAE3B,OACEtC,EAAI2B,eAAeC,EAASU,IAA8BC,EAI5DD,GAA6BtC,EAAIp3B,QAAQxc,WAIzC4zC,aAAe,IAEjBsC,GAA6B,GAIjC,GAAkC,IAA9BA,EAOJ,MAAM,IAAI,KAAqB35B,EAAa,kBAL1C/C,KAAKy8B,cAAcnM,EAAK5iC,OAAQsuC,IAgBpC,YAAAE,eAAA,SAAen5B,EAAqB85B,QAAA,IAAAA,IAAAA,GAAA,GAClC,IAAMvM,EAAOtwB,KAAKswB,OACZttB,EAAQhD,KAAKgD,QAAQxc,WAE3B,GAAIuc,GAAeC,EACjB,MAAM,IAAI,KAAwBD,EAAaC,GAIjD,IADA,IAAI05B,EAA4B35B,EACvB9U,EAAM,EAAGC,EAAMoiC,EAAK5iC,OAAQO,EAAMC,EAAKD,IAAO,CACrD,IAAM0uC,EAASrM,EAAKtjC,IAAIiB,GAClBmsC,EAAMp6B,KAAKK,QAAQyF,OAAO62B,GAEhC,GAAIvC,aAAewC,EAAa,CAC9B,GAAIxC,EAAIp3B,QAAQxc,WAAak2C,EAI3B,OAFAtC,EAAI8B,eAAeQ,EAA2BG,QAC1CA,GAA+B,IAAtBzC,EAAI9J,OAAO5iC,QAAc4iC,EAAK5qB,OAAOzX,IAIlDyuC,GAA6BtC,EAAIp3B,QAAQxc,WAI7C,GAAI4zC,aAAe,EAAa,CAC9B,GAAkC,IAA9BsC,EAGF,YADA18B,KAAK88B,UAAU7uC,GAIfyuC,GAA6B,GAMnC,MAAM,IAAI,KAAqB35B,EAAa,mBAG9C,YAAAkN,OAAA,SAAOyB,GACLA,EAAQ1R,MACR,IAAMoK,EAASpK,KAAKoK,SAChBA,GAAQA,EAAO6F,OAAOyB,IAI5B,YAAAqrB,SAAA,SAASrrB,GAEP,IADA,IAAM4e,EAAOtwB,KAAKswB,OACTriC,EAAM,EAAGC,EAAMoiC,EAAK5iC,OAAQO,EAAMC,EAAKD,IAAO,CACrD,IAAM0uC,EAASrM,EAAKtjC,IAAIiB,GAClBmsC,EAAMp6B,KAAKK,QAAQyF,OAAO62B,GAC5BvC,aAAewC,GAAaxC,EAAI2C,SAASrrB,GAC7CA,EAAQ0oB,EAAKuC,KAIT,YAAAF,cAAR,SAAsBO,EAAgBhB,GACpC,IAAM1L,EAAOtwB,KAAKswB,OAElBtwB,KAAKiQ,QAAO,SAACC,GACX,IAAM+sB,EAAW/sB,EAAKlN,QAAQxc,WAAa,EAC3C0pB,EAAKvK,IAAI,EAAQtf,GAAG,SAAU,EAAUA,GAAG42C,OAG7C3M,EAAK/qB,OAAOy3B,EAAQhB,IAGd,YAAAc,UAAR,SAAkBE,GAChB,IAAM1M,EAAOtwB,KAAKswB,OAENA,EAAKxqB,OAAOk3B,aACL,GACjBh9B,KAAKiQ,QAAO,SAACC,GACX,IAAM+sB,EAAW/sB,EAAKlN,QAAQxc,WAAa,EAC3C0pB,EAAKvK,IAAI,EAAQtf,GAAG,SAAU,EAAUA,GAAG42C,OAI/C3M,EAAK5qB,OAAOs3B,IAlLP,EAAA32B,YAAc,SAAChG,EAAqB0R,GACzC,IAAM1G,EAAO,IAAIrkB,IAKjB,OAJAqkB,EAAK1F,IAAI,EAAQtf,GAAG,QAAS,EAAQA,GAAG,UACxCglB,EAAK1F,IAAI,EAAQtf,GAAG,QAASga,EAAQmB,IAAI,KACzC6J,EAAK1F,IAAI,EAAQtf,GAAG,SAAUga,EAAQmB,IAAI,IACtCuQ,GAAQ1G,EAAK1F,IAAI,EAAQtf,GAAG,UAAW0rB,GACpC,IAAI6qB,EAAYvxB,EAAMhL,IAGxB,EAAA4L,mBAAqB,SAACrY,EAAcyM,GACzC,WAAIu8B,EAAYhpC,EAAKyM,IA0KzB,EArLA,CAA0B,GCTnB,IAAM68B,GAAU,IAAI71B,WAAW,KAEtC61B,GAAQ34B,EAAA,EAAUyE,MAAQ,EAC1Bk0B,GAAQ34B,EAAA,EAAU44B,KAAO,EACzBD,GAAQ34B,EAAA,EAAU64B,KAAO,EACzBF,GAAQ34B,EAAA,EAAU84B,OAAS,EAC3BH,GAAQ34B,EAAA,EAAU+4B,MAAQ,EAC1BJ,GAAQ34B,EAAA,EAAUg5B,MAAQ,EAC1BL,GAAQ34B,EAAA,EAAUi5B,KAAO,EACzBN,GAAQ34B,EAAA,EAAUk5B,OAAS,EAC3BP,GAAQ34B,EAAA,EAAUm5B,OAAS,EAC3BR,GAAQ34B,EAAA,EAAU0E,MAAQ,EAEnB,IAAM00B,GAAkB,IAAIt2B,WAAW,KAE9Cs2B,GAAgBp5B,EAAA,EAAUK,QAAU,EACpC+4B,GAAgBp5B,EAAA,EAAUq5B,MAAQ,EAClCD,GAAgBp5B,EAAA,EAAUs5B,OAAS,EAInC,IAFO,IAAMC,GAAY,IAAIz2B,WAAW,KAE/B,GAAM,EAAc,GAAL,IAAgB,KACtCy2B,GAAU,IAAOZ,GAAQ,KAAQS,GAAgB,IAAO,EAAI,ECjBtD,IAAA94B,GAA4BN,EAAA,EAAS,QAA5B0D,GAAmB1D,EAAA,EAAS,eA+G7C,SA5GA,WAIE,WAAYrE,EAAmB69B,QAAA,IAAAA,IAAAA,GAAA,GAC7B/9B,KAAKE,MAAQA,EACbF,KAAK+9B,WAAaA,EAoGtB,OAjGY,YAAAC,YAAV,WAGE,IAFA,IAAIl7B,EAAQ,IAEJ9C,KAAKE,MAAM+9B,QAAQ,CACzB,IAAMr6B,EAAO5D,KAAKE,MAAMg+B,OACxB,IAAKhB,GAAQt5B,GAAO,MACpBd,IAAS,QAAa9C,KAAKE,MAAMi+B,QAGnC,IAAMn5B,EAAc+qB,OAAOjtB,GAE3B,IAAKA,IAAUs7B,SAASp5B,GACtB,MAAM,IAAI,KAAmBhF,KAAKE,MAAMm+B,WAAYv7B,GAGtD,OAAOkC,GAKC,YAAAs5B,eAAV,WAIE,IAHA,IAAIx7B,EAAQ,IAGJ9C,KAAKE,MAAM+9B,QAAQ,CACzB,IAAMr6B,EAAO5D,KAAKE,MAAMg+B,OACxB,IAAKJ,GAAUl6B,GAAO,MAEtB,GADAd,IAAS,QAAa9C,KAAKE,MAAMi+B,QAC7Bv6B,IAASW,EAAA,EAAUK,OAAQ,MAIjC,MAAQ5E,KAAKE,MAAM+9B,QAAQ,CACnBr6B,EAAO5D,KAAKE,MAAMg+B,OACxB,IAAKhB,GAAQt5B,GAAO,MACpBd,IAAS,QAAa9C,KAAKE,MAAMi+B,QAGnC,IAAMn5B,EAAc+qB,OAAOjtB,GAE3B,IAAKA,IAAUs7B,SAASp5B,GACtB,MAAM,IAAI,KAAmBhF,KAAKE,MAAMm+B,WAAYv7B,GAGtD,GAAIkC,EAAc+qB,OAAOwO,iBAAkB,CACzC,GAAIv+B,KAAK+9B,WAAY,CACnB,IAAMz7B,EAAM,yDAAyDQ,EAAK,2CAE1E,OADA8lB,QAAQ4V,KAAKl8B,GACNytB,OAAOwO,iBAERj8B,EAAM,yDAAyDQ,EAAK,iBAC1E8lB,QAAQ4V,KAAKl8B,GAIjB,OAAO0C,GAGC,YAAAy5B,eAAV,WACE,MAAQz+B,KAAKE,MAAM+9B,QAAUp2B,EAAa7H,KAAKE,MAAMg+B,SACnDl+B,KAAKE,MAAMi+B,QAIL,YAAAO,SAAV,WACE,MAAQ1+B,KAAKE,MAAM+9B,QAAQ,CACzB,IAAMr6B,EAAO5D,KAAKE,MAAMg+B,OACxB,GAAIt6B,IAASiB,IAAWjB,IAASqE,GAAgB,OACjDjI,KAAKE,MAAMi+B,SAIL,YAAAQ,YAAV,WACE,GAAI3+B,KAAKE,MAAMg+B,SAAW35B,EAAA,EAAUC,QAAS,OAAO,EACpD,MAAQxE,KAAKE,MAAM+9B,QAAQ,CACzB,IAAMr6B,EAAO5D,KAAKE,MAAMg+B,OACxB,GAAIt6B,IAASiB,IAAWjB,IAASqE,GAAgB,OAAO,EACxDjI,KAAKE,MAAMi+B,OAEb,OAAO,GAGC,YAAAS,0BAAV,WAEE,IADA5+B,KAAKy+B,iBACEz+B,KAAK2+B,eAAe3+B,KAAKy+B,kBAGxB,YAAAI,aAAV,SAAuBh7B,GAErB,IADA,IAAMS,EAAgBtE,KAAKE,MAAMqD,SACxBtV,EAAM,EAAGC,EAAM2V,EAAQxX,OAAQ4B,EAAMC,EAAKD,IACjD,GAAI+R,KAAKE,MAAM+9B,QAAUj+B,KAAKE,MAAMi+B,SAAWt6B,EAAQ5V,GAErD,OADA+R,KAAKE,MAAMhL,OAAOoP,IACX,EAGX,OAAO,GAEX,EA1GA,GCiEA,SArEA,WAaE,WAAYpE,GAJJ,KAAAjS,IAAM,EACN,KAAAoE,KAAO,EACP,KAAAiR,OAAS,EAGftD,KAAKE,MAAQA,EACbF,KAAK3T,OAAS2T,KAAKE,MAAM7T,OAoD7B,OAjDE,YAAA6I,OAAA,SAAOqO,GACLvD,KAAK/R,IAAMsV,GAGb,YAAA46B,KAAA,WACE,IAAMv6B,EAAO5D,KAAKE,MAAMF,KAAK/R,OAO7B,OANI2V,IAASW,EAAA,EAAUM,SACrB7E,KAAK3N,MAAQ,EACb2N,KAAKsD,OAAS,GAEdtD,KAAKsD,QAAU,EAEVM,GAGT,YAAAk7B,WAAA,SAAWt8B,GACT,GAAIxC,KAAKk+B,SAAW17B,EAClB,MAAM,IAAI,KAAuBxC,KAAKq+B,WAAY77B,EAAUxC,KAAKk+B,QAEnE,OAAOl+B,KAAKm+B,QAGd,YAAAD,KAAA,WACE,OAAOl+B,KAAKE,MAAMF,KAAK/R,MAGzB,YAAA8wC,UAAA,SAAUC,GACR,OAAOh/B,KAAKE,MAAMF,KAAK/R,IAAM+wC,IAG/B,YAAAC,OAAA,SAAO17B,GACL,OAAOvD,KAAKE,MAAMqD,IAGpB,YAAA06B,KAAA,WACE,OAAOj+B,KAAK/R,KAAO+R,KAAK3T,QAG1B,YAAAkX,OAAA,WACE,OAAOvD,KAAK/R,KAGd,YAAAkY,MAAA,SAAMtX,EAAeE,GACnB,OAAOiR,KAAKE,MAAMiG,MAAMtX,EAAOE,IAGjC,YAAAsvC,SAAA,WACE,MAAO,CAAEhsC,KAAM2N,KAAK3N,KAAMiR,OAAQtD,KAAKsD,OAAQC,OAAQvD,KAAK/R,MAhEvD,EAAA5H,GAAK,SAAC6Z,GAAsB,WAAIg/B,EAAWh/B,IAE3C,EAAAi/B,iBAAmB,SAACC,GACzB,OAAAF,EAAW74C,GAAGqkC,GAAmB0U,GAAWha,WA+DhD,EAnEA,GCJQ,IAAA5e,GAAmCjC,EAAA,EAAS,MAArC,GAA4BA,EAAA,EAAS,eAArB,GAAYA,EAAA,EAAS,QAE9C3B,GAAS,CACb2B,EAAA,EAAU9c,EACV8c,EAAA,EAAU1c,EACV0c,EAAA,EAAU3K,EACV2K,EAAA,EAAUzR,EACVyR,EAAA,EAAUpd,EACVod,EAAA,EAAUnd,GAGNi4C,GAAY,CAChB96B,EAAA,EAAUzR,EACVyR,EAAA,EAAU6G,EACV7G,EAAA,EAAU1R,EACV0R,EAAA,EAAU9c,EACV8c,EAAA,EAAU1c,EACV0c,EAAA,EAAU3K,EACV2K,EAAA,EAAUzR,EACVyR,EAAA,EAAUpd,EACVod,EAAA,EAAUnd,GAGC6jB,GAAW,CACtB4C,OAAQ,CACNtJ,EAAA,EAAUC,QACVD,EAAA,EAAUE,EACVF,EAAA,EAAUG,EACVH,EAAA,EAAU9C,EACV8C,EAAA,EAAUI,MAEZ6gB,IAAK,CACHjhB,EAAA,EAAUC,QACVD,EAAA,EAAUC,QACVD,EAAA,EAAU4Q,EACV5Q,EAAA,EAAU6Q,EACV7Q,EAAA,EAAU9C,GAEZD,IAAK,CAAC+C,EAAA,EAAUiS,EAAGjS,EAAA,EAAU3R,EAAG2R,EAAA,EAAUkS,GAC1C6oB,OAAQ,CACN/6B,EAAA,EAAUzR,EACVyR,EAAA,EAAU6G,EACV7G,EAAA,EAAU1R,EACV0R,EAAA,EAAUiS,EACVjS,EAAA,EAAU3R,EACV2R,EAAA,EAAUkS,GAEZJ,KAAM,CAAC9R,EAAA,EAAU9b,EAAG8b,EAAA,EAAU3K,EAAG2K,EAAA,EAAUzR,EAAGyR,EAAA,EAAUxR,GACxDwjB,QAAS,CACPhS,EAAA,EAAU1c,EACV0c,EAAA,EAAU3K,EACV2K,EAAA,EAAUpd,EACVod,EAAA,EAAUhZ,EACVgZ,EAAA,EAAUrc,EACVqc,EAAA,EAAUzR,EACVyR,EAAA,EAAU3K,GAEZ2lC,UAAW,CACTh7B,EAAA,EAAU9c,EACV8c,EAAA,EAAU1c,EACV0c,EAAA,EAAUpd,EACVod,EAAA,EAAU3K,EACV2K,EAAA,EAAU1c,EACV0c,EAAA,EAAU9b,EACV8b,EAAA,EAAU3K,EACV2K,EAAA,EAAUzR,EACVyR,EAAA,EAAUxR,GAEZysC,KAAM,CAACj7B,EAAA,EAAU1c,EAAG0c,EAAA,EAAU3K,EAAG2K,EAAA,EAAUyC,EAAGzC,EAAA,EAAUzR,GACxD2sC,MAAO,CAACl7B,EAAA,EAAUxR,EAAGwR,EAAA,EAAUpd,EAAGod,EAAA,EAAUrc,EAAGqc,EAAA,EAAU9c,EAAG8c,EAAA,EAAUzR,GACtE4sC,KAAM,CAACn7B,EAAA,EAAU6G,EAAG7G,EAAA,EAAUyC,EAAGzC,EAAA,EAAUrc,EAAGqc,EAAA,EAAUrc,GACxD0a,OAAM,GACN+8B,YAAY,QAAI/8B,GAAQ,CAAA4D,GAAO,GAAgB,KAC/Co5B,YAAY,QAAIh9B,GAAQ,IAAgB,KACxCi9B,YAAY,QAAIj9B,GAAQ,MACxBk9B,YAAY,QAAIl9B,GAAQ,MACxBy8B,UAAS,GACTU,eAAe,SAAC,GAAgB,IAAYV,IAC5CW,eAAe,SAAC,IAAmBX,IACnCY,eAAe,SAAC,IAAYZ,KCgM9B,SAjPA,YAeE,WAAYa,EAAwB7/B,EAAqB09B,QAAA,IAAAA,IAAAA,GAAA,GAAzD,MACE,YAAMmC,EAAYnC,IAAW,K,OAC7B,EAAK19B,QAAUA,E,EA8NnB,OA/O8B,aAqB5B,YAAA8/B,YAAA,WAGE,GAFAngC,KAAK4+B,4BAED5+B,KAAK6+B,aAAa5zB,GAASu0B,MAAO,OAAO,EAAQv4B,KACrD,GAAIjH,KAAK6+B,aAAa5zB,GAASw0B,OAAQ,OAAO,EAAQt4B,MACtD,GAAInH,KAAK6+B,aAAa5zB,GAASy0B,MAAO,OAAO,EAE7C,IAAM97B,EAAO5D,KAAKE,MAAMg+B,OAExB,GACEt6B,IAASW,EAAA,EAAUiD,UACnBxH,KAAKE,MAAM6+B,UAAU,KAAOx6B,EAAA,EAAUiD,SAEtC,OAAOxH,KAAKogC,oBAEd,GAAIx8B,IAASW,EAAA,EAAUiD,SAAU,OAAOxH,KAAKqgC,iBAC7C,GAAIz8B,IAASW,EAAA,EAAU+C,UAAW,OAAOtH,KAAKsgC,cAC9C,GAAI18B,IAASW,EAAA,EAAUqD,aAAc,OAAO5H,KAAKugC,YACjD,GAAI38B,IAASW,EAAA,EAAUgC,kBAAmB,OAAOvG,KAAKwgC,aACtD,GAAI1C,GAAUl6B,GAAO,OAAO5D,KAAKygC,mBAEjC,MAAM,IAAI,KAAsBzgC,KAAKE,MAAMm+B,WAAYz6B,IAG/C,YAAA68B,iBAAV,WACE,IAAMC,EAAW1gC,KAAKs+B,iBACtBt+B,KAAK4+B,4BAEL,IAAM+B,EAAiB3gC,KAAKE,MAAMqD,SAClC,GAAI25B,GAAQl9B,KAAKE,MAAMg+B,QAAS,CAC9B,IAAM0C,EAAY5gC,KAAKs+B,iBAEvB,GADAt+B,KAAK4+B,4BACD5+B,KAAKE,MAAMg+B,SAAW35B,EAAA,EAAUqvB,EAElC,OADA5zB,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUqvB,GACzB,EAAOvtC,GAAGq6C,EAAUE,GAK/B,OADA5gC,KAAKE,MAAMhL,OAAOyrC,GACX,EAAUt6C,GAAGq6C,IAIZ,YAAAL,eAAV,WACE,IAAIv9B,EAAQ,GAGZ,IADA9C,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUiD,WACxBxH,KAAKE,MAAM+9B,QAAUj+B,KAAKE,MAAMg+B,SAAW35B,EAAA,EAAUkD,aAC3D3E,IAAS,QAAa9C,KAAKE,MAAMi+B,QAInC,OAFAn+B,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUkD,aAEzB4S,EAAA,EAAah0B,GAAGyc,IAGf,YAAAw9B,YAAV,WAKE,IAJA,IAAIO,EAAa,EACbC,GAAY,EACZh+B,EAAQ,IAEJ9C,KAAKE,MAAM+9B,QAAQ,CACzB,IAAMr6B,EAAO5D,KAAKE,MAAMi+B,OAiBxB,GAhBAr7B,IAAS,QAAac,GAGjBk9B,IACCl9B,IAASW,EAAA,EAAU+C,YAAWu5B,GAAc,GAC5Cj9B,IAASW,EAAA,EAAUgD,aAAYs5B,GAAc,IAI/Cj9B,IAASW,EAAA,EAAUw8B,UACrBD,GAAaA,EACJA,IACTA,GAAY,GAIK,IAAfD,EAEF,OAAO3iB,GAAA,EAAU73B,GAAGyc,EAAM5E,UAAU,EAAG4E,EAAMzW,OAAS,IAI1D,MAAM,IAAI,KAA2B2T,KAAKE,MAAMm+B,aAKxC,YAAAkC,UAAV,WACEvgC,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUqD,cAGhC,IADA,IAAIxhB,EAAO,IACH4Z,KAAKE,MAAM+9B,QAAQ,CACzB,IAAMr6B,EAAO5D,KAAKE,MAAMg+B,OACxB,GAAIr2B,EAAajE,IAASwD,EAAYxD,GAAO,MAC7Cxd,IAAQ,QAAawd,GACrB5D,KAAKE,MAAMi+B,OAGb,OAAO,EAAQ93C,GAAGD,IAGV,YAAAo6C,WAAV,WACExgC,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUgC,mBAChCvG,KAAK4+B,4BAGL,IADA,IAAMoC,EAAW,EAAS36B,YAAYrG,KAAKK,SACpCL,KAAKE,MAAMg+B,SAAW35B,EAAA,EAAUkC,oBAAoB,CACzD,IAAMw6B,EAAUjhC,KAAKmgC,cACrBa,EAASz3C,KAAK03C,GACdjhC,KAAK4+B,4BAGP,OADA5+B,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUkC,oBACzBu6B,GAGC,YAAAE,UAAV,WACElhC,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUiD,UAChCxH,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUiD,UAChCxH,KAAK4+B,4BAIL,IAFA,IAAMvzB,EAAgB,IAAIrkB,KAGvBgZ,KAAKE,MAAM+9B,QACZj+B,KAAKE,MAAMg+B,SAAW35B,EAAA,EAAUkD,aAChCzH,KAAKE,MAAM6+B,UAAU,KAAOx6B,EAAA,EAAUkD,aACtC,CACA,IAAMzP,EAAMgI,KAAKugC,YACXz9B,EAAQ9C,KAAKmgC,cACnB90B,EAAK1F,IAAI3N,EAAK8K,GACd9C,KAAK4+B,4BAGP5+B,KAAK4+B,4BACL5+B,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUkD,aAChCzH,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUkD,aAEhC,IAAM3G,EAAOuK,EAAKre,IAAI,EAAQ3G,GAAG,SAEjC,OAAIya,IAAS,EAAQza,GAAG,WACf,GAAW4lB,mBAAmBZ,EAAMrL,KAAKK,SACvCS,IAAS,EAAQza,GAAG,SACtB,GAAY4lB,mBAAmBZ,EAAMrL,KAAKK,SACxCS,IAAS,EAAQza,GAAG,QACtB,EAAY4lB,mBAAmBZ,EAAMrL,KAAKK,SAE1C,EAAQ4L,mBAAmBZ,EAAMrL,KAAKK,UAIvC,YAAA+/B,kBAAV,WACE,IAAMe,EAAWnhC,KAAKE,MAAMm+B,WAEtBhzB,EAAOrL,KAAKkhC,YAIlB,GAFAlhC,KAAK4+B,8BAGF5+B,KAAK6+B,aAAa5zB,GAAS00B,aAC3B3/B,KAAK6+B,aAAa5zB,GAAS20B,aAC3B5/B,KAAK6+B,aAAa5zB,GAAS40B,aAC3B7/B,KAAK6+B,aAAa5zB,GAAS60B,aAC3B9/B,KAAK6+B,aAAa5zB,GAASrI,SAE5B,OAAOyI,EAGT,IACItc,EADEF,EAAQmR,KAAKE,MAAMqD,SAGnBsG,EAASwB,EAAKre,IAAI,EAAQ3G,GAAG,WAC/BwjB,aAAkB,GACpB9a,EAAMF,EAAQgb,EAAOrjB,WACrBwZ,KAAKE,MAAMhL,OAAOnG,GAClBiR,KAAK4+B,4BACA5+B,KAAK6+B,aAAa5zB,GAASo0B,aAC9Br/B,KAAKE,MAAMhL,OAAOrG,GAClBE,EAAMiR,KAAKohC,wBAAwBD,KAGrCpyC,EAAMiR,KAAKohC,wBAAwBD,GAGrC,IAAM10B,EAAWzM,KAAKE,MAAMiG,MAAMtX,EAAOE,GAEzC,OAAO,EAAa1I,GAAGglB,EAAMoB,IAGrB,YAAA20B,wBAAV,SAAkCD,GAKhC,IAHA,IAAIN,EAAa,EACb9xC,EAAMiR,KAAKE,MAAMqD,UAEbvD,KAAKE,MAAM+9B,SACjBlvC,EAAMiR,KAAKE,MAAMqD,SAEbvD,KAAK6+B,aAAa5zB,GAASrI,QAC7Bi+B,GAAc,EAEd7gC,KAAK6+B,aAAa5zB,GAAS80B,gBAC3B//B,KAAK6+B,aAAa5zB,GAAS+0B,gBAC3BhgC,KAAK6+B,aAAa5zB,GAASg1B,gBAC3BjgC,KAAK6+B,aAAa5zB,GAASo0B,WAE3BwB,GAAc,EAEd7gC,KAAKE,MAAMi+B,OAGM,IAAf0C,KAGN,GAAmB,IAAfA,EAAkB,MAAM,IAAI,KAAsBM,GAEtD,OAAOpyC,GA5OF,EAAAsyC,SAAW,SAChBnhC,EACAG,EACA09B,GACG,WAAIuD,EAAgB,GAAWj7C,GAAG6Z,GAAQG,EAAS09B,IAEjD,EAAAwD,cAAgB,SACrBrB,EACA7/B,EACA09B,GACG,YADH,IAAAA,IAAAA,GAAA,GACG,IAAIuD,EAAgBpB,EAAY7/B,EAAS09B,IAoOhD,EA/OA,CAA8B,ICkC9B,SAzDA,YAWE,WAAYqB,EAAyBlpB,GAArC,MACE,YAAM,GAAWipB,iBAAiBC,GAAYA,EAAU/zB,KAAKhL,UAAQ,KAE7DgL,EAAS+zB,EAAS,K,OAE1B,EAAKoC,eAAgB,EACrB,EAAKtrB,kBAAoBA,GAAqB,WAAO,UACrD,EAAKurB,YAAcp2B,EAAKvF,OAAO,EAAQzf,GAAG,SAAU,GAAWG,WAC/D,EAAKk7C,YAAcr2B,EAAKvF,OAAO,EAAQzf,GAAG,KAAM,GAAWG,W,EAoC/D,OAvDoC,aAsB5B,YAAAm7C,iBAAN,W,0HACE,GAAI3hC,KAAKwhC,cACP,MAAM,IAAI,KAAa,wBAAyB,oBAElDxhC,KAAKwhC,eAAgB,EAEfI,EAA0B5hC,KAAK6hC,+BAC5B5zC,EAAM,EAAGC,EAAM0zC,EAAwBv1C,O,wBAAQ4B,EAAMC,GACtD,EAA2B0zC,EAAwB3zC,GAAjD2e,EAAY,eAAErJ,EAAM,SAC5BvD,KAAKE,MAAMhL,OAAO8K,KAAKyhC,YAAcl+B,GAC/B+B,EAAStF,KAAKmgC,cACd7/B,EAAM,EAAOja,GAAGumB,EAAc,GACpC5M,KAAKK,QAAQyB,OAAOxB,EAAKgF,GACrBtF,KAAKkW,oBAAqB,IAAM,WAAhC,OAN2D,M,OAMjC,S,wBANmCjoB,I,+BAU7D,YAAA4zC,6BAAR,WAKE,IADA,IAAMD,EAA0B,GACvB3zC,EAAM,EAAGC,EAAM8R,KAAK0hC,YAAazzC,EAAMC,EAAKD,IAAO,CAC1D+R,KAAK4+B,4BACL,IAAMhyB,EAAe5M,KAAKg+B,cAE1Bh+B,KAAK4+B,4BACL,IAAMr7B,EAASvD,KAAKg+B,cAEpB4D,EAAwBr4C,KAAK,CAAEqjB,aAAY,EAAErJ,OAAM,IAErD,OAAOq+B,GApDF,EAAAE,UAAY,SACjB1C,EACAlpB,GACG,WAAI6rB,EAAsB3C,EAAWlpB,IAmD5C,EAvDA,CAAoC,ICwHpC,SAhHA,WAeE,WAAYkpB,GACVp/B,KAAKwhC,eAAgB,EAErBxhC,KAAKqL,KAAO+zB,EAAU/zB,KACtBrL,KAAKE,MAAQ,GAAWi/B,iBAAiBC,GACzCp/B,KAAKK,QAAUL,KAAKqL,KAAKhL,QAEzB,IAAMY,EAAOjB,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,QAAS,GAE5C27C,EAAQhiC,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,UAC1C,GAAI27C,aAAiB,EAAU,CAC7BhiC,KAAKsT,YAAc,GACnB,IAAK,IAAIrlB,EAAM,EAAGC,EAAM8zC,EAAMt0C,OAAQO,EAAMC,EAAKD,GAAO,EAAG,CACzD,IAAMumB,EAAoBwtB,EAAMl8B,OAAO7X,EAAM,EAAG,GAAWzH,WACrD,EAASw7C,EAAMl8B,OAAO7X,EAAM,EAAG,GAAWzH,WAChDwZ,KAAKsT,YAAY/pB,KAAK,CAAEirB,kBAAiB,EAAEnoB,OAAM,UAGnD2T,KAAKsT,YAAc,CAAC,CAAEkB,kBAAmB,EAAGnoB,OAAQ4U,EAAKza,aAG3D,IAAM83B,EAAIte,KAAKqL,KAAKvF,OAAO,EAAQzf,GAAG,KAAM,GAC5C2Z,KAAK6Y,WAAa,EAAE,GAAI,GAAI,GAC5B,IAAS5qB,EAAM,EAAGC,EAAMowB,EAAE5wB,OAAQO,EAAMC,EAAKD,IAC3C+R,KAAK6Y,WAAW5qB,GAAOqwB,EAAExY,OAAO7X,EAAK,GAAWzH,WAuEtD,OAnEE,YAAAm7C,iBAAA,WACE,GAAI3hC,KAAKwhC,cACP,MAAM,IAAI,KAAa,sBAAuB,oBAkBhD,OAhBAxhC,KAAKwhC,eAAgB,EAErBxhC,KAAKK,QAAQyN,YAAc,CACzB8I,KAAM5W,KAAKqL,KAAKre,IAAI,EAAQ3G,GAAG,SAC/BwwB,QAAS7W,KAAKqL,KAAKre,IAAI,EAAQ3G,GAAG,YAClCywB,KAAM9W,KAAKqL,KAAKre,IAAI,EAAQ3G,GAAG,SAC/B0wB,GAAI/W,KAAKqL,KAAKre,IAAI,EAAQ3G,GAAG,QAGf2Z,KAAKiiC,gBAUf,YAAAA,aAAR,WAIE,IAHA,IAAMz2B,EAAU,GACV,EAAoDxL,KAAK6Y,WAAxDqpB,EAAc,KAAEC,EAAgB,KAAEC,EAAa,KAGhDC,EAAgB,EAAGC,EAAgBtiC,KAAKsT,YAAYjnB,OACxDg2C,EAAgBC,EAChBD,IAIA,IAFM,MAAgCriC,KAAKsT,YAAY+uB,GAA/C7tB,EAAiB,oBAAE,EAAM,SAExB+tB,EAAS,EAAGA,EAAS,EAAQA,IAAU,CAE9C,IADA,IAAI3pC,EAAO,EACF3K,EAAM,EAAGC,EAAMg0C,EAAgBj0C,EAAMC,EAAKD,IACjD2K,EAAQA,GAAQ,EAAKoH,KAAKE,MAAMi+B,OAGlC,IAAI56B,EAAS,EACb,IAAStV,EAAM,EAAGC,EAAMi0C,EAAkBl0C,EAAMC,EAAKD,IACnDsV,EAAUA,GAAU,EAAKvD,KAAKE,MAAMi+B,OAGtC,IAAItxB,EAAmB,EACvB,IAAS5e,EAAM,EAAGC,EAAMk0C,EAAen0C,EAAMC,EAAKD,IAChD4e,EAAoBA,GAAoB,EAAK7M,KAAKE,MAAMi+B,OAInC,IAAnB+D,IAAsBtpC,EAAO,GAEjC,IAAMgU,EAAe4H,EAAoB+tB,EACnCnuB,EAAQ,CACZ9T,IAAK,EAAOja,GAAGumB,EAAcC,GAC7BtJ,OAAM,EACNoQ,QAAkB,IAAT/a,EACT4pC,eAAyB,IAAT5pC,GAGlB4S,EAAQjiB,KAAK6qB,GAIjB,OAAO5I,GA3GF,EAAAs2B,UAAY,SAAC1C,GAClB,WAAIqD,EAAoBrD,IA4G5B,EA9GA,GC0VA,SAjVA,YAcE,WACEsD,EACA1sB,EACA2sB,EACA5E,QAFA,IAAA/nB,IAAAA,EAAA,UACA,IAAA2sB,IAAAA,GAAA,QACA,IAAA5E,IAAAA,GAAA,GAJF,MAME,YAAM,GAAW13C,GAAGq8C,GAAW,EAAWnzB,SAAUwuB,IAAW,K,OATzD,EAAAyD,eAAgB,EAChB,EAAAvrB,cAAgB,EAqGhB,EAAAC,kBAAoB,WAE1B,OADA,EAAKD,eAAiB,EACf,EAAKA,cAAgB,EAAKD,gBAAmB,GA9FpD,EAAKA,eAAiBA,EACtB,EAAK2sB,qBAAuBA,E,EAyThC,OA/UwB,aAyBhB,YAAAC,cAAN,W,8GACE,GAAI5iC,KAAKwhC,cACP,MAAM,IAAI,KAAa,YAAa,iBAEtCxhC,KAAKwhC,eAAgB,EAErBxhC,KAAKK,QAAQwN,OAAS7N,KAAK6iC,c,wBAGnB7iC,KAAKE,MAAM+9B,OAAM,MACvB,GAAMj+B,KAAK8iC,wB,OAEX,GAFA,UACMv/B,EAASvD,KAAKE,MAAMqD,YACXw/B,EACb,MAAM,IAAI,KAAmB/iC,KAAKE,MAAMm+B,Y,OAE1C0E,EAAax/B,E,aAUf,OAPAvD,KAAKgjC,mBAEDhjC,KAAKK,QAAQyF,OAAO,EAAOzf,GAAG,MAChCuiC,QAAQ4V,KAAK,iCACbx+B,KAAKK,QAAQqL,OAAO,EAAOrlB,GAAG,KAGzB,CAAP,EAAO2Z,KAAKK,iBAGN,YAAA2iC,iBAAR,WACE,IAAMC,EAAiB,SAACzhC,GACtB,OAAAA,aAAe,GACfA,EAAIsE,OAAO,EAAQzf,GAAG,WAAa,EAAQA,GAAG,YAIhD,IAAK48C,EAFWjjC,KAAKK,QAAQyF,OAAO9F,KAAKK,QAAQyN,YAAY8I,OAI3D,IADA,IAAM7I,EAAkB/N,KAAKK,QAAQgO,2BAC5BpgB,EAAM,EAAGC,EAAM6f,EAAgB1hB,OAAQ4B,EAAMC,EAAKD,IAAO,CAC1D,MAAgB8f,EAAgB9f,GAA/BqS,EAAG,KACN2iC,EADc,QAEhBjjC,KAAKK,QAAQyN,YAAY8I,KAAOtW,KAMhC,YAAAuiC,YAAR,WACE,MAAQ7iC,KAAKE,MAAM+9B,QAAQ,CACzB,GAAIj+B,KAAK6+B,aAAa5zB,GAAS4C,QAAS,CACtC,IAAM/J,EAAQ9D,KAAKg+B,cACnBh+B,KAAKE,MAAM4+B,WAAWv6B,EAAA,EAAUK,QAChC,IAAMb,EAAQ/D,KAAKg+B,cACbnwB,EAAS,EAAU/I,WAAWhB,EAAOC,GAE3C,OADA/D,KAAKkjC,0BACEr1B,EAET7N,KAAKE,MAAMi+B,OAGb,MAAM,IAAI,KAAsBn+B,KAAKE,MAAMm+B,aAGrC,YAAA8E,0BAAR,WACEnjC,KAAK4+B,4BACL,IAAMhyB,EAAe5M,KAAKg+B,cAE1Bh+B,KAAK4+B,4BACL,IAAM/xB,EAAmB7M,KAAKg+B,cAG9B,GADAh+B,KAAK4+B,6BACA5+B,KAAK6+B,aAAa5zB,GAASzJ,KAC9B,MAAM,IAAI,KAAoBxB,KAAKE,MAAMm+B,WAAYpzB,GAASzJ,KAGhE,OAAO,EAAOnb,GAAGumB,EAAcC,IAGzB,YAAAu2B,0BAAR,WACE,IAAM9+B,EAAgBtE,KAAKE,MAAMqD,SACjC,IAEE,OADAvD,KAAKmjC,6BACE,EACP,MAAOrwC,GAEP,OADAkN,KAAKE,MAAMhL,OAAOoP,IACX,IASG,YAAA++B,oBAAd,W,qHACQ/iC,EAAMN,KAAKmjC,4BAEjBnjC,KAAK4+B,4BACCt5B,EAAStF,KAAKmgC,cAEpBngC,KAAK4+B,4BAML5+B,KAAK6+B,aAAa5zB,GAASq0B,QAGzBh6B,aAAkB,GAClBA,EAAO+F,KAAKvF,OAAO,EAAQzf,GAAG,WAAa,EAAQA,GAAG,UAEtD,GAAM,GAAsBy7C,UAC1Bx8B,EACAtF,KAAKkW,mBACLyrB,oBANF,M,cAGA,S,aAKAr8B,aAAkB,GAClBA,EAAO+F,KAAKvF,OAAO,EAAQzf,GAAG,WAAa,EAAQA,GAAG,QAEtD,GAAoBy7C,UAAUx8B,GAAQq8B,mBAEtC3hC,KAAKK,QAAQyB,OAAOxB,EAAKgF,G,iBAG3B,MAAO,CAAP,EAAOhF,WAID,YAAAgjC,gCAAR,WACE,IAAMnC,EAAWnhC,KAAKE,MAAMm+B,WAEtB/7B,EAAM,mCAAmCpJ,KAAKC,UAAUgoC,GAAS,IACvE,GAAInhC,KAAK2iC,qBAAsB,MAAM,IAAIpgC,MAAMD,GAC/CsmB,QAAQ4V,KAAKl8B,GAEb,IAAMhC,EAAMN,KAAKmjC,4BAEjBva,QAAQ4V,KAAK,uBAAuBl+B,GAEpCN,KAAK4+B,4BAIL,IAHA,IAAM/vC,EAAQmR,KAAKE,MAAMqD,SAErBggC,GAAS,GACLvjC,KAAKE,MAAM+9B,SACbj+B,KAAK6+B,aAAa5zB,GAASq0B,UAC7BiE,GAAS,GAENA,IACLvjC,KAAKE,MAAMi+B,OAGb,GAAIoF,EAAQ,MAAM,IAAI,KAA6BpC,GAEnD,IAAMpyC,EAAMiR,KAAKE,MAAMqD,SAAW0H,GAASq0B,OAAOjzC,OAE5CiZ,EAAS,EAAiBjf,GAAG2Z,KAAKE,MAAMiG,MAAMtX,EAAOE,IAG3D,OAFAiR,KAAKK,QAAQyB,OAAOxB,EAAKgF,GAElBhF,GAGK,YAAAkjC,qBAAd,W,4GACExjC,KAAK4+B,4B,oBAEG5+B,KAAKE,MAAM+9B,SAAUf,GAAQl9B,KAAKE,MAAMg+B,QAAO,YAC/C55B,EAAgBtE,KAAKE,MAAMqD,S,iBAG/B,O,sBAAA,GAAMvD,KAAKqjC,uB,cAAX,S,6BAGArjC,KAAKE,MAAMhL,OAAOoP,GAClBtE,KAAKsjC,kC,oBAEPtjC,KAAK4+B,4BAGL5+B,KAAKyjC,gBAEDzjC,KAAKkW,oBAAqB,IAAM,WAAhC,M,OAA0B,S,sDAI1B,YAAAwtB,0BAAR,WAEE,GADA1jC,KAAK4+B,4BACA5+B,KAAK6+B,aAAa5zB,GAASoL,MAAhC,CACArW,KAAK4+B,4BAKL,IAHA,IAAIhyB,GAAgB,EACdyJ,EAAO,EAAmBpB,eAExBjV,KAAKE,MAAM+9B,QAAUf,GAAQl9B,KAAKE,MAAMg+B,SAAS,CACvD,IAAMyF,EAAW3jC,KAAKg+B,cACtBh+B,KAAK4+B,4BAEL,IAAMgF,EAAY5jC,KAAKg+B,cACvBh+B,KAAK4+B,4BAEL,IAAMh7B,EAAO5D,KAAKE,MAAMg+B,OACxB,GAAIt6B,IAASW,EAAA,EAAU6G,GAAKxH,IAASW,EAAA,EAAUxR,EAAG,CAChD,IAAMuN,EAAM,EAAOja,GAAGumB,EAAcg3B,GAChC5jC,KAAKE,MAAMi+B,SAAW55B,EAAA,EAAU6G,EAClCiL,EAAK5C,SAASnT,EAAKqjC,GAGnBttB,EAAKzC,gBAAgBtT,EAAKqjC,GAE5B/2B,GAAgB,OAEhBA,EAAe+2B,EAEjB3jC,KAAK4+B,4BAGP,OAAOvoB,IAGD,YAAAwtB,sBAAR,WAEE,GADA7jC,KAAK4+B,4BACA5+B,KAAK6+B,aAAa5zB,GAASsL,SAAhC,CACAvW,KAAK4+B,4BAEL,IAAMvzB,EAAOrL,KAAKkhC,YAEV7gC,EAAYL,KAAI,QACxBK,EAAQyN,YAAc,CACpB8I,KAAMvL,EAAKre,IAAI,EAAQ3G,GAAG,UAAYga,EAAQyN,YAAY8I,KAC1DC,QAASxL,EAAKre,IAAI,EAAQ3G,GAAG,aAAega,EAAQyN,YAAY+I,QAChEC,KAAMzL,EAAKre,IAAI,EAAQ3G,GAAG,UAAYga,EAAQyN,YAAYgJ,KAC1DC,GAAI1L,EAAKre,IAAI,EAAQ3G,GAAG,QAAUga,EAAQyN,YAAYiJ,MAIlD,YAAA+sB,kBAAR,WAEE,GADA9jC,KAAK4+B,4BACA5+B,KAAK6+B,aAAa5zB,GAASs0B,WAAhC,CACAv/B,KAAK4+B,4BAEL,IAAMr7B,EAASvD,KAAKg+B,cAQpB,OANAh+B,KAAKy+B,iBACLz+B,KAAK6+B,aAAa5zB,GAASua,KAC3BxlB,KAAK4+B,4BACL5+B,KAAK6+B,aAAa5zB,GAASua,KAC3BxlB,KAAK4+B,4BAEE,EAAWvpB,6BAA6B9R,KAGnC,YAAAu/B,qBAAd,W,sGACE,SAAM9iC,KAAKwjC,wB,cAAX,SACAxjC,KAAK0jC,4BACL1jC,KAAK6jC,wBACL7jC,KAAK8jC,oBAGL9jC,KAAKyjC,gB,YASC,YAAAA,cAAR,WAEE,IADAzjC,KAAK4+B,6BACG5+B,KAAKE,MAAM+9B,QAAQ,CACzB,IAAM35B,EAAgBtE,KAAKE,MAAMqD,SAC3BK,EAAO5D,KAAKE,MAAMg+B,OAExB,GADuBt6B,GAAQW,EAAA,EAAUiC,OAAS5C,GAAQW,EAAA,EAAUmE,QAGhE1I,KAAK6+B,aAAa5zB,GAASoL,OAC3BrW,KAAK6+B,aAAa5zB,GAASsL,UAC3BvW,KAAK6+B,aAAa5zB,GAASs0B,YAC3Bv/B,KAAKojC,6BACL,CACApjC,KAAKE,MAAMhL,OAAOoP,GAClB,MAGJtE,KAAKE,MAAMi+B,SAiBP,YAAA+E,wBAAR,WACEljC,KAAK4+B,4BACL,IACE,IAAMt6B,EAAgBtE,KAAKE,MAAMqD,SACjCvD,KAAKmjC,4BACLnjC,KAAKE,MAAMhL,OAAOoP,GAClB,MAAOxR,GACPkN,KAAKE,MAAMi+B,OACXn+B,KAAK4+B,8BA3UF,EAAAmF,oBAAsB,SAC3BrB,EACA1sB,EACA2sB,EACA5E,GAEA,WAAIiG,EAAUtB,EAAU1sB,EAAgB2sB,EAAsB5E,IAwUlE,EA/UA,CAAwB,IC1BxB,IAGYkG,GAHN,GAAO,SAACzM,GAAqB,UAAKA,IAGxC,SAAYyM,GAOV,cAAY,GAAK,IAAM,YAYvB,WAAS,GAAK,IAAM,SASpB,UAAQ,GAAK,IAAM,QAQnB,WAAS,GAAK,IAAM,SAOpB,aAAW,GAAK,IAAM,WAQtB,WAAS,GAAK,IAAM,SAWpB,aAAW,GAAK,IAAM,WAQtB,WAAS,GAAK,IAAM,SAQpB,iBAAe,GAAK,IAAM,eAO1B,mBAAiB,GAAK,IAAO,iBArF/B,CAAYA,KAAAA,GAAe,M,+EC0F3B,QAhFA,YAgBE,WAAYnhC,GAAZ,MACE,cAAO,K,OACP,EAAKA,MAAQA,E,EA4DjB,OA9E2B,aAqBzB,YAAA6F,QAAA,WAWE,IATA,IAAMC,EAAM5I,KAAK8C,OAAS9C,KAAK8C,MAAMzW,OAAS,GAAM,EAAI,IAAM,IACxD63C,EAAYt7B,EAAIvc,OAEhB6T,EAAQ,IAAImH,WAAWuB,EAAIvc,OAAS,GAEtC83C,EAAY,EACZC,EAAc,EAGXD,EAAYD,GAAW,CAC5B,IAAMtgC,EAAOsF,SAASN,EAAI1K,UAAUimC,EAAWA,EAAY,GAAI,IAC/DjkC,EAAMkkC,GAAexgC,EAErBugC,GAAa,EACbC,GAAe,EAGjB,OAAOlkC,GAGT,YAAAiJ,WAAA,WACE,IAAMjJ,EAAQF,KAAK2I,UACnB,OAAI,QAAYzI,IAAe,QAAYA,IACpC,QAAqBA,IAG9B,YAAAmkC,WAAA,WACE,IAAMpuC,EAAO+J,KAAKmJ,aACZm7B,GAAO,QAAUruC,GACvB,IAAKquC,EAAM,MAAM,IAAI,KAA0BruC,GAC/C,OAAOquC,GAGT,YAAAh7B,SAAA,WACE,OAAOtJ,KAAK8C,OAGd,YAAAoC,MAAA,WACE,OAAOmV,EAAah0B,GAAG2Z,KAAK8C,QAG9B,YAAAmB,SAAA,WACE,MAAO,IAAIjE,KAAK8C,MAAK,KAGvB,YAAAqB,YAAA,WACE,OAAOnE,KAAK8C,MAAMzW,OAAS,GAG7B,YAAA+X,cAAA,SAAcC,EAAoBd,GAIhC,OAHAc,EAAOd,KAAY,IAAUiE,SAC7BjE,IAAU,QAAqBvD,KAAK8C,MAAOuB,EAAQd,GACnDc,EAAOd,KAAY,IAAUkE,YACtBzH,KAAK8C,MAAMzW,OAAS,GA3EtB,EAAAhG,GAAK,SAACyc,GAAkB,WAAIuX,EAAavX,IAEzC,EAAAnB,SAAW,SAACmB,GAIjB,IAHA,IAAMrR,GAAU,QAAYqR,GAExB8F,EAAM,GACD3a,EAAM,EAAGC,EAAMuD,EAAQpF,OAAQ4B,EAAMC,EAAKD,IACjD2a,IAAO,QAAuBnX,EAAQxD,GAAM,GAG9C,OAAO,IAAIosB,EAAazR,IAmE5B,EA9EA,CAA2B,M,4CCQ3B,QAlBA,yBAgBA,OAfE,YAAA1D,MAAA,SAAMgH,GACJ,MAAM,IAAI,KAA0BlM,KAAK0C,YAAYtc,KAAM,UAG7D,YAAA6d,SAAA,WACE,MAAM,IAAI,KAA0BjE,KAAK0C,YAAYtc,KAAM,aAG7D,YAAA+d,YAAA,WACE,MAAM,IAAI,KAA0BnE,KAAK0C,YAAYtc,KAAM,gBAG7D,YAAAge,cAAA,SAAcmgC,EAAqBC,GACjC,MAAM,IAAI,KAA0BxkC,KAAK0C,YAAYtc,KAAM,kBAE/D,EAhBA,I,+ECkHA,QAxGA,YAkBE,WAAoB0c,GAApB,MACE,cAAO,K,OACP,EAAKA,MAAQA,E,EAkFjB,OAtGwB,aAuBtB,YAAA6F,QAAA,WAWE,IAVA,IAAMzI,EAAkB,GAEpBukC,EAAQ,GACR57B,GAAU,EAERC,EAAW,SAAClF,QACH/T,IAAT+T,GAAoB1D,EAAM3W,KAAKqa,GACnCiF,GAAU,GAGH5a,EAAM,EAAGC,EAAM8R,KAAK8C,MAAMzW,OAAQ4B,EAAMC,EAAKD,IAAO,CAC3D,IAAMyR,EAAOM,KAAK8C,MAAM7U,GAClB2V,GAAO,QAAWlE,GAClBqJ,EAAW/I,KAAK8C,MAAM7U,EAAM,GAC7B4a,EAICjF,IAAS,IAAUiB,SACdjB,IAAS,IAAUqE,eADIa,IAEvBlF,IAAS,IAAUwH,EAAGtC,EAAS,IAAUjE,SACzCjB,IAAS,IAAUhK,EAAGkP,EAAS,IAAUb,gBACzCrE,IAAS,IAAU/b,EAAGihB,EAAS,IAAUf,KACzCnE,IAAS,IAAUhR,EAAGkW,EAAS,IAAU47B,WACzC9gC,IAAS,IAAU7Q,EAAG+V,EAAS,IAAUd,UACzCpE,IAAS,IAAU0D,UAAWwB,EAAS,IAAUxB,WACjD1D,IAAS,IAAU2D,WAAYuB,EAAS,IAAUvB,YAClD3D,IAAS,IAAU8gC,UAAW57B,EAAS,IAAUi4B,WACjDn9B,GAAQ,IAAUoF,MAAQpF,GAAQ,IAAU65B,MAE9B,KADrBgH,GAAS/kC,GACCrT,QAAkB0c,GAAY,KAAOA,GAAY,MACzDD,EAASI,SAASu7B,EAAO,IACzBA,EAAQ,IAGV37B,EAASlF,GApBPA,IAAS,IAAUm9B,UAAWl4B,GAAU,EACvCC,EAASlF,GAwBlB,OAAO,IAAIyD,WAAWnH,IAGxB,YAAAiJ,WAAA,WACE,IAAMjJ,EAAQF,KAAK2I,UACnB,OAAI,QAAYzI,IAAe,QAAYA,IACpC,QAAqBA,IAG9B,YAAAmkC,WAAA,WACE,IAAMpuC,EAAO+J,KAAKmJ,aACZm7B,GAAO,QAAUruC,GACvB,IAAKquC,EAAM,MAAM,IAAI,KAA0BruC,GAC/C,OAAOquC,GAGT,YAAAh7B,SAAA,WACE,OAAOtJ,KAAK8C,OAGd,YAAAoC,MAAA,WACE,OAAOgZ,EAAU73B,GAAG2Z,KAAK8C,QAG3B,YAAAmB,SAAA,WACE,MAAO,IAAIjE,KAAK8C,MAAK,KAGvB,YAAAqB,YAAA,WACE,OAAOnE,KAAK8C,MAAMzW,OAAS,GAG7B,YAAA+X,cAAA,SAAcC,EAAoBd,GAIhC,OAHAc,EAAOd,KAAY,IAAU+D,UAC7B/D,IAAU,QAAqBvD,KAAK8C,MAAOuB,EAAQd,GACnDc,EAAOd,KAAY,IAAUgE,WACtBvH,KAAK8C,MAAMzW,OAAS,GAhGtB,EAAAhG,GAAK,SAACyc,GAAkB,WAAIob,EAAUpb,IAEtC,EAAA3B,SAAW,SAACmjC,GAOjB,OAAO,IAAIpmB,EAAU,MANR,QAASla,OAAOsgC,EAAKK,kBAAmB,EAAG,MAC1C,QAAS3gC,OAAOsgC,EAAKM,cAAgB,GAAI,EAAG,MAC9C,QAAS5gC,OAAOsgC,EAAKO,cAAe,EAAG,MACrC,QAAS7gC,OAAOsgC,EAAKQ,eAAgB,EAAG,MACzC,QAAS9gC,OAAOsgC,EAAKS,iBAAkB,EAAG,MAC1C,QAAS/gC,OAAOsgC,EAAKU,iBAAkB,EAAG,KACW,MAyFtE,EAtGA,CAAwB,M,cCbxB,IAAKzgC,E,iBAAL,SAAKA,GACH,mBACA,6BACA,iBACA,0BACA,4BACA,wCACA,sBACA,4CACA,oBACA,0BACA,8BACA,gCACA,oBACA,sBACA,oBACA,wBACA,oCACA,oBACA,kBACA,kBACA,sBACA,oBACA,oBACA,kBACA,sBACA,sBACA,oBACA,4BACA,kCACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,8CACA,8BACA,gDACA,cACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,+BACA,iCACA,uBA1DF,CAAKA,IAAAA,EAAS,KA6Dd","sources":["webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/api/objects.ts?fb51","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/api/svgPath.ts?2e93","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/api/operations.ts?c40d","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/api/operators.ts?ab31","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/api/rotations.ts?a0b7","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/api/sizes.ts?29d2","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/api/text/alignment.ts?fb64","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/api/text/layout.ts?9ec0","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/embedders/FileEmbedder.ts?b072","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/embedders/JavaScriptEmbedder.ts?acdf","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/errors.ts?b620","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/document/PDFHeader.ts?8c2e","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFNumber.ts?8945","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFArray.ts?997d","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFBool.ts?e20e","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/syntax/Delimiters.ts?22e0","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/syntax/Whitespace.ts?da65","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/syntax/Irregular.ts?ffa1","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFName.ts?f937","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFNull.ts?ab38","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFDict.ts?6c52","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFStream.ts?b826","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFRawStream.ts?540c","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFRef.ts?27cd","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/operators/PDFOperator.ts?f663","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/operators/PDFOperatorNames.ts?8a67","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/structures/PDFFlateStream.ts?6df3","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/structures/PDFContentStream.ts?f6cd","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/PDFContext.ts?1185","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/structures/PDFPageLeaf.ts?5ef6","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/PDFObjectCopier.ts?168c","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/document/PDFCrossRefSection.ts?da6d","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/document/PDFTrailer.ts?784b","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/document/PDFTrailerDict.ts?5b11","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/structures/PDFObjectStream.ts?a8ba","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/writers/PDFWriter.ts?194d","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFInvalidObject.ts?f02e","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/structures/PDFCrossRefStream.ts?3f60","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/writers/PDFStreamWriter.ts?14cf","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/embedders/StandardFontEmbedder.ts?a76b","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/embedders/CMap.ts?9ed0","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/embedders/CustomFontEmbedder.ts?a428","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/embedders/FontFlags.ts?d555","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/embedders/CustomFontSubsetEmbedder.ts?9b87","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/embedders/JpegEmbedder.ts?b1fa","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/embedders/PngEmbedder.ts?9bf1","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/streams/Stream.ts?95fb","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/streams/DecodeStream.ts?4178","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/streams/Ascii85Stream.ts?f1e9","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/streams/AsciiHexStream.ts?ceb6","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/streams/FlateStream.ts?03e3","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/streams/LZWStream.ts?04d4","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/streams/RunLengthStream.ts?dd65","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/streams/decode.ts?8640","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/embedders/PDFPageEmbedder.ts?9bde","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/interactive/ViewerPreferences.ts?ea0d","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroField.ts?3d79","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/annotation/BorderStyle.ts?2503","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/annotation/PDFAnnotation.ts?ef0c","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/annotation/AppearanceCharacteristics.ts?0463","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/annotation/PDFWidgetAnnotation.ts?a3cb","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroTerminal.ts?fb3b","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroButton.ts?472f","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroCheckBox.ts?d5c3","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/flags.ts?25d8","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroChoice.ts?e2c5","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroComboBox.ts?978d","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroNonTerminal.ts?a23f","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroSignature.ts?5826","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroText.ts?188d","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroPushButton.ts?5a36","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroRadioButton.ts?b257","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroListBox.ts?28b5","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/utils.ts?b623","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/acroform/PDFAcroForm.ts?3449","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/structures/PDFCatalog.ts?b5d2","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/structures/PDFPageTree.ts?d6d9","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/syntax/Numeric.ts?7fb3","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/parser/BaseParser.ts?5578","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/parser/ByteStream.ts?5dd6","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/syntax/Keywords.ts?f91a","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/parser/PDFObjectParser.ts?5db1","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/parser/PDFObjectStreamParser.ts?ef9f","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/parser/PDFXRefStreamParser.ts?028b","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/parser/PDFParser.ts?0c1e","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/annotation/flags.ts?c522","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFHexString.ts?9b22","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFObject.ts?6f75","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/objects/PDFString.ts?28a4","webpack://Msdyn365.Commerce.Online/./node_modules/pdf-lib/src/core/syntax/CharCodes.ts?b8b2"],"sourcesContent":["import { PDFName, PDFNumber } from 'src/core';\n\nexport const asPDFName = (name: string | PDFName) =>\n name instanceof PDFName ? name : PDFName.of(name);\n\nexport const asPDFNumber = (num: number | PDFNumber) =>\n num instanceof PDFNumber ? num : PDFNumber.of(num);\n\nexport const asNumber = (num: number | PDFNumber) =>\n num instanceof PDFNumber ? num.asNumber() : num;\n","// Originated from pdfkit Copyright (c) 2014 Devon Govett\n// https://github.com/foliojs/pdfkit/blob/1e62e6ffe24b378eb890df507a47610f4c4a7b24/lib/path.js\n// MIT LICENSE\n// Updated for pdf-lib & TypeScript by Jeremy Messenger\n\nimport {\n appendBezierCurve,\n appendQuadraticCurve,\n closePath,\n lineTo,\n moveTo,\n} from 'src/api/operators';\nimport { PDFOperator } from 'src/core';\n\nlet cx: number = 0;\nlet cy: number = 0;\nlet px: number | null = 0;\nlet py: number | null = 0;\nlet sx: number = 0;\nlet sy: number = 0;\n\nconst parameters = new Map([\n ['A', 7],\n ['a', 7],\n ['C', 6],\n ['c', 6],\n ['H', 1],\n ['h', 1],\n ['L', 2],\n ['l', 2],\n ['M', 2],\n ['m', 2],\n ['Q', 4],\n ['q', 4],\n ['S', 4],\n ['s', 4],\n ['T', 2],\n ['t', 2],\n ['V', 1],\n ['v', 1],\n ['Z', 0],\n ['z', 0],\n]);\n\ninterface Cmd {\n cmd?: string;\n args: number[];\n}\n\nconst parse = (path: string) => {\n let cmd;\n const ret: Cmd[] = [];\n let args: number[] = [];\n let curArg = '';\n let foundDecimal = false;\n let params = 0;\n\n for (const c of path) {\n if (parameters.has(c)) {\n params = parameters.get(c)!;\n if (cmd) {\n // save existing command\n if (curArg.length > 0) {\n args[args.length] = +curArg;\n }\n ret[ret.length] = { cmd, args };\n\n args = [];\n curArg = '';\n foundDecimal = false;\n }\n\n cmd = c;\n } else if (\n [' ', ','].includes(c) ||\n (c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') ||\n (c === '.' && foundDecimal)\n ) {\n if (curArg.length === 0) {\n continue;\n }\n\n if (args.length === params) {\n // handle reused commands\n ret[ret.length] = { cmd, args };\n args = [+curArg];\n\n // handle assumed commands\n if (cmd === 'M') {\n cmd = 'L';\n }\n if (cmd === 'm') {\n cmd = 'l';\n }\n } else {\n args[args.length] = +curArg;\n }\n\n foundDecimal = c === '.';\n\n // fix for negative numbers or repeated decimals with no delimeter between commands\n curArg = ['-', '.'].includes(c) ? c : '';\n } else {\n curArg += c;\n if (c === '.') {\n foundDecimal = true;\n }\n }\n }\n\n // add the last command\n if (curArg.length > 0) {\n if (args.length === params) {\n // handle reused commands\n ret[ret.length] = { cmd, args };\n args = [+curArg];\n\n // handle assumed commands\n if (cmd === 'M') {\n cmd = 'L';\n }\n if (cmd === 'm') {\n cmd = 'l';\n }\n } else {\n args[args.length] = +curArg;\n }\n }\n\n ret[ret.length] = { cmd, args };\n\n return ret;\n};\n\nconst apply = (commands: Cmd[]) => {\n // current point, control point, and subpath starting point\n cx = cy = px = py = sx = sy = 0;\n\n // run the commands\n let cmds: PDFOperator[] = [];\n for (let i = 0; i < commands.length; i++) {\n const c = commands[i];\n if (c.cmd && typeof runners[c.cmd] === 'function') {\n const cmd = runners[c.cmd](c.args);\n if (Array.isArray(cmd)) {\n cmds = cmds.concat(cmd);\n } else {\n cmds.push(cmd);\n }\n }\n }\n return cmds;\n};\n\ninterface CmdToOperatorsMap {\n [cmd: string]: (a: number[]) => PDFOperator | PDFOperator[];\n}\n\nconst runners: CmdToOperatorsMap = {\n M(a) {\n cx = a[0];\n cy = a[1];\n px = py = null;\n sx = cx;\n sy = cy;\n return moveTo(cx, cy);\n },\n\n m(a) {\n cx += a[0];\n cy += a[1];\n px = py = null;\n sx = cx;\n sy = cy;\n return moveTo(cx, cy);\n },\n\n C(a) {\n cx = a[4];\n cy = a[5];\n px = a[2];\n py = a[3];\n return appendBezierCurve(a[0], a[1], a[2], a[3], a[4], a[5]);\n },\n\n c(a) {\n const cmd = appendBezierCurve(\n a[0] + cx,\n a[1] + cy,\n a[2] + cx,\n a[3] + cy,\n a[4] + cx,\n a[5] + cy,\n );\n px = cx + a[2];\n py = cy + a[3];\n cx += a[4];\n cy += a[5];\n return cmd;\n },\n\n S(a) {\n if (px === null || py === null) {\n px = cx;\n py = cy;\n }\n\n const cmd = appendBezierCurve(\n cx - (px - cx),\n cy - (py - cy),\n a[0],\n a[1],\n a[2],\n a[3],\n );\n px = a[0];\n py = a[1];\n cx = a[2];\n cy = a[3];\n return cmd;\n },\n\n s(a) {\n if (px === null || py === null) {\n px = cx;\n py = cy;\n }\n\n const cmd = appendBezierCurve(\n cx - (px - cx),\n cy - (py - cy),\n cx + a[0],\n cy + a[1],\n cx + a[2],\n cy + a[3],\n );\n px = cx + a[0];\n py = cy + a[1];\n cx += a[2];\n cy += a[3];\n return cmd;\n },\n\n Q(a) {\n px = a[0];\n py = a[1];\n cx = a[2];\n cy = a[3];\n return appendQuadraticCurve(a[0], a[1], cx, cy);\n },\n\n q(a) {\n const cmd = appendQuadraticCurve(\n a[0] + cx,\n a[1] + cy,\n a[2] + cx,\n a[3] + cy,\n );\n px = cx + a[0];\n py = cy + a[1];\n cx += a[2];\n cy += a[3];\n return cmd;\n },\n\n T(a) {\n if (px === null || py === null) {\n px = cx;\n py = cy;\n } else {\n px = cx - (px - cx);\n py = cy - (py - cy);\n }\n\n const cmd = appendQuadraticCurve(px, py, a[0], a[1]);\n px = cx - (px - cx);\n py = cy - (py - cy);\n cx = a[0];\n cy = a[1];\n return cmd;\n },\n\n t(a) {\n if (px === null || py === null) {\n px = cx;\n py = cy;\n } else {\n px = cx - (px - cx);\n py = cy - (py - cy);\n }\n\n const cmd = appendQuadraticCurve(px, py, cx + a[0], cy + a[1]);\n cx += a[0];\n cy += a[1];\n return cmd;\n },\n\n A(a) {\n const cmds = solveArc(cx, cy, a);\n cx = a[5];\n cy = a[6];\n return cmds;\n },\n\n a(a) {\n a[5] += cx;\n a[6] += cy;\n const cmds = solveArc(cx, cy, a);\n cx = a[5];\n cy = a[6];\n return cmds;\n },\n\n L(a) {\n cx = a[0];\n cy = a[1];\n px = py = null;\n return lineTo(cx, cy);\n },\n\n l(a) {\n cx += a[0];\n cy += a[1];\n px = py = null;\n return lineTo(cx, cy);\n },\n\n H(a) {\n cx = a[0];\n px = py = null;\n return lineTo(cx, cy);\n },\n\n h(a) {\n cx += a[0];\n px = py = null;\n return lineTo(cx, cy);\n },\n\n V(a) {\n cy = a[0];\n px = py = null;\n return lineTo(cx, cy);\n },\n\n v(a) {\n cy += a[0];\n px = py = null;\n return lineTo(cx, cy);\n },\n\n Z() {\n const cmd = closePath();\n cx = sx;\n cy = sy;\n return cmd;\n },\n\n z() {\n const cmd = closePath();\n cx = sx;\n cy = sy;\n return cmd;\n },\n};\n\nconst solveArc = (x: number, y: number, coords: number[]) => {\n const [rx, ry, rot, large, sweep, ex, ey] = coords;\n const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\n\n const cmds: PDFOperator[] = [];\n for (const seg of segs) {\n const bez = segmentToBezier(...seg);\n cmds.push(appendBezierCurve(...bez));\n }\n return cmds;\n};\n\ntype Segment = [number, number, number, number, number, number, number, number];\ntype Bezier = [number, number, number, number, number, number];\n\n// from Inkscape svgtopdf, thanks!\nconst arcToSegments = (\n x: number,\n y: number,\n rx: number,\n ry: number,\n large: number,\n sweep: number,\n rotateX: number,\n ox: number,\n oy: number,\n) => {\n const th = rotateX * (Math.PI / 180);\n const sinTh = Math.sin(th);\n const cosTh = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n px = cosTh * (ox - x) * 0.5 + sinTh * (oy - y) * 0.5;\n py = cosTh * (oy - y) * 0.5 - sinTh * (ox - x) * 0.5;\n let pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n const a00 = cosTh / rx;\n const a01 = sinTh / rx;\n const a10 = -sinTh / ry;\n const a11 = cosTh / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactorSq = 1 / d - 0.25;\n if (sfactorSq < 0) {\n sfactorSq = 0;\n }\n let sfactor = Math.sqrt(sfactorSq);\n if (sweep === large) {\n sfactor = -sfactor;\n }\n\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n\n let thArc = th1 - th0;\n if (thArc < 0 && sweep === 1) {\n thArc += 2 * Math.PI;\n } else if (thArc > 0 && sweep === 0) {\n thArc -= 2 * Math.PI;\n }\n\n const segments = Math.ceil(Math.abs(thArc / (Math.PI * 0.5 + 0.001)));\n const result: Segment[] = [];\n\n for (let i = 0; i < segments; i++) {\n const th2 = th0 + (i * thArc) / segments;\n const th3 = th0 + ((i + 1) * thArc) / segments;\n result[i] = [xc, yc, th2, th3, rx, ry, sinTh, cosTh];\n }\n\n return result;\n};\n\nconst segmentToBezier = (\n cx1: number,\n cy1: number,\n th0: number,\n th1: number,\n rx: number,\n ry: number,\n sinTh: number,\n cosTh: number,\n) => {\n const a00 = cosTh * rx;\n const a01 = -sinTh * ry;\n const a10 = sinTh * rx;\n const a11 = cosTh * ry;\n\n const thHalf = 0.5 * (th1 - th0);\n const t =\n ((8 / 3) * Math.sin(thHalf * 0.5) * Math.sin(thHalf * 0.5)) /\n Math.sin(thHalf);\n const x1 = cx1 + Math.cos(th0) - t * Math.sin(th0);\n const y1 = cy1 + Math.sin(th0) + t * Math.cos(th0);\n const x3 = cx1 + Math.cos(th1);\n const y3 = cy1 + Math.sin(th1);\n const x2 = x3 + t * Math.sin(th1);\n const y2 = y3 - t * Math.cos(th1);\n\n const result: Bezier = [\n a00 * x1 + a01 * y1,\n a10 * x1 + a11 * y1,\n a00 * x2 + a01 * y2,\n a10 * x2 + a11 * y2,\n a00 * x3 + a01 * y3,\n a10 * x3 + a11 * y3,\n ];\n return result;\n};\n\nexport const svgPathToOperators = (path: string) => apply(parse(path));\n","import { Color, setFillingColor, setStrokingColor } from 'src/api/colors';\nimport {\n beginText,\n closePath,\n drawObject,\n endText,\n fill,\n fillAndStroke,\n lineTo,\n moveTo,\n nextLine,\n popGraphicsState,\n pushGraphicsState,\n rotateAndSkewTextRadiansAndTranslate,\n rotateRadians,\n scale,\n setFontAndSize,\n setLineHeight,\n setLineWidth,\n showText,\n skewRadians,\n stroke,\n translate,\n LineCapStyle,\n setLineCap,\n rotateDegrees,\n setGraphicsState,\n setDashPattern,\n beginMarkedContent,\n endMarkedContent,\n clip,\n endPath,\n appendBezierCurve,\n} from 'src/api/operators';\nimport { Rotation, degrees, toRadians } from 'src/api/rotations';\nimport { svgPathToOperators } from 'src/api/svgPath';\nimport { PDFHexString, PDFName, PDFNumber, PDFOperator } from 'src/core';\nimport { asNumber } from 'src/api/objects';\n\nexport interface DrawTextOptions {\n color: Color;\n font: string | PDFName;\n size: number | PDFNumber;\n rotate: Rotation;\n xSkew: Rotation;\n ySkew: Rotation;\n x: number | PDFNumber;\n y: number | PDFNumber;\n graphicsState?: string | PDFName;\n}\n\nexport const drawText = (\n line: PDFHexString,\n options: DrawTextOptions,\n): PDFOperator[] =>\n [\n pushGraphicsState(),\n options.graphicsState && setGraphicsState(options.graphicsState),\n beginText(),\n setFillingColor(options.color),\n setFontAndSize(options.font, options.size),\n rotateAndSkewTextRadiansAndTranslate(\n toRadians(options.rotate),\n toRadians(options.xSkew),\n toRadians(options.ySkew),\n options.x,\n options.y,\n ),\n showText(line),\n endText(),\n popGraphicsState(),\n ].filter(Boolean) as PDFOperator[];\n\nexport interface DrawLinesOfTextOptions extends DrawTextOptions {\n lineHeight: number | PDFNumber;\n}\n\nexport const drawLinesOfText = (\n lines: PDFHexString[],\n options: DrawLinesOfTextOptions,\n): PDFOperator[] => {\n const operators = [\n pushGraphicsState(),\n options.graphicsState && setGraphicsState(options.graphicsState),\n beginText(),\n setFillingColor(options.color),\n setFontAndSize(options.font, options.size),\n setLineHeight(options.lineHeight),\n rotateAndSkewTextRadiansAndTranslate(\n toRadians(options.rotate),\n toRadians(options.xSkew),\n toRadians(options.ySkew),\n options.x,\n options.y,\n ),\n ].filter(Boolean) as PDFOperator[];\n\n for (let idx = 0, len = lines.length; idx < len; idx++) {\n operators.push(showText(lines[idx]), nextLine());\n }\n\n operators.push(endText(), popGraphicsState());\n return operators;\n};\n\nexport const drawImage = (\n name: string | PDFName,\n options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n width: number | PDFNumber;\n height: number | PDFNumber;\n rotate: Rotation;\n xSkew: Rotation;\n ySkew: Rotation;\n graphicsState?: string | PDFName;\n },\n): PDFOperator[] =>\n [\n pushGraphicsState(),\n options.graphicsState && setGraphicsState(options.graphicsState),\n translate(options.x, options.y),\n rotateRadians(toRadians(options.rotate)),\n scale(options.width, options.height),\n skewRadians(toRadians(options.xSkew), toRadians(options.ySkew)),\n drawObject(name),\n popGraphicsState(),\n ].filter(Boolean) as PDFOperator[];\n\nexport const drawPage = (\n name: string | PDFName,\n options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n xScale: number | PDFNumber;\n yScale: number | PDFNumber;\n rotate: Rotation;\n xSkew: Rotation;\n ySkew: Rotation;\n graphicsState?: string | PDFName;\n },\n): PDFOperator[] =>\n [\n pushGraphicsState(),\n options.graphicsState && setGraphicsState(options.graphicsState),\n translate(options.x, options.y),\n rotateRadians(toRadians(options.rotate)),\n scale(options.xScale, options.yScale),\n skewRadians(toRadians(options.xSkew), toRadians(options.ySkew)),\n drawObject(name),\n popGraphicsState(),\n ].filter(Boolean) as PDFOperator[];\n\nexport const drawLine = (options: {\n start: { x: number | PDFNumber; y: number | PDFNumber };\n end: { x: number | PDFNumber; y: number | PDFNumber };\n thickness: number | PDFNumber;\n color: Color | undefined;\n dashArray?: (number | PDFNumber)[];\n dashPhase?: number | PDFNumber;\n lineCap?: LineCapStyle;\n graphicsState?: string | PDFName;\n}) =>\n [\n pushGraphicsState(),\n options.graphicsState && setGraphicsState(options.graphicsState),\n options.color && setStrokingColor(options.color),\n setLineWidth(options.thickness),\n setDashPattern(options.dashArray ?? [], options.dashPhase ?? 0),\n moveTo(options.start.x, options.start.y),\n options.lineCap && setLineCap(options.lineCap),\n moveTo(options.start.x, options.start.y),\n lineTo(options.end.x, options.end.y),\n stroke(),\n popGraphicsState(),\n ].filter(Boolean) as PDFOperator[];\n\nexport const drawRectangle = (options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n width: number | PDFNumber;\n height: number | PDFNumber;\n borderWidth: number | PDFNumber;\n color: Color | undefined;\n borderColor: Color | undefined;\n rotate: Rotation;\n xSkew: Rotation;\n ySkew: Rotation;\n borderLineCap?: LineCapStyle;\n borderDashArray?: (number | PDFNumber)[];\n borderDashPhase?: number | PDFNumber;\n graphicsState?: string | PDFName;\n}) =>\n [\n pushGraphicsState(),\n options.graphicsState && setGraphicsState(options.graphicsState),\n options.color && setFillingColor(options.color),\n options.borderColor && setStrokingColor(options.borderColor),\n setLineWidth(options.borderWidth),\n options.borderLineCap && setLineCap(options.borderLineCap),\n setDashPattern(options.borderDashArray ?? [], options.borderDashPhase ?? 0),\n translate(options.x, options.y),\n rotateRadians(toRadians(options.rotate)),\n skewRadians(toRadians(options.xSkew), toRadians(options.ySkew)),\n moveTo(0, 0),\n lineTo(0, options.height),\n lineTo(options.width, options.height),\n lineTo(options.width, 0),\n closePath(),\n\n // prettier-ignore\n options.color && options.borderWidth ? fillAndStroke()\n : options.color ? fill()\n : options.borderColor ? stroke()\n : closePath(),\n\n popGraphicsState(),\n ].filter(Boolean) as PDFOperator[];\n\nconst KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\n\n/** @deprecated */\nexport const drawEllipsePath = (config: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n xScale: number | PDFNumber;\n yScale: number | PDFNumber;\n}): PDFOperator[] => {\n let x = asNumber(config.x);\n let y = asNumber(config.y);\n const xScale = asNumber(config.xScale);\n const yScale = asNumber(config.yScale);\n\n x -= xScale;\n y -= yScale;\n\n const ox = xScale * KAPPA;\n const oy = yScale * KAPPA;\n const xe = x + xScale * 2;\n const ye = y + yScale * 2;\n const xm = x + xScale;\n const ym = y + yScale;\n\n return [\n pushGraphicsState(),\n moveTo(x, ym),\n appendBezierCurve(x, ym - oy, xm - ox, y, xm, y),\n appendBezierCurve(xm + ox, y, xe, ym - oy, xe, ym),\n appendBezierCurve(xe, ym + oy, xm + ox, ye, xm, ye),\n appendBezierCurve(xm - ox, ye, x, ym + oy, x, ym),\n popGraphicsState(),\n ];\n};\n\nconst drawEllipseCurves = (config: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n xScale: number | PDFNumber;\n yScale: number | PDFNumber;\n rotate: Rotation;\n}): PDFOperator[] => {\n const centerX = asNumber(config.x);\n const centerY = asNumber(config.y);\n const xScale = asNumber(config.xScale);\n const yScale = asNumber(config.yScale);\n\n const x = -xScale;\n const y = -yScale;\n\n const ox = xScale * KAPPA;\n const oy = yScale * KAPPA;\n const xe = x + xScale * 2;\n const ye = y + yScale * 2;\n const xm = x + xScale;\n const ym = y + yScale;\n\n return [\n translate(centerX, centerY),\n rotateRadians(toRadians(config.rotate)),\n moveTo(x, ym),\n appendBezierCurve(x, ym - oy, xm - ox, y, xm, y),\n appendBezierCurve(xm + ox, y, xe, ym - oy, xe, ym),\n appendBezierCurve(xe, ym + oy, xm + ox, ye, xm, ye),\n appendBezierCurve(xm - ox, ye, x, ym + oy, x, ym),\n ];\n};\n\nexport const drawEllipse = (options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n xScale: number | PDFNumber;\n yScale: number | PDFNumber;\n rotate?: Rotation;\n color: Color | undefined;\n borderColor: Color | undefined;\n borderWidth: number | PDFNumber;\n borderDashArray?: (number | PDFNumber)[];\n borderDashPhase?: number | PDFNumber;\n graphicsState?: string | PDFName;\n borderLineCap?: LineCapStyle;\n}) =>\n [\n pushGraphicsState(),\n options.graphicsState && setGraphicsState(options.graphicsState),\n options.color && setFillingColor(options.color),\n options.borderColor && setStrokingColor(options.borderColor),\n setLineWidth(options.borderWidth),\n options.borderLineCap && setLineCap(options.borderLineCap),\n setDashPattern(options.borderDashArray ?? [], options.borderDashPhase ?? 0),\n\n // The `drawEllipsePath` branch is only here for backwards compatibility.\n // See https://github.com/Hopding/pdf-lib/pull/511#issuecomment-667685655.\n ...(options.rotate === undefined\n ? drawEllipsePath({\n x: options.x,\n y: options.y,\n xScale: options.xScale,\n yScale: options.yScale,\n })\n : drawEllipseCurves({\n x: options.x,\n y: options.y,\n xScale: options.xScale,\n yScale: options.yScale,\n rotate: options.rotate ?? degrees(0),\n })),\n\n // prettier-ignore\n options.color && options.borderWidth ? fillAndStroke()\n : options.color ? fill()\n : options.borderColor ? stroke()\n : closePath(),\n\n popGraphicsState(),\n ].filter(Boolean) as PDFOperator[];\n\nexport const drawSvgPath = (\n path: string,\n options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n rotate?: Rotation;\n scale: number | PDFNumber | undefined;\n color: Color | undefined;\n borderColor: Color | undefined;\n borderWidth: number | PDFNumber;\n borderDashArray?: (number | PDFNumber)[];\n borderDashPhase?: number | PDFNumber;\n borderLineCap?: LineCapStyle;\n graphicsState?: string | PDFName;\n },\n) =>\n [\n pushGraphicsState(),\n options.graphicsState && setGraphicsState(options.graphicsState),\n\n translate(options.x, options.y),\n rotateRadians(toRadians(options.rotate ?? degrees(0))),\n\n // SVG path Y axis is opposite pdf-lib's\n options.scale ? scale(options.scale, -options.scale) : scale(1, -1),\n\n options.color && setFillingColor(options.color),\n options.borderColor && setStrokingColor(options.borderColor),\n options.borderWidth && setLineWidth(options.borderWidth),\n options.borderLineCap && setLineCap(options.borderLineCap),\n\n setDashPattern(options.borderDashArray ?? [], options.borderDashPhase ?? 0),\n\n ...svgPathToOperators(path),\n\n // prettier-ignore\n options.color && options.borderWidth ? fillAndStroke()\n : options.color ? fill()\n : options.borderColor ? stroke()\n : closePath(),\n\n popGraphicsState(),\n ].filter(Boolean) as PDFOperator[];\n\nexport const drawCheckMark = (options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n size: number | PDFNumber;\n thickness: number | PDFNumber;\n color: Color | undefined;\n}) => {\n const size = asNumber(options.size);\n\n /*********************** Define Check Mark Points ***************************/\n // A check mark is defined by three points in some coordinate space. Here, we\n // define these points in a unit coordinate system, where the range of the x\n // and y axis are both [-1, 1].\n //\n // Note that we do not hard code `p1y` in case we wish to change the\n // size/shape of the check mark in the future. We want the check mark to\n // always form a right angle. This means that the dot product between (p1-p2)\n // and (p3-p2) should be zero:\n //\n // (p1x-p2x) * (p3x-p2x) + (p1y-p2y) * (p3y-p2y) = 0\n //\n // We can now rejigger this equation to solve for `p1y`:\n //\n // (p1y-p2y) * (p3y-p2y) = -((p1x-p2x) * (p3x-p2x))\n // (p1y-p2y) = -((p1x-p2x) * (p3x-p2x)) / (p3y-p2y)\n // p1y = -((p1x-p2x) * (p3x-p2x)) / (p3y-p2y) + p2y\n //\n // Thanks to my friend Joel Walker (https://github.com/JWalker1995) for\n // devising the above equation and unit coordinate system approach!\n\n // (x, y) coords of the check mark's bottommost point\n const p2x = -1 + 0.75;\n const p2y = -1 + 0.51;\n\n // (x, y) coords of the check mark's topmost point\n const p3y = 1 - 0.525;\n const p3x = 1 - 0.31;\n\n // (x, y) coords of the check mark's center (vertically) point\n const p1x = -1 + 0.325;\n const p1y = -((p1x - p2x) * (p3x - p2x)) / (p3y - p2y) + p2y;\n /****************************************************************************/\n\n return [\n pushGraphicsState(),\n options.color && setStrokingColor(options.color),\n setLineWidth(options.thickness),\n\n translate(options.x, options.y),\n moveTo(p1x * size, p1y * size),\n lineTo(p2x * size, p2y * size),\n lineTo(p3x * size, p3y * size),\n\n stroke(),\n popGraphicsState(),\n ].filter(Boolean) as PDFOperator[];\n};\n\n// prettier-ignore\nexport const rotateInPlace = (options: {\n width: number | PDFNumber;\n height: number | PDFNumber;\n rotation: 0 | 90 | 180 | 270;\n}) =>\n options.rotation === 0 ? [\n translate(0, 0),\n rotateDegrees(0)\n ]\n : options.rotation === 90 ? [\n translate(options.width, 0),\n rotateDegrees(90)\n ]\n : options.rotation === 180 ? [\n translate(options.width, options.height),\n rotateDegrees(180)\n ]\n : options.rotation === 270 ? [\n translate(0, options.height),\n rotateDegrees(270)\n ]\n : []; // Invalid rotation - noop\n\nexport const drawCheckBox = (options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n width: number | PDFNumber;\n height: number | PDFNumber;\n thickness: number | PDFNumber;\n borderWidth: number | PDFNumber;\n markColor: Color | undefined;\n color: Color | undefined;\n borderColor: Color | undefined;\n filled: boolean;\n}) => {\n const outline = drawRectangle({\n x: options.x,\n y: options.y,\n width: options.width,\n height: options.height,\n borderWidth: options.borderWidth,\n color: options.color,\n borderColor: options.borderColor,\n rotate: degrees(0),\n xSkew: degrees(0),\n ySkew: degrees(0),\n });\n\n if (!options.filled) return outline;\n\n const width = asNumber(options.width);\n const height = asNumber(options.height);\n\n const checkMarkSize = Math.min(width, height) / 2;\n\n const checkMark = drawCheckMark({\n x: width / 2,\n y: height / 2,\n size: checkMarkSize,\n thickness: options.thickness,\n color: options.markColor,\n });\n\n return [pushGraphicsState(), ...outline, ...checkMark, popGraphicsState()];\n};\n\nexport const drawRadioButton = (options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n width: number | PDFNumber;\n height: number | PDFNumber;\n borderWidth: number | PDFNumber;\n dotColor: Color | undefined;\n color: Color | undefined;\n borderColor: Color | undefined;\n filled: boolean;\n}) => {\n const width = asNumber(options.width);\n const height = asNumber(options.height);\n\n const outlineScale = Math.min(width, height) / 2;\n\n const outline = drawEllipse({\n x: options.x,\n y: options.y,\n xScale: outlineScale,\n yScale: outlineScale,\n color: options.color,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n });\n\n if (!options.filled) return outline;\n\n const dot = drawEllipse({\n x: options.x,\n y: options.y,\n xScale: outlineScale * 0.45,\n yScale: outlineScale * 0.45,\n color: options.dotColor,\n borderColor: undefined,\n borderWidth: 0,\n });\n\n return [pushGraphicsState(), ...outline, ...dot, popGraphicsState()];\n};\n\nexport const drawButton = (options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n width: number | PDFNumber;\n height: number | PDFNumber;\n borderWidth: number | PDFNumber;\n color: Color | undefined;\n borderColor: Color | undefined;\n textLines: { encoded: PDFHexString; x: number; y: number }[];\n textColor: Color;\n font: string | PDFName;\n fontSize: number | PDFNumber;\n}) => {\n const x = asNumber(options.x);\n const y = asNumber(options.y);\n const width = asNumber(options.width);\n const height = asNumber(options.height);\n\n const background = drawRectangle({\n x,\n y,\n width,\n height,\n borderWidth: options.borderWidth,\n color: options.color,\n borderColor: options.borderColor,\n rotate: degrees(0),\n xSkew: degrees(0),\n ySkew: degrees(0),\n });\n\n const lines = drawTextLines(options.textLines, {\n color: options.textColor,\n font: options.font,\n size: options.fontSize,\n rotate: degrees(0),\n xSkew: degrees(0),\n ySkew: degrees(0),\n });\n\n return [pushGraphicsState(), ...background, ...lines, popGraphicsState()];\n};\n\nexport interface DrawTextLinesOptions {\n color: Color;\n font: string | PDFName;\n size: number | PDFNumber;\n rotate: Rotation;\n xSkew: Rotation;\n ySkew: Rotation;\n}\n\nexport const drawTextLines = (\n lines: { encoded: PDFHexString; x: number; y: number }[],\n options: DrawTextLinesOptions,\n): PDFOperator[] => {\n const operators = [\n beginText(),\n setFillingColor(options.color),\n setFontAndSize(options.font, options.size),\n ];\n\n for (let idx = 0, len = lines.length; idx < len; idx++) {\n const { encoded, x, y } = lines[idx];\n operators.push(\n rotateAndSkewTextRadiansAndTranslate(\n toRadians(options.rotate),\n toRadians(options.xSkew),\n toRadians(options.ySkew),\n x,\n y,\n ),\n showText(encoded),\n );\n }\n\n operators.push(endText());\n\n return operators;\n};\n\nexport const drawTextField = (options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n width: number | PDFNumber;\n height: number | PDFNumber;\n borderWidth: number | PDFNumber;\n color: Color | undefined;\n borderColor: Color | undefined;\n textLines: { encoded: PDFHexString; x: number; y: number }[];\n textColor: Color;\n font: string | PDFName;\n fontSize: number | PDFNumber;\n padding: number | PDFNumber;\n}) => {\n const x = asNumber(options.x);\n const y = asNumber(options.y);\n const width = asNumber(options.width);\n const height = asNumber(options.height);\n const borderWidth = asNumber(options.borderWidth);\n const padding = asNumber(options.padding);\n\n const clipX = x + borderWidth / 2 + padding;\n const clipY = y + borderWidth / 2 + padding;\n const clipWidth = width - (borderWidth / 2 + padding) * 2;\n const clipHeight = height - (borderWidth / 2 + padding) * 2;\n\n const clippingArea = [\n moveTo(clipX, clipY),\n lineTo(clipX, clipY + clipHeight),\n lineTo(clipX + clipWidth, clipY + clipHeight),\n lineTo(clipX + clipWidth, clipY),\n closePath(),\n clip(),\n endPath(),\n ];\n\n const background = drawRectangle({\n x,\n y,\n width,\n height,\n borderWidth: options.borderWidth,\n color: options.color,\n borderColor: options.borderColor,\n rotate: degrees(0),\n xSkew: degrees(0),\n ySkew: degrees(0),\n });\n\n const lines = drawTextLines(options.textLines, {\n color: options.textColor,\n font: options.font,\n size: options.fontSize,\n rotate: degrees(0),\n xSkew: degrees(0),\n ySkew: degrees(0),\n });\n\n const markedContent = [\n beginMarkedContent('Tx'),\n pushGraphicsState(),\n ...lines,\n popGraphicsState(),\n endMarkedContent(),\n ];\n\n return [\n pushGraphicsState(),\n ...background,\n ...clippingArea,\n ...markedContent,\n popGraphicsState(),\n ];\n};\n\nexport const drawOptionList = (options: {\n x: number | PDFNumber;\n y: number | PDFNumber;\n width: number | PDFNumber;\n height: number | PDFNumber;\n borderWidth: number | PDFNumber;\n color: Color | undefined;\n borderColor: Color | undefined;\n textLines: { encoded: PDFHexString; x: number; y: number; height: number }[];\n textColor: Color;\n font: string | PDFName;\n fontSize: number | PDFNumber;\n lineHeight: number | PDFNumber;\n selectedLines: number[];\n selectedColor: Color;\n padding: number | PDFNumber;\n}) => {\n const x = asNumber(options.x);\n const y = asNumber(options.y);\n const width = asNumber(options.width);\n const height = asNumber(options.height);\n const lineHeight = asNumber(options.lineHeight);\n const borderWidth = asNumber(options.borderWidth);\n const padding = asNumber(options.padding);\n\n const clipX = x + borderWidth / 2 + padding;\n const clipY = y + borderWidth / 2 + padding;\n const clipWidth = width - (borderWidth / 2 + padding) * 2;\n const clipHeight = height - (borderWidth / 2 + padding) * 2;\n\n const clippingArea = [\n moveTo(clipX, clipY),\n lineTo(clipX, clipY + clipHeight),\n lineTo(clipX + clipWidth, clipY + clipHeight),\n lineTo(clipX + clipWidth, clipY),\n closePath(),\n clip(),\n endPath(),\n ];\n\n const background = drawRectangle({\n x,\n y,\n width,\n height,\n borderWidth: options.borderWidth,\n color: options.color,\n borderColor: options.borderColor,\n rotate: degrees(0),\n xSkew: degrees(0),\n ySkew: degrees(0),\n });\n\n const highlights: PDFOperator[] = [];\n for (let idx = 0, len = options.selectedLines.length; idx < len; idx++) {\n const line = options.textLines[options.selectedLines[idx]];\n highlights.push(\n ...drawRectangle({\n x: line.x - padding,\n y: line.y - (lineHeight - line.height) / 2,\n width: width - borderWidth,\n height: line.height + (lineHeight - line.height) / 2,\n borderWidth: 0,\n color: options.selectedColor,\n borderColor: undefined,\n rotate: degrees(0),\n xSkew: degrees(0),\n ySkew: degrees(0),\n }),\n );\n }\n\n const lines = drawTextLines(options.textLines, {\n color: options.textColor,\n font: options.font,\n size: options.fontSize,\n rotate: degrees(0),\n xSkew: degrees(0),\n ySkew: degrees(0),\n });\n\n const markedContent = [\n beginMarkedContent('Tx'),\n pushGraphicsState(),\n ...lines,\n popGraphicsState(),\n endMarkedContent(),\n ];\n\n return [\n pushGraphicsState(),\n ...background,\n ...highlights,\n ...clippingArea,\n ...markedContent,\n popGraphicsState(),\n ];\n};\n","import { asNumber, asPDFName, asPDFNumber } from 'src/api/objects';\nimport { degreesToRadians } from 'src/api/rotations';\nimport {\n PDFHexString,\n PDFName,\n PDFNumber,\n PDFOperator,\n PDFOperatorNames as Ops,\n} from 'src/core';\n\n/* ==================== Clipping Path Operators ==================== */\n\nexport const clip = () => PDFOperator.of(Ops.ClipNonZero);\nexport const clipEvenOdd = () => PDFOperator.of(Ops.ClipEvenOdd);\n\n/* ==================== Graphics State Operators ==================== */\n\nconst { cos, sin, tan } = Math;\n\nexport const concatTransformationMatrix = (\n a: number | PDFNumber,\n b: number | PDFNumber,\n c: number | PDFNumber,\n d: number | PDFNumber,\n e: number | PDFNumber,\n f: number | PDFNumber,\n) =>\n PDFOperator.of(Ops.ConcatTransformationMatrix, [\n asPDFNumber(a),\n asPDFNumber(b),\n asPDFNumber(c),\n asPDFNumber(d),\n asPDFNumber(e),\n asPDFNumber(f),\n ]);\n\nexport const translate = (xPos: number | PDFNumber, yPos: number | PDFNumber) =>\n concatTransformationMatrix(1, 0, 0, 1, xPos, yPos);\n\nexport const scale = (xPos: number | PDFNumber, yPos: number | PDFNumber) =>\n concatTransformationMatrix(xPos, 0, 0, yPos, 0, 0);\n\nexport const rotateRadians = (angle: number | PDFNumber) =>\n concatTransformationMatrix(\n cos(asNumber(angle)),\n sin(asNumber(angle)),\n -sin(asNumber(angle)),\n cos(asNumber(angle)),\n 0,\n 0,\n );\n\nexport const rotateDegrees = (angle: number | PDFNumber) =>\n rotateRadians(degreesToRadians(asNumber(angle)));\n\nexport const skewRadians = (\n xSkewAngle: number | PDFNumber,\n ySkewAngle: number | PDFNumber,\n) =>\n concatTransformationMatrix(\n 1,\n tan(asNumber(xSkewAngle)),\n tan(asNumber(ySkewAngle)),\n 1,\n 0,\n 0,\n );\n\nexport const skewDegrees = (\n xSkewAngle: number | PDFNumber,\n ySkewAngle: number | PDFNumber,\n) =>\n skewRadians(\n degreesToRadians(asNumber(xSkewAngle)),\n degreesToRadians(asNumber(ySkewAngle)),\n );\n\nexport const setDashPattern = (\n dashArray: (number | PDFNumber)[],\n dashPhase: number | PDFNumber,\n) =>\n PDFOperator.of(Ops.SetLineDashPattern, [\n `[${dashArray.map(asPDFNumber).join(' ')}]`,\n asPDFNumber(dashPhase),\n ]);\n\nexport const restoreDashPattern = () => setDashPattern([], 0);\n\nexport enum LineCapStyle {\n Butt = 0,\n Round = 1,\n Projecting = 2,\n}\n\nexport const setLineCap = (style: LineCapStyle) =>\n PDFOperator.of(Ops.SetLineCapStyle, [asPDFNumber(style)]);\n\nexport enum LineJoinStyle {\n Miter = 0,\n Round = 1,\n Bevel = 2,\n}\n\nexport const setLineJoin = (style: LineJoinStyle) =>\n PDFOperator.of(Ops.SetLineJoinStyle, [asPDFNumber(style)]);\n\nexport const setGraphicsState = (state: string | PDFName) =>\n PDFOperator.of(Ops.SetGraphicsStateParams, [asPDFName(state)]);\n\nexport const pushGraphicsState = () => PDFOperator.of(Ops.PushGraphicsState);\n\nexport const popGraphicsState = () => PDFOperator.of(Ops.PopGraphicsState);\n\nexport const setLineWidth = (width: number | PDFNumber) =>\n PDFOperator.of(Ops.SetLineWidth, [asPDFNumber(width)]);\n\n/* ==================== Path Construction Operators ==================== */\n\nexport const appendBezierCurve = (\n x1: number | PDFNumber,\n y1: number | PDFNumber,\n x2: number | PDFNumber,\n y2: number | PDFNumber,\n x3: number | PDFNumber,\n y3: number | PDFNumber,\n) =>\n PDFOperator.of(Ops.AppendBezierCurve, [\n asPDFNumber(x1),\n asPDFNumber(y1),\n asPDFNumber(x2),\n asPDFNumber(y2),\n asPDFNumber(x3),\n asPDFNumber(y3),\n ]);\n\nexport const appendQuadraticCurve = (\n x1: number | PDFNumber,\n y1: number | PDFNumber,\n x2: number | PDFNumber,\n y2: number | PDFNumber,\n) =>\n PDFOperator.of(Ops.CurveToReplicateInitialPoint, [\n asPDFNumber(x1),\n asPDFNumber(y1),\n asPDFNumber(x2),\n asPDFNumber(y2),\n ]);\n\nexport const closePath = () => PDFOperator.of(Ops.ClosePath);\n\nexport const moveTo = (xPos: number | PDFNumber, yPos: number | PDFNumber) =>\n PDFOperator.of(Ops.MoveTo, [asPDFNumber(xPos), asPDFNumber(yPos)]);\n\nexport const lineTo = (xPos: number | PDFNumber, yPos: number | PDFNumber) =>\n PDFOperator.of(Ops.LineTo, [asPDFNumber(xPos), asPDFNumber(yPos)]);\n\n/**\n * @param xPos x coordinate for the lower left corner of the rectangle\n * @param yPos y coordinate for the lower left corner of the rectangle\n * @param width width of the rectangle\n * @param height height of the rectangle\n */\nexport const rectangle = (\n xPos: number | PDFNumber,\n yPos: number | PDFNumber,\n width: number | PDFNumber,\n height: number | PDFNumber,\n) =>\n PDFOperator.of(Ops.AppendRectangle, [\n asPDFNumber(xPos),\n asPDFNumber(yPos),\n asPDFNumber(width),\n asPDFNumber(height),\n ]);\n\n/**\n * @param xPos x coordinate for the lower left corner of the square\n * @param yPos y coordinate for the lower left corner of the square\n * @param size width and height of the square\n */\nexport const square = (xPos: number, yPos: number, size: number) =>\n rectangle(xPos, yPos, size, size);\n\n/* ==================== Path Painting Operators ==================== */\n\nexport const stroke = () => PDFOperator.of(Ops.StrokePath);\n\nexport const fill = () => PDFOperator.of(Ops.FillNonZero);\n\nexport const fillAndStroke = () => PDFOperator.of(Ops.FillNonZeroAndStroke);\n\nexport const endPath = () => PDFOperator.of(Ops.EndPath);\n\n/* ==================== Text Positioning Operators ==================== */\n\nexport const nextLine = () => PDFOperator.of(Ops.NextLine);\n\nexport const moveText = (x: number | PDFNumber, y: number | PDFNumber) =>\n PDFOperator.of(Ops.MoveText, [asPDFNumber(x), asPDFNumber(y)]);\n\n/* ==================== Text Showing Operators ==================== */\n\nexport const showText = (text: PDFHexString) =>\n PDFOperator.of(Ops.ShowText, [text]);\n\n/* ==================== Text State Operators ==================== */\n\nexport const beginText = () => PDFOperator.of(Ops.BeginText);\nexport const endText = () => PDFOperator.of(Ops.EndText);\n\nexport const setFontAndSize = (\n name: string | PDFName,\n size: number | PDFNumber,\n) => PDFOperator.of(Ops.SetFontAndSize, [asPDFName(name), asPDFNumber(size)]);\n\nexport const setCharacterSpacing = (spacing: number | PDFNumber) =>\n PDFOperator.of(Ops.SetCharacterSpacing, [asPDFNumber(spacing)]);\n\nexport const setWordSpacing = (spacing: number | PDFNumber) =>\n PDFOperator.of(Ops.SetWordSpacing, [asPDFNumber(spacing)]);\n\n/** @param squeeze horizontal character spacing */\nexport const setCharacterSqueeze = (squeeze: number | PDFNumber) =>\n PDFOperator.of(Ops.SetTextHorizontalScaling, [asPDFNumber(squeeze)]);\n\nexport const setLineHeight = (lineHeight: number | PDFNumber) =>\n PDFOperator.of(Ops.SetTextLineHeight, [asPDFNumber(lineHeight)]);\n\nexport const setTextRise = (rise: number | PDFNumber) =>\n PDFOperator.of(Ops.SetTextRise, [asPDFNumber(rise)]);\n\nexport enum TextRenderingMode {\n Fill = 0,\n Outline = 1,\n FillAndOutline = 2,\n Invisible = 3,\n FillAndClip = 4,\n OutlineAndClip = 5,\n FillAndOutlineAndClip = 6,\n Clip = 7,\n}\n\nexport const setTextRenderingMode = (mode: TextRenderingMode) =>\n PDFOperator.of(Ops.SetTextRenderingMode, [asPDFNumber(mode)]);\n\nexport const setTextMatrix = (\n a: number | PDFNumber,\n b: number | PDFNumber,\n c: number | PDFNumber,\n d: number | PDFNumber,\n e: number | PDFNumber,\n f: number | PDFNumber,\n) =>\n PDFOperator.of(Ops.SetTextMatrix, [\n asPDFNumber(a),\n asPDFNumber(b),\n asPDFNumber(c),\n asPDFNumber(d),\n asPDFNumber(e),\n asPDFNumber(f),\n ]);\n\nexport const rotateAndSkewTextRadiansAndTranslate = (\n rotationAngle: number | PDFNumber,\n xSkewAngle: number | PDFNumber,\n ySkewAngle: number | PDFNumber,\n x: number | PDFNumber,\n y: number | PDFNumber,\n) =>\n setTextMatrix(\n cos(asNumber(rotationAngle)),\n sin(asNumber(rotationAngle)) + tan(asNumber(xSkewAngle)),\n -sin(asNumber(rotationAngle)) + tan(asNumber(ySkewAngle)),\n cos(asNumber(rotationAngle)),\n x,\n y,\n );\n\nexport const rotateAndSkewTextDegreesAndTranslate = (\n rotationAngle: number | PDFNumber,\n xSkewAngle: number | PDFNumber,\n ySkewAngle: number | PDFNumber,\n x: number | PDFNumber,\n y: number | PDFNumber,\n) =>\n rotateAndSkewTextRadiansAndTranslate(\n degreesToRadians(asNumber(rotationAngle)),\n degreesToRadians(asNumber(xSkewAngle)),\n degreesToRadians(asNumber(ySkewAngle)),\n x,\n y,\n );\n\n/* ==================== XObject Operator ==================== */\n\nexport const drawObject = (name: string | PDFName) =>\n PDFOperator.of(Ops.DrawObject, [asPDFName(name)]);\n\n/* ==================== Color Operators ==================== */\n\nexport const setFillingGrayscaleColor = (gray: number | PDFNumber) =>\n PDFOperator.of(Ops.NonStrokingColorGray, [asPDFNumber(gray)]);\n\nexport const setStrokingGrayscaleColor = (gray: number | PDFNumber) =>\n PDFOperator.of(Ops.StrokingColorGray, [asPDFNumber(gray)]);\n\nexport const setFillingRgbColor = (\n red: number | PDFNumber,\n green: number | PDFNumber,\n blue: number | PDFNumber,\n) =>\n PDFOperator.of(Ops.NonStrokingColorRgb, [\n asPDFNumber(red),\n asPDFNumber(green),\n asPDFNumber(blue),\n ]);\n\nexport const setStrokingRgbColor = (\n red: number | PDFNumber,\n green: number | PDFNumber,\n blue: number | PDFNumber,\n) =>\n PDFOperator.of(Ops.StrokingColorRgb, [\n asPDFNumber(red),\n asPDFNumber(green),\n asPDFNumber(blue),\n ]);\n\nexport const setFillingCmykColor = (\n cyan: number | PDFNumber,\n magenta: number | PDFNumber,\n yellow: number | PDFNumber,\n key: number | PDFNumber,\n) =>\n PDFOperator.of(Ops.NonStrokingColorCmyk, [\n asPDFNumber(cyan),\n asPDFNumber(magenta),\n asPDFNumber(yellow),\n asPDFNumber(key),\n ]);\n\nexport const setStrokingCmykColor = (\n cyan: number | PDFNumber,\n magenta: number | PDFNumber,\n yellow: number | PDFNumber,\n key: number | PDFNumber,\n) =>\n PDFOperator.of(Ops.StrokingColorCmyk, [\n asPDFNumber(cyan),\n asPDFNumber(magenta),\n asPDFNumber(yellow),\n asPDFNumber(key),\n ]);\n\n/* ==================== Marked Content Operators ==================== */\n\nexport const beginMarkedContent = (tag: string | PDFName) =>\n PDFOperator.of(Ops.BeginMarkedContent, [asPDFName(tag)]);\n\nexport const endMarkedContent = () => PDFOperator.of(Ops.EndMarkedContent);\n","import { assertIs, error } from 'src/utils';\n\nexport enum RotationTypes {\n Degrees = 'degrees',\n Radians = 'radians',\n}\n\nexport interface Radians {\n type: RotationTypes.Radians;\n angle: number;\n}\n\nexport interface Degrees {\n type: RotationTypes.Degrees;\n angle: number;\n}\n\nexport type Rotation = Radians | Degrees;\n\nexport const radians = (radianAngle: number): Radians => {\n assertIs(radianAngle, 'radianAngle', ['number']);\n return { type: RotationTypes.Radians, angle: radianAngle };\n};\n\nexport const degrees = (degreeAngle: number): Degrees => {\n assertIs(degreeAngle, 'degreeAngle', ['number']);\n return { type: RotationTypes.Degrees, angle: degreeAngle };\n};\n\nconst { Radians, Degrees } = RotationTypes;\n\nexport const degreesToRadians = (degree: number) => (degree * Math.PI) / 180;\nexport const radiansToDegrees = (radian: number) => (radian * 180) / Math.PI;\n\n// prettier-ignore\nexport const toRadians = (rotation: Rotation) => \n rotation.type === Radians ? rotation.angle\n : rotation.type === Degrees ? degreesToRadians(rotation.angle)\n : error(`Invalid rotation: ${JSON.stringify(rotation)}`);\n\n// prettier-ignore\nexport const toDegrees = (rotation: Rotation) => \n rotation.type === Radians ? radiansToDegrees(rotation.angle)\n : rotation.type === Degrees ? rotation.angle\n : error(`Invalid rotation: ${JSON.stringify(rotation)}`);\n\nexport const reduceRotation = (degreeAngle = 0) => {\n const quadrants = (degreeAngle / 90) % 4;\n if (quadrants === 0) return 0;\n if (quadrants === 1) return 90;\n if (quadrants === 2) return 180;\n if (quadrants === 3) return 270;\n return 0; // `degreeAngle` is not a multiple of 90\n};\n\nexport const adjustDimsForRotation = (\n dims: { width: number; height: number },\n degreeAngle = 0,\n) => {\n const rotation = reduceRotation(degreeAngle);\n return rotation === 90 || rotation === 270\n ? { width: dims.height, height: dims.width }\n : { width: dims.width, height: dims.height };\n};\n\nexport const rotateRectangle = (\n rectangle: {\n x: number;\n y: number;\n width: number;\n height: number;\n },\n borderWidth = 0,\n degreeAngle = 0,\n) => {\n const { x, y, width: w, height: h } = rectangle;\n\n const r = reduceRotation(degreeAngle);\n const b = borderWidth / 2;\n\n // prettier-ignore\n if (r === 0) return { x: x - b, y: y - b, width: w, height: h };\n else if (r === 90) return { x: x - h + b, y: y - b, width: h, height: w };\n else if (r === 180) return { x: x - w + b, y: y - h + b, width: w, height: h };\n else if (r === 270) return { x: x - b, y: y - w + b, width: h, height: w };\n else return { x: x - b, y: y - b, width: w, height: h };\n};\n","export const PageSizes = {\n '4A0': [4767.87, 6740.79] as [number, number],\n '2A0': [3370.39, 4767.87] as [number, number],\n A0: [2383.94, 3370.39] as [number, number],\n A1: [1683.78, 2383.94] as [number, number],\n A2: [1190.55, 1683.78] as [number, number],\n A3: [841.89, 1190.55] as [number, number],\n A4: [595.28, 841.89] as [number, number],\n A5: [419.53, 595.28] as [number, number],\n A6: [297.64, 419.53] as [number, number],\n A7: [209.76, 297.64] as [number, number],\n A8: [147.4, 209.76] as [number, number],\n A9: [104.88, 147.4] as [number, number],\n A10: [73.7, 104.88] as [number, number],\n B0: [2834.65, 4008.19] as [number, number],\n B1: [2004.09, 2834.65] as [number, number],\n B2: [1417.32, 2004.09] as [number, number],\n B3: [1000.63, 1417.32] as [number, number],\n B4: [708.66, 1000.63] as [number, number],\n B5: [498.9, 708.66] as [number, number],\n B6: [354.33, 498.9] as [number, number],\n B7: [249.45, 354.33] as [number, number],\n B8: [175.75, 249.45] as [number, number],\n B9: [124.72, 175.75] as [number, number],\n B10: [87.87, 124.72] as [number, number],\n C0: [2599.37, 3676.54] as [number, number],\n C1: [1836.85, 2599.37] as [number, number],\n C2: [1298.27, 1836.85] as [number, number],\n C3: [918.43, 1298.27] as [number, number],\n C4: [649.13, 918.43] as [number, number],\n C5: [459.21, 649.13] as [number, number],\n C6: [323.15, 459.21] as [number, number],\n C7: [229.61, 323.15] as [number, number],\n C8: [161.57, 229.61] as [number, number],\n C9: [113.39, 161.57] as [number, number],\n C10: [79.37, 113.39] as [number, number],\n RA0: [2437.8, 3458.27] as [number, number],\n RA1: [1729.13, 2437.8] as [number, number],\n RA2: [1218.9, 1729.13] as [number, number],\n RA3: [864.57, 1218.9] as [number, number],\n RA4: [609.45, 864.57] as [number, number],\n SRA0: [2551.18, 3628.35] as [number, number],\n SRA1: [1814.17, 2551.18] as [number, number],\n SRA2: [1275.59, 1814.17] as [number, number],\n SRA3: [907.09, 1275.59] as [number, number],\n SRA4: [637.8, 907.09] as [number, number],\n Executive: [521.86, 756.0] as [number, number],\n Folio: [612.0, 936.0] as [number, number],\n Legal: [612.0, 1008.0] as [number, number],\n Letter: [612.0, 792.0] as [number, number],\n Tabloid: [792.0, 1224.0] as [number, number],\n};\n","export enum TextAlignment {\n Left = 0,\n Center = 1,\n Right = 2,\n}\n","import PDFFont from 'src/api/PDFFont';\nimport { CombedTextLayoutError } from 'src/api/errors';\nimport { TextAlignment } from 'src/api/text/alignment';\n\nimport { PDFHexString } from 'src/core';\nimport {\n cleanText,\n lineSplit,\n mergeLines,\n charAtIndex,\n charSplit,\n} from 'src/utils';\n\nexport interface TextPosition {\n text: string;\n encoded: PDFHexString;\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface LayoutBounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nconst MIN_FONT_SIZE = 4;\nconst MAX_FONT_SIZE = 500;\n\nconst computeFontSize = (\n lines: string[],\n font: PDFFont,\n bounds: LayoutBounds,\n multiline: boolean = false,\n) => {\n let fontSize = MIN_FONT_SIZE;\n\n while (fontSize < MAX_FONT_SIZE) {\n let linesUsed = 0;\n\n for (\n let lineIdx = 0, lineLen = lines.length;\n lineIdx < lineLen;\n lineIdx++\n ) {\n linesUsed += 1;\n\n const line = lines[lineIdx];\n const words = line.split(' ');\n\n // Layout the words using the current `fontSize`, line wrapping\n // whenever we reach the end of the current line.\n let spaceInLineRemaining = bounds.width;\n for (let idx = 0, len = words.length; idx < len; idx++) {\n const isLastWord = idx === len - 1;\n const word = isLastWord ? words[idx] : words[idx] + ' ';\n const widthOfWord = font.widthOfTextAtSize(word, fontSize);\n spaceInLineRemaining -= widthOfWord;\n if (spaceInLineRemaining <= 0) {\n linesUsed += 1;\n spaceInLineRemaining = bounds.width - widthOfWord;\n }\n }\n }\n\n // Return if we exceeded the allowed width\n if (!multiline && linesUsed > lines.length) return fontSize - 1;\n\n const height = font.heightAtSize(fontSize);\n const lineHeight = height + height * 0.2;\n const totalHeight = lineHeight * linesUsed;\n\n // Return if we exceeded the allowed height\n if (totalHeight > Math.abs(bounds.height)) return fontSize - 1;\n\n fontSize += 1;\n }\n\n return fontSize;\n};\n\nconst computeCombedFontSize = (\n line: string,\n font: PDFFont,\n bounds: LayoutBounds,\n cellCount: number,\n) => {\n const cellWidth = bounds.width / cellCount;\n const cellHeight = bounds.height;\n\n let fontSize = MIN_FONT_SIZE;\n\n const chars = charSplit(line);\n while (fontSize < MAX_FONT_SIZE) {\n for (let idx = 0, len = chars.length; idx < len; idx++) {\n const c = chars[idx];\n const tooLong = font.widthOfTextAtSize(c, fontSize) > cellWidth * 0.75;\n if (tooLong) return fontSize - 1;\n }\n\n const height = font.heightAtSize(fontSize, { descender: false });\n if (height > cellHeight) return fontSize - 1;\n\n fontSize += 1;\n }\n\n return fontSize;\n};\n\nexport interface LayoutTextOptions {\n alignment: TextAlignment;\n fontSize?: number;\n font: PDFFont;\n bounds: LayoutBounds;\n}\n\nexport interface MultilineTextLayout {\n bounds: LayoutBounds;\n lines: TextPosition[];\n fontSize: number;\n lineHeight: number;\n}\n\nconst lastIndexOfWhitespace = (line: string) => {\n for (let idx = line.length; idx > 0; idx--) {\n if (/\\s/.test(line[idx])) return idx;\n }\n return undefined;\n};\n\nconst splitOutLines = (\n input: string,\n maxWidth: number,\n font: PDFFont,\n fontSize: number,\n) => {\n let lastWhitespaceIdx = input.length;\n while (lastWhitespaceIdx > 0) {\n const line = input.substring(0, lastWhitespaceIdx);\n const encoded = font.encodeText(line);\n const width = font.widthOfTextAtSize(line, fontSize);\n if (width < maxWidth) {\n const remainder = input.substring(lastWhitespaceIdx) || undefined;\n return { line, encoded, width, remainder };\n }\n lastWhitespaceIdx = lastIndexOfWhitespace(line) ?? 0;\n }\n\n // We were unable to split the input enough to get a chunk that would fit\n // within the specified `maxWidth` so we'll just return everything\n return {\n line: input,\n encoded: font.encodeText(input),\n width: font.widthOfTextAtSize(input, fontSize),\n remainder: undefined,\n };\n};\n\nexport const layoutMultilineText = (\n text: string,\n { alignment, fontSize, font, bounds }: LayoutTextOptions,\n): MultilineTextLayout => {\n const lines = lineSplit(cleanText(text));\n\n if (fontSize === undefined || fontSize === 0) {\n fontSize = computeFontSize(lines, font, bounds, true);\n }\n const height = font.heightAtSize(fontSize);\n const lineHeight = height + height * 0.2;\n\n const textLines: TextPosition[] = [];\n\n let minX = bounds.x;\n let minY = bounds.y;\n let maxX = bounds.x + bounds.width;\n let maxY = bounds.y + bounds.height;\n\n let y = bounds.y + bounds.height;\n for (let idx = 0, len = lines.length; idx < len; idx++) {\n let prevRemainder: string | undefined = lines[idx];\n while (prevRemainder !== undefined) {\n const { line, encoded, width, remainder } = splitOutLines(\n prevRemainder,\n bounds.width,\n font,\n fontSize,\n );\n\n // prettier-ignore\n const x = (\n alignment === TextAlignment.Left ? bounds.x\n : alignment === TextAlignment.Center ? bounds.x + (bounds.width / 2) - (width / 2)\n : alignment === TextAlignment.Right ? bounds.x + bounds.width - width\n : bounds.x\n );\n\n y -= lineHeight;\n\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x + width > maxX) maxX = x + width;\n if (y + height > maxY) maxY = y + height;\n\n textLines.push({ text: line, encoded, width, height, x, y });\n\n // Only trim lines that we had to split ourselves. So we won't trim lines\n // that the user provided themselves with whitespace.\n prevRemainder = remainder?.trim();\n }\n }\n\n return {\n fontSize,\n lineHeight,\n lines: textLines,\n bounds: {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n },\n };\n};\n\nexport interface LayoutCombedTextOptions {\n fontSize?: number;\n font: PDFFont;\n bounds: LayoutBounds;\n cellCount: number;\n}\n\nexport interface CombedTextLayout {\n bounds: LayoutBounds;\n cells: TextPosition[];\n fontSize: number;\n}\n\nexport const layoutCombedText = (\n text: string,\n { fontSize, font, bounds, cellCount }: LayoutCombedTextOptions,\n): CombedTextLayout => {\n const line = mergeLines(cleanText(text));\n\n if (line.length > cellCount) {\n throw new CombedTextLayoutError(line.length, cellCount);\n }\n\n if (fontSize === undefined || fontSize === 0) {\n fontSize = computeCombedFontSize(line, font, bounds, cellCount);\n }\n\n const cellWidth = bounds.width / cellCount;\n\n const height = font.heightAtSize(fontSize, { descender: false });\n const y = bounds.y + (bounds.height / 2 - height / 2);\n\n const cells: TextPosition[] = [];\n\n let minX = bounds.x;\n let minY = bounds.y;\n let maxX = bounds.x + bounds.width;\n let maxY = bounds.y + bounds.height;\n\n let cellOffset = 0;\n let charOffset = 0;\n while (cellOffset < cellCount) {\n const [char, charLength] = charAtIndex(line, charOffset);\n\n const encoded = font.encodeText(char);\n const width = font.widthOfTextAtSize(char, fontSize);\n\n const cellCenter = bounds.x + (cellWidth * cellOffset + cellWidth / 2);\n const x = cellCenter - width / 2;\n\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x + width > maxX) maxX = x + width;\n if (y + height > maxY) maxY = y + height;\n\n cells.push({ text: line, encoded, width, height, x, y });\n\n cellOffset += 1;\n charOffset += charLength;\n }\n\n return {\n fontSize,\n cells,\n bounds: {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n },\n };\n};\n\nexport interface LayoutSinglelineTextOptions {\n alignment: TextAlignment;\n fontSize?: number;\n font: PDFFont;\n bounds: LayoutBounds;\n}\n\nexport interface SinglelineTextLayout {\n bounds: LayoutBounds;\n line: TextPosition;\n fontSize: number;\n}\n\nexport const layoutSinglelineText = (\n text: string,\n { alignment, fontSize, font, bounds }: LayoutSinglelineTextOptions,\n): SinglelineTextLayout => {\n const line = mergeLines(cleanText(text));\n\n if (fontSize === undefined || fontSize === 0) {\n fontSize = computeFontSize([line], font, bounds);\n }\n\n const encoded = font.encodeText(line);\n const width = font.widthOfTextAtSize(line, fontSize);\n const height = font.heightAtSize(fontSize, { descender: false });\n\n // prettier-ignore\n const x = (\n alignment === TextAlignment.Left ? bounds.x\n : alignment === TextAlignment.Center ? bounds.x + (bounds.width / 2) - (width / 2)\n : alignment === TextAlignment.Right ? bounds.x + bounds.width - width\n : bounds.x\n );\n\n const y = bounds.y + (bounds.height / 2 - height / 2);\n\n return {\n fontSize,\n line: { text: line, encoded, width, height, x, y },\n bounds: { x, y, width, height },\n };\n};\n","import PDFString from 'src/core/objects/PDFString';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFRef from 'src/core/objects/PDFRef';\n\n/**\n * From the PDF-A3 specification, section **3.1. Requirements - General**.\n * See:\n * * https://www.pdfa.org/wp-content/uploads/2018/10/PDF20_AN002-AF.pdf\n */\nexport enum AFRelationship {\n Source = 'Source',\n Data = 'Data',\n Alternative = 'Alternative',\n Supplement = 'Supplement',\n EncryptedPayload = 'EncryptedPayload',\n FormData = 'EncryptedPayload',\n Schema = 'Schema',\n Unspecified = 'Unspecified',\n}\n\nexport interface EmbeddedFileOptions {\n mimeType?: string;\n description?: string;\n creationDate?: Date;\n modificationDate?: Date;\n afRelationship?: AFRelationship;\n}\n\nclass FileEmbedder {\n static for(\n bytes: Uint8Array,\n fileName: string,\n options: EmbeddedFileOptions = {},\n ) {\n return new FileEmbedder(bytes, fileName, options);\n }\n\n private readonly fileData: Uint8Array;\n readonly fileName: string;\n readonly options: EmbeddedFileOptions;\n\n private constructor(\n fileData: Uint8Array,\n fileName: string,\n options: EmbeddedFileOptions = {},\n ) {\n this.fileData = fileData;\n this.fileName = fileName;\n this.options = options;\n }\n\n async embedIntoContext(context: PDFContext, ref?: PDFRef): Promise {\n const {\n mimeType,\n description,\n creationDate,\n modificationDate,\n afRelationship,\n } = this.options;\n\n const embeddedFileStream = context.flateStream(this.fileData, {\n Type: 'EmbeddedFile',\n Subtype: mimeType ?? undefined,\n Params: {\n Size: this.fileData.length,\n CreationDate: creationDate\n ? PDFString.fromDate(creationDate)\n : undefined,\n ModDate: modificationDate\n ? PDFString.fromDate(modificationDate)\n : undefined,\n },\n });\n const embeddedFileStreamRef = context.register(embeddedFileStream);\n\n const fileSpecDict = context.obj({\n Type: 'Filespec',\n F: PDFString.of(this.fileName), // TODO: Assert that this is plain ASCII\n UF: PDFHexString.fromText(this.fileName),\n EF: { F: embeddedFileStreamRef },\n Desc: description ? PDFHexString.fromText(description) : undefined,\n AFRelationship: afRelationship ?? undefined,\n });\n\n if (ref) {\n context.assign(ref, fileSpecDict);\n return ref;\n } else {\n return context.register(fileSpecDict);\n }\n }\n}\n\nexport default FileEmbedder;\n","import PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFRef from 'src/core/objects/PDFRef';\n\nclass JavaScriptEmbedder {\n static for(script: string, scriptName: string) {\n return new JavaScriptEmbedder(script, scriptName);\n }\n\n private readonly script: string;\n readonly scriptName: string;\n\n private constructor(script: string, scriptName: string) {\n this.script = script;\n this.scriptName = scriptName;\n }\n\n async embedIntoContext(context: PDFContext, ref?: PDFRef): Promise {\n const jsActionDict = context.obj({\n Type: 'Action',\n S: 'JavaScript',\n JS: PDFHexString.fromText(this.script),\n });\n\n if (ref) {\n context.assign(ref, jsActionDict);\n return ref;\n } else {\n return context.register(jsActionDict);\n }\n }\n}\n\nexport default JavaScriptEmbedder;\n","// tslint:disable: max-classes-per-file\nimport PDFObject from 'src/core/objects/PDFObject';\nimport { arrayAsString } from 'src/utils';\n\nexport class MethodNotImplementedError extends Error {\n constructor(className: string, methodName: string) {\n const msg = `Method ${className}.${methodName}() not implemented`;\n super(msg);\n }\n}\n\nexport class PrivateConstructorError extends Error {\n constructor(className: string) {\n const msg = `Cannot construct ${className} - it has a private constructor`;\n super(msg);\n }\n}\n\nexport class UnexpectedObjectTypeError extends Error {\n constructor(expected: any | any[], actual: any) {\n const name = (t: any) => t?.name ?? t?.constructor?.name;\n\n const expectedTypes = Array.isArray(expected)\n ? expected.map(name)\n : [name(expected)];\n\n const msg =\n `Expected instance of ${expectedTypes.join(' or ')}, ` +\n `but got instance of ${actual ? name(actual) : actual}`;\n\n super(msg);\n }\n}\n\nexport class UnsupportedEncodingError extends Error {\n constructor(encoding: string) {\n const msg = `${encoding} stream encoding not supported`;\n super(msg);\n }\n}\n\nexport class ReparseError extends Error {\n constructor(className: string, methodName: string) {\n const msg = `Cannot call ${className}.${methodName}() more than once`;\n super(msg);\n }\n}\n\nexport class MissingCatalogError extends Error {\n constructor(ref?: PDFObject) {\n const msg = `Missing catalog (ref=${ref})`;\n super(msg);\n }\n}\n\nexport class MissingPageContentsEmbeddingError extends Error {\n constructor() {\n const msg = `Can't embed page with missing Contents`;\n super(msg);\n }\n}\n\nexport class UnrecognizedStreamTypeError extends Error {\n constructor(stream: any) {\n const streamType = stream?.contructor?.name ?? stream?.name ?? stream;\n const msg = `Unrecognized stream type: ${streamType}`;\n super(msg);\n }\n}\n\nexport class PageEmbeddingMismatchedContextError extends Error {\n constructor() {\n const msg = `Found mismatched contexts while embedding pages. All pages in the array passed to \\`PDFDocument.embedPages()\\` must be from the same document.`;\n super(msg);\n }\n}\n\nexport class PDFArrayIsNotRectangleError extends Error {\n constructor(size: number) {\n const msg = `Attempted to convert PDFArray with ${size} elements to rectangle, but must have exactly 4 elements.`;\n super(msg);\n }\n}\n\nexport class InvalidPDFDateStringError extends Error {\n constructor(value: string) {\n const msg = `Attempted to convert \"${value}\" to a date, but it does not match the PDF date string format.`;\n super(msg);\n }\n}\n\nexport class InvalidTargetIndexError extends Error {\n constructor(targetIndex: number, Count: number) {\n const msg = `Invalid targetIndex specified: targetIndex=${targetIndex} must be less than Count=${Count}`;\n super(msg);\n }\n}\n\nexport class CorruptPageTreeError extends Error {\n constructor(targetIndex: number, operation: string) {\n const msg = `Failed to ${operation} at targetIndex=${targetIndex} due to corrupt page tree: It is likely that one or more 'Count' entries are invalid`;\n super(msg);\n }\n}\n\nexport class IndexOutOfBoundsError extends Error {\n constructor(index: number, min: number, max: number) {\n const msg = `index should be at least ${min} and at most ${max}, but was actually ${index}`;\n super(msg);\n }\n}\n\nexport class InvalidAcroFieldValueError extends Error {\n constructor() {\n const msg = `Attempted to set invalid field value`;\n super(msg);\n }\n}\n\nexport class MultiSelectValueError extends Error {\n constructor() {\n const msg = `Attempted to select multiple values for single-select field`;\n super(msg);\n }\n}\n\nexport class MissingDAEntryError extends Error {\n constructor(fieldName: string) {\n const msg = `No /DA (default appearance) entry found for field: ${fieldName}`;\n super(msg);\n }\n}\n\nexport class MissingTfOperatorError extends Error {\n constructor(fieldName: string) {\n const msg = `No Tf operator found for DA of field: ${fieldName}`;\n super(msg);\n }\n}\n\n/***** Parser Errors ******/\n\nexport interface Position {\n line: number;\n column: number;\n offset: number;\n}\n\nexport class NumberParsingError extends Error {\n constructor(pos: Position, value: string) {\n const msg =\n `Failed to parse number ` +\n `(line:${pos.line} col:${pos.column} offset=${pos.offset}): \"${value}\"`;\n super(msg);\n }\n}\n\nexport class PDFParsingError extends Error {\n constructor(pos: Position, details: string) {\n const msg =\n `Failed to parse PDF document ` +\n `(line:${pos.line} col:${pos.column} offset=${pos.offset}): ${details}`;\n super(msg);\n }\n}\n\nexport class NextByteAssertionError extends PDFParsingError {\n constructor(pos: Position, expectedByte: number, actualByte: number) {\n const msg = `Expected next byte to be ${expectedByte} but it was actually ${actualByte}`;\n super(pos, msg);\n }\n}\n\nexport class PDFObjectParsingError extends PDFParsingError {\n constructor(pos: Position, byte: number) {\n const msg = `Failed to parse PDF object starting with the following byte: ${byte}`;\n super(pos, msg);\n }\n}\n\nexport class PDFInvalidObjectParsingError extends PDFParsingError {\n constructor(pos: Position) {\n const msg = `Failed to parse invalid PDF object`;\n super(pos, msg);\n }\n}\n\nexport class PDFStreamParsingError extends PDFParsingError {\n constructor(pos: Position) {\n const msg = `Failed to parse PDF stream`;\n super(pos, msg);\n }\n}\n\nexport class UnbalancedParenthesisError extends PDFParsingError {\n constructor(pos: Position) {\n const msg = `Failed to parse PDF literal string due to unbalanced parenthesis`;\n super(pos, msg);\n }\n}\n\nexport class StalledParserError extends PDFParsingError {\n constructor(pos: Position) {\n const msg = `Parser stalled`;\n super(pos, msg);\n }\n}\n\nexport class MissingPDFHeaderError extends PDFParsingError {\n constructor(pos: Position) {\n const msg = `No PDF header found`;\n super(pos, msg);\n }\n}\n\nexport class MissingKeywordError extends PDFParsingError {\n constructor(pos: Position, keyword: number[]) {\n const msg = `Did not find expected keyword '${arrayAsString(keyword)}'`;\n super(pos, msg);\n }\n}\n","import CharCodes from 'src/core/syntax/CharCodes';\nimport { charFromCode, copyStringIntoBuffer } from 'src/utils';\n\nclass PDFHeader {\n static forVersion = (major: number, minor: number) =>\n new PDFHeader(major, minor);\n\n private readonly major: string;\n private readonly minor: string;\n\n private constructor(major: number, minor: number) {\n this.major = String(major);\n this.minor = String(minor);\n }\n\n toString(): string {\n const bc = charFromCode(129);\n return `%PDF-${this.major}.${this.minor}\\n%${bc}${bc}${bc}${bc}`;\n }\n\n sizeInBytes(): number {\n return 12 + this.major.length + this.minor.length;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const initialOffset = offset;\n\n buffer[offset++] = CharCodes.Percent;\n buffer[offset++] = CharCodes.P;\n buffer[offset++] = CharCodes.D;\n buffer[offset++] = CharCodes.F;\n buffer[offset++] = CharCodes.Dash;\n\n offset += copyStringIntoBuffer(this.major, buffer, offset);\n buffer[offset++] = CharCodes.Period;\n offset += copyStringIntoBuffer(this.minor, buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n\n buffer[offset++] = CharCodes.Percent;\n buffer[offset++] = 129;\n buffer[offset++] = 129;\n buffer[offset++] = 129;\n buffer[offset++] = 129;\n\n return offset - initialOffset;\n }\n}\n\nexport default PDFHeader;\n","import { copyStringIntoBuffer, numberToString } from 'src/utils/index';\n\nimport PDFObject from 'src/core/objects/PDFObject';\n\nclass PDFNumber extends PDFObject {\n static of = (value: number) => new PDFNumber(value);\n\n private readonly numberValue: number;\n private readonly stringValue: string;\n\n private constructor(value: number) {\n super();\n this.numberValue = value;\n this.stringValue = numberToString(value);\n }\n\n asNumber(): number {\n return this.numberValue;\n }\n\n /** @deprecated in favor of [[PDFNumber.asNumber]] */\n value(): number {\n return this.numberValue;\n }\n\n clone(): PDFNumber {\n return PDFNumber.of(this.numberValue);\n }\n\n toString(): string {\n return this.stringValue;\n }\n\n sizeInBytes(): number {\n return this.stringValue.length;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n offset += copyStringIntoBuffer(this.stringValue, buffer, offset);\n return this.stringValue.length;\n }\n}\n\nexport default PDFNumber;\n","import PDFBool from 'src/core/objects/PDFBool';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNull from 'src/core/objects/PDFNull';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFContext from 'src/core/PDFContext';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { PDFArrayIsNotRectangleError } from 'src/core/errors';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\n\nclass PDFArray extends PDFObject {\n static withContext = (context: PDFContext) => new PDFArray(context);\n\n private readonly array: PDFObject[];\n private readonly context: PDFContext;\n\n private constructor(context: PDFContext) {\n super();\n this.array = [];\n this.context = context;\n }\n\n size(): number {\n return this.array.length;\n }\n\n push(object: PDFObject): void {\n this.array.push(object);\n }\n\n insert(index: number, object: PDFObject): void {\n this.array.splice(index, 0, object);\n }\n\n indexOf(object: PDFObject): number | undefined {\n const index = this.array.indexOf(object);\n return index === -1 ? undefined : index;\n }\n\n remove(index: number): void {\n this.array.splice(index, 1);\n }\n\n set(idx: number, object: PDFObject): void {\n this.array[idx] = object;\n }\n\n get(index: number): PDFObject {\n return this.array[index];\n }\n\n lookupMaybe(index: number, type: typeof PDFArray): PDFArray | undefined;\n lookupMaybe(index: number, type: typeof PDFBool): PDFBool | undefined;\n lookupMaybe(index: number, type: typeof PDFDict): PDFDict | undefined;\n lookupMaybe(\n index: number,\n type: typeof PDFHexString,\n ): PDFHexString | undefined;\n lookupMaybe(index: number, type: typeof PDFName): PDFName | undefined;\n lookupMaybe(index: number, type: typeof PDFNull): typeof PDFNull | undefined;\n lookupMaybe(index: number, type: typeof PDFNumber): PDFNumber | undefined;\n lookupMaybe(index: number, type: typeof PDFStream): PDFStream | undefined;\n lookupMaybe(\n index: number,\n type: typeof PDFRawStream,\n ): PDFRawStream | undefined;\n lookupMaybe(index: number, type: typeof PDFRef): PDFRef | undefined;\n lookupMaybe(index: number, type: typeof PDFString): PDFString | undefined;\n lookupMaybe(\n index: number,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n ): PDFString | PDFHexString | undefined;\n\n lookupMaybe(index: number, ...types: any[]) {\n return this.context.lookupMaybe(\n this.get(index),\n // @ts-ignore\n ...types,\n ) as any;\n }\n\n lookup(index: number): PDFObject | undefined;\n lookup(index: number, type: typeof PDFArray): PDFArray;\n lookup(index: number, type: typeof PDFBool): PDFBool;\n lookup(index: number, type: typeof PDFDict): PDFDict;\n lookup(index: number, type: typeof PDFHexString): PDFHexString;\n lookup(index: number, type: typeof PDFName): PDFName;\n lookup(index: number, type: typeof PDFNull): typeof PDFNull;\n lookup(index: number, type: typeof PDFNumber): PDFNumber;\n lookup(index: number, type: typeof PDFStream): PDFStream;\n lookup(index: number, type: typeof PDFRawStream): PDFRawStream;\n lookup(index: number, type: typeof PDFRef): PDFRef;\n lookup(index: number, type: typeof PDFString): PDFString;\n lookup(\n index: number,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n ): PDFString | PDFHexString;\n\n lookup(index: number, ...types: any[]) {\n return this.context.lookup(\n this.get(index),\n // @ts-ignore\n ...types,\n ) as any;\n }\n\n asRectangle(): { x: number; y: number; width: number; height: number } {\n if (this.size() !== 4) throw new PDFArrayIsNotRectangleError(this.size());\n\n const lowerLeftX = this.lookup(0, PDFNumber).asNumber();\n const lowerLeftY = this.lookup(1, PDFNumber).asNumber();\n const upperRightX = this.lookup(2, PDFNumber).asNumber();\n const upperRightY = this.lookup(3, PDFNumber).asNumber();\n\n const x = lowerLeftX;\n const y = lowerLeftY;\n const width = upperRightX - lowerLeftX;\n const height = upperRightY - lowerLeftY;\n\n return { x, y, width, height };\n }\n\n asArray(): PDFObject[] {\n return this.array.slice();\n }\n\n clone(context?: PDFContext): PDFArray {\n const clone = PDFArray.withContext(context || this.context);\n for (let idx = 0, len = this.size(); idx < len; idx++) {\n clone.push(this.array[idx]);\n }\n return clone;\n }\n\n toString(): string {\n let arrayString = '[ ';\n for (let idx = 0, len = this.size(); idx < len; idx++) {\n arrayString += this.get(idx).toString();\n arrayString += ' ';\n }\n arrayString += ']';\n return arrayString;\n }\n\n sizeInBytes(): number {\n let size = 3;\n for (let idx = 0, len = this.size(); idx < len; idx++) {\n size += this.get(idx).sizeInBytes() + 1;\n }\n return size;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const initialOffset = offset;\n\n buffer[offset++] = CharCodes.LeftSquareBracket;\n buffer[offset++] = CharCodes.Space;\n for (let idx = 0, len = this.size(); idx < len; idx++) {\n offset += this.get(idx).copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Space;\n }\n buffer[offset++] = CharCodes.RightSquareBracket;\n\n return offset - initialOffset;\n }\n\n scalePDFNumbers(x: number, y: number): void {\n for (let idx = 0, len = this.size(); idx < len; idx++) {\n const el = this.lookup(idx);\n if (el instanceof PDFNumber) {\n const factor = idx % 2 === 0 ? x : y;\n this.set(idx, PDFNumber.of(el.asNumber() * factor));\n }\n }\n }\n}\n\nexport default PDFArray;\n","import { PrivateConstructorError } from 'src/core/errors';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nconst ENFORCER = {};\n\nclass PDFBool extends PDFObject {\n static readonly True = new PDFBool(ENFORCER, true);\n static readonly False = new PDFBool(ENFORCER, false);\n\n private readonly value: boolean;\n\n private constructor(enforcer: any, value: boolean) {\n if (enforcer !== ENFORCER) throw new PrivateConstructorError('PDFBool');\n super();\n this.value = value;\n }\n\n asBoolean(): boolean {\n return this.value;\n }\n\n clone(): PDFBool {\n return this;\n }\n\n toString(): string {\n return String(this.value);\n }\n\n sizeInBytes(): number {\n return this.value ? 4 : 5;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n if (this.value) {\n buffer[offset++] = CharCodes.t;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.u;\n buffer[offset++] = CharCodes.e;\n return 4;\n } else {\n buffer[offset++] = CharCodes.f;\n buffer[offset++] = CharCodes.a;\n buffer[offset++] = CharCodes.l;\n buffer[offset++] = CharCodes.s;\n buffer[offset++] = CharCodes.e;\n return 5;\n }\n }\n}\n\nexport default PDFBool;\n","import CharCodes from 'src/core/syntax/CharCodes';\n\nexport const IsDelimiter = new Uint8Array(256);\n\nIsDelimiter[CharCodes.LeftParen] = 1;\nIsDelimiter[CharCodes.RightParen] = 1;\nIsDelimiter[CharCodes.LessThan] = 1;\nIsDelimiter[CharCodes.GreaterThan] = 1;\nIsDelimiter[CharCodes.LeftSquareBracket] = 1;\nIsDelimiter[CharCodes.RightSquareBracket] = 1;\nIsDelimiter[CharCodes.LeftCurly] = 1;\nIsDelimiter[CharCodes.RightCurly] = 1;\nIsDelimiter[CharCodes.ForwardSlash] = 1;\nIsDelimiter[CharCodes.Percent] = 1;\n","import CharCodes from 'src/core/syntax/CharCodes';\n\nexport const IsWhitespace = new Uint8Array(256);\n\nIsWhitespace[CharCodes.Null] = 1;\nIsWhitespace[CharCodes.Tab] = 1;\nIsWhitespace[CharCodes.Newline] = 1;\nIsWhitespace[CharCodes.FormFeed] = 1;\nIsWhitespace[CharCodes.CarriageReturn] = 1;\nIsWhitespace[CharCodes.Space] = 1;\n","import CharCodes from 'src/core/syntax/CharCodes';\nimport { IsDelimiter } from 'src/core/syntax/Delimiters';\nimport { IsWhitespace } from 'src/core/syntax/Whitespace';\n\nexport const IsIrregular = new Uint8Array(256);\n\nfor (let idx = 0, len = 256; idx < len; idx++) {\n IsIrregular[idx] = IsWhitespace[idx] || IsDelimiter[idx] ? 1 : 0;\n}\nIsIrregular[CharCodes.Hash] = 1;\n","import { PrivateConstructorError } from 'src/core/errors';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { IsIrregular } from 'src/core/syntax/Irregular';\nimport {\n charFromHexCode,\n copyStringIntoBuffer,\n toCharCode,\n toHexString,\n} from 'src/utils';\n\nconst decodeName = (name: string) =>\n name.replace(/#([\\dABCDEF]{2})/g, (_, hex) => charFromHexCode(hex));\n\nconst isRegularChar = (charCode: number) =>\n charCode >= CharCodes.ExclamationPoint &&\n charCode <= CharCodes.Tilde &&\n !IsIrregular[charCode];\n\nconst ENFORCER = {};\nconst pool = new Map();\n\nclass PDFName extends PDFObject {\n static of = (name: string): PDFName => {\n const decodedValue = decodeName(name);\n\n let instance = pool.get(decodedValue);\n if (!instance) {\n instance = new PDFName(ENFORCER, decodedValue);\n pool.set(decodedValue, instance);\n }\n\n return instance;\n };\n\n /* tslint:disable member-ordering */\n static readonly Length = PDFName.of('Length');\n static readonly FlateDecode = PDFName.of('FlateDecode');\n static readonly Resources = PDFName.of('Resources');\n static readonly Font = PDFName.of('Font');\n static readonly XObject = PDFName.of('XObject');\n static readonly ExtGState = PDFName.of('ExtGState');\n static readonly Contents = PDFName.of('Contents');\n static readonly Type = PDFName.of('Type');\n static readonly Parent = PDFName.of('Parent');\n static readonly MediaBox = PDFName.of('MediaBox');\n static readonly Page = PDFName.of('Page');\n static readonly Annots = PDFName.of('Annots');\n static readonly TrimBox = PDFName.of('TrimBox');\n static readonly ArtBox = PDFName.of('ArtBox');\n static readonly BleedBox = PDFName.of('BleedBox');\n static readonly CropBox = PDFName.of('CropBox');\n static readonly Rotate = PDFName.of('Rotate');\n static readonly Title = PDFName.of('Title');\n static readonly Author = PDFName.of('Author');\n static readonly Subject = PDFName.of('Subject');\n static readonly Creator = PDFName.of('Creator');\n static readonly Keywords = PDFName.of('Keywords');\n static readonly Producer = PDFName.of('Producer');\n static readonly CreationDate = PDFName.of('CreationDate');\n static readonly ModDate = PDFName.of('ModDate');\n /* tslint:enable member-ordering */\n\n private readonly encodedName: string;\n\n private constructor(enforcer: any, name: string) {\n if (enforcer !== ENFORCER) throw new PrivateConstructorError('PDFName');\n super();\n\n let encodedName = '/';\n for (let idx = 0, len = name.length; idx < len; idx++) {\n const character = name[idx];\n const code = toCharCode(character);\n encodedName += isRegularChar(code) ? character : `#${toHexString(code)}`;\n }\n\n this.encodedName = encodedName;\n }\n\n asBytes(): Uint8Array {\n const bytes: number[] = [];\n\n let hex = '';\n let escaped = false;\n\n const pushByte = (byte?: number) => {\n if (byte !== undefined) bytes.push(byte);\n escaped = false;\n };\n\n for (let idx = 1, len = this.encodedName.length; idx < len; idx++) {\n const char = this.encodedName[idx];\n const byte = toCharCode(char);\n const nextChar = this.encodedName[idx + 1];\n if (!escaped) {\n if (byte === CharCodes.Hash) escaped = true;\n else pushByte(byte);\n } else {\n if (\n (byte >= CharCodes.Zero && byte <= CharCodes.Nine) ||\n (byte >= CharCodes.a && byte <= CharCodes.f) ||\n (byte >= CharCodes.A && byte <= CharCodes.F)\n ) {\n hex += char;\n if (\n hex.length === 2 ||\n !(\n (nextChar >= '0' && nextChar <= '9') ||\n (nextChar >= 'a' && nextChar <= 'f') ||\n (nextChar >= 'A' && nextChar <= 'F')\n )\n ) {\n pushByte(parseInt(hex, 16));\n hex = '';\n }\n } else {\n pushByte(byte);\n }\n }\n }\n\n return new Uint8Array(bytes);\n }\n\n // TODO: This should probably use `utf8Decode()`\n // TODO: Polyfill Array.from?\n decodeText(): string {\n const bytes = this.asBytes();\n return String.fromCharCode(...Array.from(bytes));\n }\n\n asString(): string {\n return this.encodedName;\n }\n\n /** @deprecated in favor of [[PDFName.asString]] */\n value(): string {\n return this.encodedName;\n }\n\n clone(): PDFName {\n return this;\n }\n\n toString(): string {\n return this.encodedName;\n }\n\n sizeInBytes(): number {\n return this.encodedName.length;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n offset += copyStringIntoBuffer(this.encodedName, buffer, offset);\n return this.encodedName.length;\n }\n}\n\nexport default PDFName;\n","import PDFObject from 'src/core/objects/PDFObject';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nclass PDFNull extends PDFObject {\n asNull(): null {\n return null;\n }\n\n clone(): PDFNull {\n return this;\n }\n\n toString(): string {\n return 'null';\n }\n\n sizeInBytes(): number {\n return 4;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n buffer[offset++] = CharCodes.n;\n buffer[offset++] = CharCodes.u;\n buffer[offset++] = CharCodes.l;\n buffer[offset++] = CharCodes.l;\n return 4;\n }\n}\n\nexport default new PDFNull();\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFBool from 'src/core/objects/PDFBool';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNull from 'src/core/objects/PDFNull';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFContext from 'src/core/PDFContext';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nexport type DictMap = Map;\n\nclass PDFDict extends PDFObject {\n static withContext = (context: PDFContext) => new PDFDict(new Map(), context);\n\n static fromMapWithContext = (map: DictMap, context: PDFContext) =>\n new PDFDict(map, context);\n\n readonly context: PDFContext;\n\n private readonly dict: DictMap;\n\n protected constructor(map: DictMap, context: PDFContext) {\n super();\n this.dict = map;\n this.context = context;\n }\n\n keys(): PDFName[] {\n return Array.from(this.dict.keys());\n }\n\n values(): PDFObject[] {\n return Array.from(this.dict.values());\n }\n\n entries(): [PDFName, PDFObject][] {\n return Array.from(this.dict.entries());\n }\n\n set(key: PDFName, value: PDFObject): void {\n this.dict.set(key, value);\n }\n\n get(\n key: PDFName,\n // TODO: `preservePDFNull` is for backwards compatibility. Should be\n // removed in next breaking API change.\n preservePDFNull = false,\n ): PDFObject | undefined {\n const value = this.dict.get(key);\n if (value === PDFNull && !preservePDFNull) return undefined;\n return value;\n }\n\n has(key: PDFName): boolean {\n const value = this.dict.get(key);\n return value !== undefined && value !== PDFNull;\n }\n\n lookupMaybe(key: PDFName, type: typeof PDFArray): PDFArray | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFBool): PDFBool | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFDict): PDFDict | undefined;\n lookupMaybe(\n key: PDFName,\n type: typeof PDFHexString,\n ): PDFHexString | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFName): PDFName | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFNull): typeof PDFNull | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFNumber): PDFNumber | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFStream): PDFStream | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFRef): PDFRef | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFString): PDFString | undefined;\n lookupMaybe(\n ref: PDFName,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n ): PDFString | PDFHexString | undefined;\n lookupMaybe(\n ref: PDFName,\n type1: typeof PDFDict,\n type2: typeof PDFStream,\n ): PDFDict | PDFStream | undefined;\n lookupMaybe(\n ref: PDFName,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n type3: typeof PDFArray,\n ): PDFString | PDFHexString | PDFArray | undefined;\n\n lookupMaybe(key: PDFName, ...types: any[]) {\n // TODO: `preservePDFNull` is for backwards compatibility. Should be\n // removed in next breaking API change.\n const preservePDFNull = types.includes(PDFNull);\n\n const value = this.context.lookupMaybe(\n this.get(key, preservePDFNull),\n // @ts-ignore\n ...types,\n ) as any;\n\n if (value === PDFNull && !preservePDFNull) return undefined;\n\n return value;\n }\n\n lookup(key: PDFName): PDFObject | undefined;\n lookup(key: PDFName, type: typeof PDFArray): PDFArray;\n lookup(key: PDFName, type: typeof PDFBool): PDFBool;\n lookup(key: PDFName, type: typeof PDFDict): PDFDict;\n lookup(key: PDFName, type: typeof PDFHexString): PDFHexString;\n lookup(key: PDFName, type: typeof PDFName): PDFName;\n lookup(key: PDFName, type: typeof PDFNull): typeof PDFNull;\n lookup(key: PDFName, type: typeof PDFNumber): PDFNumber;\n lookup(key: PDFName, type: typeof PDFStream): PDFStream;\n lookup(key: PDFName, type: typeof PDFRef): PDFRef;\n lookup(key: PDFName, type: typeof PDFString): PDFString;\n lookup(\n ref: PDFName,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n ): PDFString | PDFHexString;\n lookup(\n ref: PDFName,\n type1: typeof PDFDict,\n type2: typeof PDFStream,\n ): PDFDict | PDFStream;\n lookup(\n ref: PDFName,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n type3: typeof PDFArray,\n ): PDFString | PDFHexString | PDFArray;\n\n lookup(key: PDFName, ...types: any[]) {\n // TODO: `preservePDFNull` is for backwards compatibility. Should be\n // removed in next breaking API change.\n const preservePDFNull = types.includes(PDFNull);\n\n const value = this.context.lookup(\n this.get(key, preservePDFNull),\n // @ts-ignore\n ...types,\n ) as any;\n\n if (value === PDFNull && !preservePDFNull) return undefined;\n\n return value;\n }\n\n delete(key: PDFName): boolean {\n return this.dict.delete(key);\n }\n\n asMap(): Map {\n return new Map(this.dict);\n }\n\n /** Generate a random key that doesn't exist in current key set */\n uniqueKey(tag = ''): PDFName {\n const existingKeys = this.keys();\n let key = PDFName.of(this.context.addRandomSuffix(tag, 10));\n while (existingKeys.includes(key)) {\n key = PDFName.of(this.context.addRandomSuffix(tag, 10));\n }\n return key;\n }\n\n clone(context?: PDFContext): PDFDict {\n const clone = PDFDict.withContext(context || this.context);\n const entries = this.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n clone.set(key, value);\n }\n return clone;\n }\n\n toString(): string {\n let dictString = '<<\\n';\n const entries = this.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n dictString += key.toString() + ' ' + value.toString() + '\\n';\n }\n dictString += '>>';\n return dictString;\n }\n\n sizeInBytes(): number {\n let size = 5;\n const entries = this.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n size += key.sizeInBytes() + value.sizeInBytes() + 2;\n }\n return size;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const initialOffset = offset;\n\n buffer[offset++] = CharCodes.LessThan;\n buffer[offset++] = CharCodes.LessThan;\n buffer[offset++] = CharCodes.Newline;\n\n const entries = this.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n offset += key.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Space;\n offset += value.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n }\n\n buffer[offset++] = CharCodes.GreaterThan;\n buffer[offset++] = CharCodes.GreaterThan;\n\n return offset - initialOffset;\n }\n}\n\nexport default PDFDict;\n","import { MethodNotImplementedError } from 'src/core/errors';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFContext from 'src/core/PDFContext';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nclass PDFStream extends PDFObject {\n readonly dict: PDFDict;\n\n constructor(dict: PDFDict) {\n super();\n this.dict = dict;\n }\n\n clone(_context?: PDFContext): PDFStream {\n throw new MethodNotImplementedError(this.constructor.name, 'clone');\n }\n\n getContentsString(): string {\n throw new MethodNotImplementedError(\n this.constructor.name,\n 'getContentsString',\n );\n }\n\n getContents(): Uint8Array {\n throw new MethodNotImplementedError(this.constructor.name, 'getContents');\n }\n\n getContentsSize(): number {\n throw new MethodNotImplementedError(\n this.constructor.name,\n 'getContentsSize',\n );\n }\n\n updateDict(): void {\n const contentsSize = this.getContentsSize();\n this.dict.set(PDFName.Length, PDFNumber.of(contentsSize));\n }\n\n sizeInBytes(): number {\n this.updateDict();\n return this.dict.sizeInBytes() + this.getContentsSize() + 18;\n }\n\n toString(): string {\n this.updateDict();\n let streamString = this.dict.toString();\n streamString += '\\nstream\\n';\n streamString += this.getContentsString();\n streamString += '\\nendstream';\n return streamString;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n this.updateDict();\n const initialOffset = offset;\n\n offset += this.dict.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n\n buffer[offset++] = CharCodes.s;\n buffer[offset++] = CharCodes.t;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.a;\n buffer[offset++] = CharCodes.m;\n buffer[offset++] = CharCodes.Newline;\n\n const contents = this.getContents();\n for (let idx = 0, len = contents.length; idx < len; idx++) {\n buffer[offset++] = contents[idx];\n }\n\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.n;\n buffer[offset++] = CharCodes.d;\n buffer[offset++] = CharCodes.s;\n buffer[offset++] = CharCodes.t;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.a;\n buffer[offset++] = CharCodes.m;\n\n return offset - initialOffset;\n }\n}\n\nexport default PDFStream;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFContext from 'src/core/PDFContext';\nimport { arrayAsString } from 'src/utils';\n\nclass PDFRawStream extends PDFStream {\n static of = (dict: PDFDict, contents: Uint8Array) =>\n new PDFRawStream(dict, contents);\n\n readonly contents: Uint8Array;\n\n private constructor(dict: PDFDict, contents: Uint8Array) {\n super(dict);\n this.contents = contents;\n }\n\n asUint8Array(): Uint8Array {\n return this.contents.slice();\n }\n\n clone(context?: PDFContext): PDFRawStream {\n return PDFRawStream.of(this.dict.clone(context), this.contents.slice());\n }\n\n getContentsString(): string {\n return arrayAsString(this.contents);\n }\n\n getContents(): Uint8Array {\n return this.contents;\n }\n\n getContentsSize(): number {\n return this.contents.length;\n }\n}\n\nexport default PDFRawStream;\n","import { PrivateConstructorError } from 'src/core/errors';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport { copyStringIntoBuffer } from 'src/utils';\n\nconst ENFORCER = {};\nconst pool = new Map();\n\nclass PDFRef extends PDFObject {\n static of = (objectNumber: number, generationNumber = 0) => {\n const tag = `${objectNumber} ${generationNumber} R`;\n\n let instance = pool.get(tag);\n if (!instance) {\n instance = new PDFRef(ENFORCER, objectNumber, generationNumber);\n pool.set(tag, instance);\n }\n\n return instance;\n };\n\n readonly objectNumber: number;\n readonly generationNumber: number;\n readonly tag: string;\n\n private constructor(\n enforcer: any,\n objectNumber: number,\n generationNumber: number,\n ) {\n if (enforcer !== ENFORCER) throw new PrivateConstructorError('PDFRef');\n super();\n this.objectNumber = objectNumber;\n this.generationNumber = generationNumber;\n this.tag = `${objectNumber} ${generationNumber} R`;\n }\n\n clone(): PDFRef {\n return this;\n }\n\n toString(): string {\n return this.tag;\n }\n\n sizeInBytes(): number {\n return this.tag.length;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n offset += copyStringIntoBuffer(this.tag, buffer, offset);\n return this.tag.length;\n }\n}\n\nexport default PDFRef;\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFOperatorNames from 'src/core/operators/PDFOperatorNames';\nimport PDFContext from 'src/core/PDFContext';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { copyStringIntoBuffer } from 'src/utils';\n\nexport type PDFOperatorArg =\n | string\n | PDFName\n | PDFArray\n | PDFNumber\n | PDFString\n | PDFHexString;\n\nclass PDFOperator {\n static of = (name: PDFOperatorNames, args?: PDFOperatorArg[]) =>\n new PDFOperator(name, args);\n\n private readonly name: PDFOperatorNames;\n private readonly args: PDFOperatorArg[];\n\n private constructor(name: PDFOperatorNames, args?: PDFOperatorArg[]) {\n this.name = name;\n this.args = args || [];\n }\n\n clone(context?: PDFContext): PDFOperator {\n const args = new Array(this.args.length);\n for (let idx = 0, len = args.length; idx < len; idx++) {\n const arg = this.args[idx];\n args[idx] = arg instanceof PDFObject ? arg.clone(context) : arg;\n }\n return PDFOperator.of(this.name, args);\n }\n\n toString(): string {\n let value = '';\n for (let idx = 0, len = this.args.length; idx < len; idx++) {\n value += String(this.args[idx]) + ' ';\n }\n value += this.name;\n return value;\n }\n\n sizeInBytes(): number {\n let size = 0;\n for (let idx = 0, len = this.args.length; idx < len; idx++) {\n const arg = this.args[idx];\n size += (arg instanceof PDFObject ? arg.sizeInBytes() : arg.length) + 1;\n }\n size += this.name.length;\n return size;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const initialOffset = offset;\n\n for (let idx = 0, len = this.args.length; idx < len; idx++) {\n const arg = this.args[idx];\n if (arg instanceof PDFObject) {\n offset += arg.copyBytesInto(buffer, offset);\n } else {\n offset += copyStringIntoBuffer(arg, buffer, offset);\n }\n buffer[offset++] = CharCodes.Space;\n }\n\n offset += copyStringIntoBuffer(this.name, buffer, offset);\n\n return offset - initialOffset;\n }\n}\n\nexport default PDFOperator;\n","enum PDFOperatorNames {\n // Non Stroking Color Operators\n NonStrokingColor = 'sc',\n NonStrokingColorN = 'scn',\n NonStrokingColorRgb = 'rg',\n NonStrokingColorGray = 'g',\n NonStrokingColorCmyk = 'k',\n NonStrokingColorspace = 'cs',\n\n // Stroking Color Operators\n StrokingColor = 'SC',\n StrokingColorN = 'SCN',\n StrokingColorRgb = 'RG',\n StrokingColorGray = 'G',\n StrokingColorCmyk = 'K',\n StrokingColorspace = 'CS',\n\n // Marked Content Operators\n BeginMarkedContentSequence = 'BDC',\n BeginMarkedContent = 'BMC',\n EndMarkedContent = 'EMC',\n MarkedContentPointWithProps = 'DP',\n MarkedContentPoint = 'MP',\n DrawObject = 'Do',\n\n // Graphics State Operators\n ConcatTransformationMatrix = 'cm',\n PopGraphicsState = 'Q',\n PushGraphicsState = 'q',\n SetFlatness = 'i',\n SetGraphicsStateParams = 'gs',\n SetLineCapStyle = 'J',\n SetLineDashPattern = 'd',\n SetLineJoinStyle = 'j',\n SetLineMiterLimit = 'M',\n SetLineWidth = 'w',\n SetTextMatrix = 'Tm',\n SetRenderingIntent = 'ri',\n\n // Graphics Operators\n AppendRectangle = 're',\n BeginInlineImage = 'BI',\n BeginInlineImageData = 'ID',\n EndInlineImage = 'EI',\n ClipEvenOdd = 'W*',\n ClipNonZero = 'W',\n CloseAndStroke = 's',\n CloseFillEvenOddAndStroke = 'b*',\n CloseFillNonZeroAndStroke = 'b',\n ClosePath = 'h',\n AppendBezierCurve = 'c',\n CurveToReplicateFinalPoint = 'y',\n CurveToReplicateInitialPoint = 'v',\n EndPath = 'n',\n FillEvenOddAndStroke = 'B*',\n FillEvenOdd = 'f*',\n FillNonZeroAndStroke = 'B',\n FillNonZero = 'f',\n LegacyFillNonZero = 'F',\n LineTo = 'l',\n MoveTo = 'm',\n ShadingFill = 'sh',\n StrokePath = 'S',\n\n // Text Operators\n BeginText = 'BT',\n EndText = 'ET',\n MoveText = 'Td',\n MoveTextSetLeading = 'TD',\n NextLine = 'T*',\n SetCharacterSpacing = 'Tc',\n SetFontAndSize = 'Tf',\n SetTextHorizontalScaling = 'Tz',\n SetTextLineHeight = 'TL',\n SetTextRenderingMode = 'Tr',\n SetTextRise = 'Ts',\n SetWordSpacing = 'Tw',\n ShowText = 'Tj',\n ShowTextAdjusted = 'TJ',\n ShowTextLine = \"'\", // tslint:disable-line quotemark\n ShowTextLineAndSpace = '\"',\n\n // Type3 Font Operators\n Type3D0 = 'd0',\n Type3D1 = 'd1',\n\n // Compatibility Section Operators\n BeginCompatibilitySection = 'BX',\n EndCompatibilitySection = 'EX',\n}\n\nexport default PDFOperatorNames;\n","import pako from 'pako';\n\nimport { MethodNotImplementedError } from 'src/core/errors';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport { Cache } from 'src/utils';\n\nclass PDFFlateStream extends PDFStream {\n protected readonly contentsCache: Cache;\n protected readonly encode: boolean;\n\n constructor(dict: PDFDict, encode: boolean) {\n super(dict);\n\n this.encode = encode;\n\n if (encode) dict.set(PDFName.of('Filter'), PDFName.of('FlateDecode'));\n this.contentsCache = Cache.populatedBy(this.computeContents);\n }\n\n computeContents = (): Uint8Array => {\n const unencodedContents = this.getUnencodedContents();\n return this.encode ? pako.deflate(unencodedContents) : unencodedContents;\n };\n\n getContents(): Uint8Array {\n return this.contentsCache.access();\n }\n\n getContentsSize(): number {\n return this.contentsCache.access().length;\n }\n\n getUnencodedContents(): Uint8Array {\n throw new MethodNotImplementedError(\n this.constructor.name,\n 'getUnencodedContents',\n );\n }\n}\n\nexport default PDFFlateStream;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFOperator from 'src/core/operators/PDFOperator';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFFlateStream from 'src/core/structures/PDFFlateStream';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nclass PDFContentStream extends PDFFlateStream {\n static of = (dict: PDFDict, operators: PDFOperator[], encode = true) =>\n new PDFContentStream(dict, operators, encode);\n\n private readonly operators: PDFOperator[];\n\n private constructor(dict: PDFDict, operators: PDFOperator[], encode = true) {\n super(dict, encode);\n this.operators = operators;\n }\n\n push(...operators: PDFOperator[]): void {\n this.operators.push(...operators);\n }\n\n clone(context?: PDFContext): PDFContentStream {\n const operators = new Array(this.operators.length);\n for (let idx = 0, len = this.operators.length; idx < len; idx++) {\n operators[idx] = this.operators[idx].clone(context);\n }\n const { dict, encode } = this;\n return PDFContentStream.of(dict.clone(context), operators, encode);\n }\n\n getContentsString(): string {\n let value = '';\n for (let idx = 0, len = this.operators.length; idx < len; idx++) {\n value += `${this.operators[idx]}\\n`;\n }\n return value;\n }\n\n getUnencodedContents(): Uint8Array {\n const buffer = new Uint8Array(this.getUnencodedContentsSize());\n let offset = 0;\n for (let idx = 0, len = this.operators.length; idx < len; idx++) {\n offset += this.operators[idx].copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n }\n return buffer;\n }\n\n getUnencodedContentsSize(): number {\n let size = 0;\n for (let idx = 0, len = this.operators.length; idx < len; idx++) {\n size += this.operators[idx].sizeInBytes() + 1;\n }\n return size;\n }\n}\n\nexport default PDFContentStream;\n","import pako from 'pako';\n\nimport PDFHeader from 'src/core/document/PDFHeader';\nimport { UnexpectedObjectTypeError } from 'src/core/errors';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFBool from 'src/core/objects/PDFBool';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNull from 'src/core/objects/PDFNull';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFOperator from 'src/core/operators/PDFOperator';\nimport Ops from 'src/core/operators/PDFOperatorNames';\nimport PDFContentStream from 'src/core/structures/PDFContentStream';\nimport { typedArrayFor } from 'src/utils';\nimport { SimpleRNG } from 'src/utils/rng';\n\ntype LookupKey = PDFRef | PDFObject | undefined;\n\ninterface LiteralObject {\n [name: string]: Literal | PDFObject;\n}\n\ninterface LiteralArray {\n [index: number]: Literal | PDFObject;\n}\n\ntype Literal =\n | LiteralObject\n | LiteralArray\n | string\n | number\n | boolean\n | null\n | undefined;\n\nconst byAscendingObjectNumber = (\n [a]: [PDFRef, PDFObject],\n [b]: [PDFRef, PDFObject],\n) => a.objectNumber - b.objectNumber;\n\nclass PDFContext {\n static create = () => new PDFContext();\n\n largestObjectNumber: number;\n header: PDFHeader;\n trailerInfo: {\n Root?: PDFObject;\n Encrypt?: PDFObject;\n Info?: PDFObject;\n ID?: PDFObject;\n };\n rng: SimpleRNG;\n\n private readonly indirectObjects: Map;\n\n private pushGraphicsStateContentStreamRef?: PDFRef;\n private popGraphicsStateContentStreamRef?: PDFRef;\n\n private constructor() {\n this.largestObjectNumber = 0;\n this.header = PDFHeader.forVersion(1, 7);\n this.trailerInfo = {};\n\n this.indirectObjects = new Map();\n this.rng = SimpleRNG.withSeed(1);\n }\n\n assign(ref: PDFRef, object: PDFObject): void {\n this.indirectObjects.set(ref, object);\n if (ref.objectNumber > this.largestObjectNumber) {\n this.largestObjectNumber = ref.objectNumber;\n }\n }\n\n nextRef(): PDFRef {\n this.largestObjectNumber += 1;\n return PDFRef.of(this.largestObjectNumber);\n }\n\n register(object: PDFObject): PDFRef {\n const ref = this.nextRef();\n this.assign(ref, object);\n return ref;\n }\n\n delete(ref: PDFRef): boolean {\n return this.indirectObjects.delete(ref);\n }\n\n lookupMaybe(ref: LookupKey, type: typeof PDFArray): PDFArray | undefined;\n lookupMaybe(ref: LookupKey, type: typeof PDFBool): PDFBool | undefined;\n lookupMaybe(ref: LookupKey, type: typeof PDFDict): PDFDict | undefined;\n lookupMaybe(\n ref: LookupKey,\n type: typeof PDFHexString,\n ): PDFHexString | undefined;\n lookupMaybe(ref: LookupKey, type: typeof PDFName): PDFName | undefined;\n lookupMaybe(ref: LookupKey, type: typeof PDFNull): typeof PDFNull | undefined;\n lookupMaybe(ref: LookupKey, type: typeof PDFNumber): PDFNumber | undefined;\n lookupMaybe(ref: LookupKey, type: typeof PDFStream): PDFStream | undefined;\n lookupMaybe(ref: LookupKey, type: typeof PDFRef): PDFRef | undefined;\n lookupMaybe(ref: LookupKey, type: typeof PDFString): PDFString | undefined;\n lookupMaybe(\n ref: LookupKey,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n ): PDFString | PDFHexString | undefined;\n\n lookupMaybe(ref: LookupKey, ...types: any[]) {\n // TODO: `preservePDFNull` is for backwards compatibility. Should be\n // removed in next breaking API change.\n const preservePDFNull = types.includes(PDFNull);\n\n const result = ref instanceof PDFRef ? this.indirectObjects.get(ref) : ref;\n\n if (!result || (result === PDFNull && !preservePDFNull)) return undefined;\n\n for (let idx = 0, len = types.length; idx < len; idx++) {\n const type = types[idx];\n if (type === PDFNull) {\n if (result === PDFNull) return result;\n } else {\n if (result instanceof type) return result;\n }\n }\n throw new UnexpectedObjectTypeError(types, result);\n }\n\n lookup(ref: LookupKey): PDFObject | undefined;\n lookup(ref: LookupKey, type: typeof PDFArray): PDFArray;\n lookup(ref: LookupKey, type: typeof PDFBool): PDFBool;\n lookup(ref: LookupKey, type: typeof PDFDict): PDFDict;\n lookup(ref: LookupKey, type: typeof PDFHexString): PDFHexString;\n lookup(ref: LookupKey, type: typeof PDFName): PDFName;\n lookup(ref: LookupKey, type: typeof PDFNull): typeof PDFNull;\n lookup(ref: LookupKey, type: typeof PDFNumber): PDFNumber;\n lookup(ref: LookupKey, type: typeof PDFStream): PDFStream;\n lookup(ref: LookupKey, type: typeof PDFRef): PDFRef;\n lookup(ref: LookupKey, type: typeof PDFString): PDFString;\n lookup(\n ref: LookupKey,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n ): PDFString | PDFHexString;\n\n lookup(ref: LookupKey, ...types: any[]) {\n const result = ref instanceof PDFRef ? this.indirectObjects.get(ref) : ref;\n\n if (types.length === 0) return result;\n\n for (let idx = 0, len = types.length; idx < len; idx++) {\n const type = types[idx];\n if (type === PDFNull) {\n if (result === PDFNull) return result;\n } else {\n if (result instanceof type) return result;\n }\n }\n\n throw new UnexpectedObjectTypeError(types, result);\n }\n\n getObjectRef(pdfObject: PDFObject): PDFRef | undefined {\n const entries = Array.from(this.indirectObjects.entries());\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [ref, object] = entries[idx];\n if (object === pdfObject) {\n return ref;\n }\n }\n\n return undefined;\n }\n\n enumerateIndirectObjects(): [PDFRef, PDFObject][] {\n return Array.from(this.indirectObjects.entries()).sort(\n byAscendingObjectNumber,\n );\n }\n\n obj(literal: null | undefined): typeof PDFNull;\n obj(literal: string): PDFName;\n obj(literal: number): PDFNumber;\n obj(literal: boolean): PDFBool;\n obj(literal: LiteralObject): PDFDict;\n obj(literal: LiteralArray): PDFArray;\n\n obj(literal: Literal) {\n if (literal instanceof PDFObject) {\n return literal;\n } else if (literal === null || literal === undefined) {\n return PDFNull;\n } else if (typeof literal === 'string') {\n return PDFName.of(literal);\n } else if (typeof literal === 'number') {\n return PDFNumber.of(literal);\n } else if (typeof literal === 'boolean') {\n return literal ? PDFBool.True : PDFBool.False;\n } else if (Array.isArray(literal)) {\n const array = PDFArray.withContext(this);\n for (let idx = 0, len = literal.length; idx < len; idx++) {\n array.push(this.obj(literal[idx]));\n }\n return array;\n } else {\n const dict = PDFDict.withContext(this);\n const keys = Object.keys(literal);\n for (let idx = 0, len = keys.length; idx < len; idx++) {\n const key = keys[idx];\n const value = (literal as LiteralObject)[key] as any;\n if (value !== undefined) dict.set(PDFName.of(key), this.obj(value));\n }\n return dict;\n }\n }\n\n stream(\n contents: string | Uint8Array,\n dict: LiteralObject = {},\n ): PDFRawStream {\n return PDFRawStream.of(this.obj(dict), typedArrayFor(contents));\n }\n\n flateStream(\n contents: string | Uint8Array,\n dict: LiteralObject = {},\n ): PDFRawStream {\n return this.stream(pako.deflate(typedArrayFor(contents)), {\n ...dict,\n Filter: 'FlateDecode',\n });\n }\n\n contentStream(\n operators: PDFOperator[],\n dict: LiteralObject = {},\n ): PDFContentStream {\n return PDFContentStream.of(this.obj(dict), operators);\n }\n\n formXObject(\n operators: PDFOperator[],\n dict: LiteralObject = {},\n ): PDFContentStream {\n return this.contentStream(operators, {\n BBox: this.obj([0, 0, 0, 0]),\n Matrix: this.obj([1, 0, 0, 1, 0, 0]),\n ...dict,\n Type: 'XObject',\n Subtype: 'Form',\n });\n }\n\n /*\n * Reference to PDFContentStream that contains a single PDFOperator: `q`.\n * Used by [[PDFPageLeaf]] instances to ensure that when content streams are\n * added to a modified PDF, they start in the default, unchanged graphics\n * state.\n */\n getPushGraphicsStateContentStream(): PDFRef {\n if (this.pushGraphicsStateContentStreamRef) {\n return this.pushGraphicsStateContentStreamRef;\n }\n const dict = this.obj({});\n const op = PDFOperator.of(Ops.PushGraphicsState);\n const stream = PDFContentStream.of(dict, [op]);\n this.pushGraphicsStateContentStreamRef = this.register(stream);\n return this.pushGraphicsStateContentStreamRef;\n }\n\n /*\n * Reference to PDFContentStream that contains a single PDFOperator: `Q`.\n * Used by [[PDFPageLeaf]] instances to ensure that when content streams are\n * added to a modified PDF, they start in the default, unchanged graphics\n * state.\n */\n getPopGraphicsStateContentStream(): PDFRef {\n if (this.popGraphicsStateContentStreamRef) {\n return this.popGraphicsStateContentStreamRef;\n }\n const dict = this.obj({});\n const op = PDFOperator.of(Ops.PopGraphicsState);\n const stream = PDFContentStream.of(dict, [op]);\n this.popGraphicsStateContentStreamRef = this.register(stream);\n return this.popGraphicsStateContentStreamRef;\n }\n\n addRandomSuffix(prefix: string, suffixLength = 4): string {\n return `${prefix}-${Math.floor(this.rng.nextInt() * 10 ** suffixLength)}`;\n }\n}\n\nexport default PDFContext;\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFDict, { DictMap } from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFPageTree from 'src/core/structures/PDFPageTree';\n\nclass PDFPageLeaf extends PDFDict {\n static readonly InheritableEntries = [\n 'Resources',\n 'MediaBox',\n 'CropBox',\n 'Rotate',\n ];\n\n static withContextAndParent = (context: PDFContext, parent: PDFRef) => {\n const dict = new Map();\n dict.set(PDFName.Type, PDFName.Page);\n dict.set(PDFName.Parent, parent);\n dict.set(PDFName.Resources, context.obj({}));\n dict.set(PDFName.MediaBox, context.obj([0, 0, 612, 792]));\n return new PDFPageLeaf(dict, context, false);\n };\n\n static fromMapWithContext = (\n map: DictMap,\n context: PDFContext,\n autoNormalizeCTM = true,\n ) => new PDFPageLeaf(map, context, autoNormalizeCTM);\n\n private normalized = false;\n private readonly autoNormalizeCTM: boolean;\n\n private constructor(\n map: DictMap,\n context: PDFContext,\n autoNormalizeCTM = true,\n ) {\n super(map, context);\n this.autoNormalizeCTM = autoNormalizeCTM;\n }\n\n clone(context?: PDFContext): PDFPageLeaf {\n const clone = PDFPageLeaf.fromMapWithContext(\n new Map(),\n context || this.context,\n this.autoNormalizeCTM,\n );\n const entries = this.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n clone.set(key, value);\n }\n return clone;\n }\n\n Parent(): PDFPageTree | undefined {\n return this.lookupMaybe(PDFName.Parent, PDFDict) as PDFPageTree | undefined;\n }\n\n Contents(): PDFStream | PDFArray | undefined {\n return this.lookup(PDFName.of('Contents')) as\n | PDFStream\n | PDFArray\n | undefined;\n }\n\n Annots(): PDFArray | undefined {\n return this.lookupMaybe(PDFName.Annots, PDFArray);\n }\n\n BleedBox(): PDFArray | undefined {\n return this.lookupMaybe(PDFName.BleedBox, PDFArray);\n }\n\n TrimBox(): PDFArray | undefined {\n return this.lookupMaybe(PDFName.TrimBox, PDFArray);\n }\n\n ArtBox(): PDFArray | undefined {\n return this.lookupMaybe(PDFName.ArtBox, PDFArray);\n }\n\n Resources(): PDFDict | undefined {\n const dictOrRef = this.getInheritableAttribute(PDFName.Resources);\n return this.context.lookupMaybe(dictOrRef, PDFDict);\n }\n\n MediaBox(): PDFArray {\n const arrayOrRef = this.getInheritableAttribute(PDFName.MediaBox);\n return this.context.lookup(arrayOrRef, PDFArray);\n }\n\n CropBox(): PDFArray | undefined {\n const arrayOrRef = this.getInheritableAttribute(PDFName.CropBox);\n return this.context.lookupMaybe(arrayOrRef, PDFArray);\n }\n\n Rotate(): PDFNumber | undefined {\n const numberOrRef = this.getInheritableAttribute(PDFName.Rotate);\n return this.context.lookupMaybe(numberOrRef, PDFNumber);\n }\n\n getInheritableAttribute(name: PDFName): PDFObject | undefined {\n let attribute: PDFObject | undefined;\n this.ascend((node) => {\n if (!attribute) attribute = node.get(name);\n });\n return attribute;\n }\n\n setParent(parentRef: PDFRef): void {\n this.set(PDFName.Parent, parentRef);\n }\n\n addContentStream(contentStreamRef: PDFRef): void {\n const Contents = this.normalizedEntries().Contents || this.context.obj([]);\n this.set(PDFName.Contents, Contents);\n Contents.push(contentStreamRef);\n }\n\n wrapContentStreams(startStream: PDFRef, endStream: PDFRef): boolean {\n const Contents = this.Contents();\n if (Contents instanceof PDFArray) {\n Contents.insert(0, startStream);\n Contents.push(endStream);\n return true;\n }\n return false;\n }\n\n addAnnot(annotRef: PDFRef): void {\n const { Annots } = this.normalizedEntries();\n Annots.push(annotRef);\n }\n\n removeAnnot(annotRef: PDFRef) {\n const { Annots } = this.normalizedEntries();\n const index = Annots.indexOf(annotRef);\n if (index !== undefined) {\n Annots.remove(index);\n }\n }\n\n setFontDictionary(name: PDFName, fontDictRef: PDFRef): void {\n const { Font } = this.normalizedEntries();\n Font.set(name, fontDictRef);\n }\n\n newFontDictionaryKey(tag: string): PDFName {\n const { Font } = this.normalizedEntries();\n return Font.uniqueKey(tag);\n }\n\n newFontDictionary(tag: string, fontDictRef: PDFRef): PDFName {\n const key = this.newFontDictionaryKey(tag);\n this.setFontDictionary(key, fontDictRef);\n return key;\n }\n\n setXObject(name: PDFName, xObjectRef: PDFRef): void {\n const { XObject } = this.normalizedEntries();\n XObject.set(name, xObjectRef);\n }\n\n newXObjectKey(tag: string): PDFName {\n const { XObject } = this.normalizedEntries();\n return XObject.uniqueKey(tag);\n }\n\n newXObject(tag: string, xObjectRef: PDFRef): PDFName {\n const key = this.newXObjectKey(tag);\n this.setXObject(key, xObjectRef);\n return key;\n }\n\n setExtGState(name: PDFName, extGStateRef: PDFRef | PDFDict): void {\n const { ExtGState } = this.normalizedEntries();\n ExtGState.set(name, extGStateRef);\n }\n\n newExtGStateKey(tag: string): PDFName {\n const { ExtGState } = this.normalizedEntries();\n return ExtGState.uniqueKey(tag);\n }\n\n newExtGState(tag: string, extGStateRef: PDFRef | PDFDict): PDFName {\n const key = this.newExtGStateKey(tag);\n this.setExtGState(key, extGStateRef);\n return key;\n }\n\n ascend(visitor: (node: PDFPageTree | PDFPageLeaf) => any): void {\n visitor(this);\n const Parent = this.Parent();\n if (Parent) Parent.ascend(visitor);\n }\n\n normalize() {\n if (this.normalized) return;\n\n const { context } = this;\n\n const contentsRef = this.get(PDFName.Contents);\n const contents = this.context.lookup(contentsRef);\n if (contents instanceof PDFStream) {\n this.set(PDFName.Contents, context.obj([contentsRef]));\n }\n\n if (this.autoNormalizeCTM) {\n this.wrapContentStreams(\n this.context.getPushGraphicsStateContentStream(),\n this.context.getPopGraphicsStateContentStream(),\n );\n }\n\n // TODO: Clone `Resources` if it is inherited\n const dictOrRef = this.getInheritableAttribute(PDFName.Resources);\n const Resources =\n context.lookupMaybe(dictOrRef, PDFDict) || context.obj({});\n this.set(PDFName.Resources, Resources);\n\n // TODO: Clone `Font` if it is inherited\n const Font =\n Resources.lookupMaybe(PDFName.Font, PDFDict) || context.obj({});\n Resources.set(PDFName.Font, Font);\n\n // TODO: Clone `XObject` if it is inherited\n const XObject =\n Resources.lookupMaybe(PDFName.XObject, PDFDict) || context.obj({});\n Resources.set(PDFName.XObject, XObject);\n\n // TODO: Clone `ExtGState` if it is inherited\n const ExtGState =\n Resources.lookupMaybe(PDFName.ExtGState, PDFDict) || context.obj({});\n Resources.set(PDFName.ExtGState, ExtGState);\n\n const Annots = this.Annots() || context.obj([]);\n this.set(PDFName.Annots, Annots);\n\n this.normalized = true;\n }\n\n normalizedEntries() {\n this.normalize();\n const Annots = this.Annots()!;\n const Resources = this.Resources()!;\n const Contents = this.Contents() as PDFArray | undefined;\n return {\n Annots,\n Resources,\n Contents,\n Font: Resources.lookup(PDFName.Font, PDFDict),\n XObject: Resources.lookup(PDFName.XObject, PDFDict),\n ExtGState: Resources.lookup(PDFName.ExtGState, PDFDict),\n };\n }\n}\n\nexport default PDFPageLeaf;\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFPageLeaf from 'src/core/structures/PDFPageLeaf';\n\n/**\n * PDFObjectCopier copies PDFObjects from a src context to a dest context.\n * The primary use case for this is to copy pages between PDFs.\n *\n * _Copying_ an object with a PDFObjectCopier is different from _cloning_ an\n * object with its [[PDFObject.clone]] method:\n *\n * ```\n * const src: PDFContext = ...\n * const dest: PDFContext = ...\n * const originalObject: PDFObject = ...\n * const copiedObject = PDFObjectCopier.for(src, dest).copy(originalObject);\n * const clonedObject = originalObject.clone();\n * ```\n *\n * Copying an object is equivalent to cloning it and then copying over any other\n * objects that it references. Note that only dictionaries, arrays, and streams\n * (or structures build from them) can contain indirect references to other\n * objects. Copying a PDFObject that is not a dictionary, array, or stream is\n * supported, but is equivalent to cloning it.\n */\nclass PDFObjectCopier {\n static for = (src: PDFContext, dest: PDFContext) =>\n new PDFObjectCopier(src, dest);\n\n private readonly src: PDFContext;\n private readonly dest: PDFContext;\n private readonly traversedObjects = new Map();\n\n private constructor(src: PDFContext, dest: PDFContext) {\n this.src = src;\n this.dest = dest;\n }\n\n // prettier-ignore\n copy = (object: T): T => (\n object instanceof PDFPageLeaf ? this.copyPDFPage(object)\n : object instanceof PDFDict ? this.copyPDFDict(object)\n : object instanceof PDFArray ? this.copyPDFArray(object)\n : object instanceof PDFStream ? this.copyPDFStream(object)\n : object instanceof PDFRef ? this.copyPDFIndirectObject(object)\n : object.clone()\n ) as T;\n\n private copyPDFPage = (originalPage: PDFPageLeaf): PDFPageLeaf => {\n const clonedPage = originalPage.clone();\n\n // Move any entries that the originalPage is inheriting from its parent\n // tree nodes directly into originalPage so they are preserved during\n // the copy.\n const { InheritableEntries } = PDFPageLeaf;\n for (let idx = 0, len = InheritableEntries.length; idx < len; idx++) {\n const key = PDFName.of(InheritableEntries[idx]);\n const value = clonedPage.getInheritableAttribute(key)!;\n if (!clonedPage.get(key) && value) clonedPage.set(key, value);\n }\n\n // Remove the parent reference to prevent the whole donor document's page\n // tree from being copied when we only need a single page.\n clonedPage.delete(PDFName.of('Parent'));\n\n return this.copyPDFDict(clonedPage) as PDFPageLeaf;\n };\n\n private copyPDFDict = (originalDict: PDFDict): PDFDict => {\n if (this.traversedObjects.has(originalDict)) {\n return this.traversedObjects.get(originalDict) as PDFDict;\n }\n\n const clonedDict = originalDict.clone(this.dest);\n this.traversedObjects.set(originalDict, clonedDict);\n\n const entries = originalDict.entries();\n\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n clonedDict.set(key, this.copy(value));\n }\n\n return clonedDict;\n };\n\n private copyPDFArray = (originalArray: PDFArray): PDFArray => {\n if (this.traversedObjects.has(originalArray)) {\n return this.traversedObjects.get(originalArray) as PDFArray;\n }\n\n const clonedArray = originalArray.clone(this.dest);\n this.traversedObjects.set(originalArray, clonedArray);\n\n for (let idx = 0, len = originalArray.size(); idx < len; idx++) {\n const value = originalArray.get(idx);\n clonedArray.set(idx, this.copy(value));\n }\n\n return clonedArray;\n };\n\n private copyPDFStream = (originalStream: PDFStream): PDFStream => {\n if (this.traversedObjects.has(originalStream)) {\n return this.traversedObjects.get(originalStream) as PDFStream;\n }\n\n const clonedStream = originalStream.clone(this.dest);\n this.traversedObjects.set(originalStream, clonedStream);\n\n const entries = originalStream.dict.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n clonedStream.dict.set(key, this.copy(value));\n }\n\n return clonedStream;\n };\n\n private copyPDFIndirectObject = (ref: PDFRef): PDFRef => {\n const alreadyMapped = this.traversedObjects.has(ref);\n\n if (!alreadyMapped) {\n const newRef = this.dest.nextRef();\n this.traversedObjects.set(ref, newRef);\n\n const dereferencedValue = this.src.lookup(ref);\n if (dereferencedValue) {\n const cloned = this.copy(dereferencedValue);\n this.dest.assign(newRef, cloned);\n }\n }\n\n return this.traversedObjects.get(ref) as PDFRef;\n };\n}\n\nexport default PDFObjectCopier;\n","import PDFRef from 'src/core/objects/PDFRef';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { copyStringIntoBuffer, padStart } from 'src/utils';\n\nexport interface Entry {\n ref: PDFRef;\n offset: number;\n deleted: boolean;\n}\n\n/**\n * Entries should be added using the [[addEntry]] and [[addDeletedEntry]]\n * methods **in order of ascending object number**.\n */\nclass PDFCrossRefSection {\n static create = () =>\n new PDFCrossRefSection({\n ref: PDFRef.of(0, 65535),\n offset: 0,\n deleted: true,\n });\n\n static createEmpty = () => new PDFCrossRefSection();\n\n private subsections: Entry[][];\n private chunkIdx: number;\n private chunkLength: number;\n\n private constructor(firstEntry: Entry | void) {\n this.subsections = firstEntry ? [[firstEntry]] : [];\n this.chunkIdx = 0;\n this.chunkLength = firstEntry ? 1 : 0;\n }\n\n addEntry(ref: PDFRef, offset: number): void {\n this.append({ ref, offset, deleted: false });\n }\n\n addDeletedEntry(ref: PDFRef, nextFreeObjectNumber: number): void {\n this.append({ ref, offset: nextFreeObjectNumber, deleted: true });\n }\n\n toString(): string {\n let section = `xref\\n`;\n\n for (\n let rangeIdx = 0, rangeLen = this.subsections.length;\n rangeIdx < rangeLen;\n rangeIdx++\n ) {\n const range = this.subsections[rangeIdx];\n section += `${range[0].ref.objectNumber} ${range.length}\\n`;\n for (\n let entryIdx = 0, entryLen = range.length;\n entryIdx < entryLen;\n entryIdx++\n ) {\n const entry = range[entryIdx];\n section += padStart(String(entry.offset), 10, '0');\n section += ' ';\n section += padStart(String(entry.ref.generationNumber), 5, '0');\n section += ' ';\n section += entry.deleted ? 'f' : 'n';\n section += ' \\n';\n }\n }\n\n return section;\n }\n\n sizeInBytes(): number {\n let size = 5;\n for (let idx = 0, len = this.subsections.length; idx < len; idx++) {\n const subsection = this.subsections[idx];\n const subsectionLength = subsection.length;\n const [firstEntry] = subsection;\n size += 2;\n size += String(firstEntry.ref.objectNumber).length;\n size += String(subsectionLength).length;\n size += 20 * subsectionLength;\n }\n return size;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const initialOffset = offset;\n\n buffer[offset++] = CharCodes.x;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.f;\n buffer[offset++] = CharCodes.Newline;\n\n offset += this.copySubsectionsIntoBuffer(this.subsections, buffer, offset);\n\n return offset - initialOffset;\n }\n\n private copySubsectionsIntoBuffer(\n subsections: Entry[][],\n buffer: Uint8Array,\n offset: number,\n ): number {\n const initialOffset = offset;\n const length = subsections.length;\n\n for (let idx = 0; idx < length; idx++) {\n const subsection = this.subsections[idx];\n\n const firstObjectNumber = String(subsection[0].ref.objectNumber);\n offset += copyStringIntoBuffer(firstObjectNumber, buffer, offset);\n buffer[offset++] = CharCodes.Space;\n\n const rangeLength = String(subsection.length);\n offset += copyStringIntoBuffer(rangeLength, buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n\n offset += this.copyEntriesIntoBuffer(subsection, buffer, offset);\n }\n\n return offset - initialOffset;\n }\n\n private copyEntriesIntoBuffer(\n entries: Entry[],\n buffer: Uint8Array,\n offset: number,\n ): number {\n const length = entries.length;\n\n for (let idx = 0; idx < length; idx++) {\n const entry = entries[idx];\n\n const entryOffset = padStart(String(entry.offset), 10, '0');\n offset += copyStringIntoBuffer(entryOffset, buffer, offset);\n buffer[offset++] = CharCodes.Space;\n\n const entryGen = padStart(String(entry.ref.generationNumber), 5, '0');\n offset += copyStringIntoBuffer(entryGen, buffer, offset);\n buffer[offset++] = CharCodes.Space;\n\n buffer[offset++] = entry.deleted ? CharCodes.f : CharCodes.n;\n\n buffer[offset++] = CharCodes.Space;\n buffer[offset++] = CharCodes.Newline;\n }\n\n return 20 * length;\n }\n\n private append(currEntry: Entry): void {\n if (this.chunkLength === 0) {\n this.subsections.push([currEntry]);\n this.chunkIdx = 0;\n this.chunkLength = 1;\n return;\n }\n\n const chunk = this.subsections[this.chunkIdx];\n const prevEntry = chunk[this.chunkLength - 1];\n\n if (currEntry.ref.objectNumber - prevEntry.ref.objectNumber > 1) {\n this.subsections.push([currEntry]);\n this.chunkIdx += 1;\n this.chunkLength = 1;\n } else {\n chunk.push(currEntry);\n this.chunkLength += 1;\n }\n }\n}\n\nexport default PDFCrossRefSection;\n","import CharCodes from 'src/core/syntax/CharCodes';\nimport { copyStringIntoBuffer } from 'src/utils';\n\nclass PDFTrailer {\n static forLastCrossRefSectionOffset = (offset: number) =>\n new PDFTrailer(offset);\n\n private readonly lastXRefOffset: string;\n\n private constructor(lastXRefOffset: number) {\n this.lastXRefOffset = String(lastXRefOffset);\n }\n\n toString(): string {\n return `startxref\\n${this.lastXRefOffset}\\n%%EOF`;\n }\n\n sizeInBytes(): number {\n return 16 + this.lastXRefOffset.length;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const initialOffset = offset;\n\n buffer[offset++] = CharCodes.s;\n buffer[offset++] = CharCodes.t;\n buffer[offset++] = CharCodes.a;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.t;\n buffer[offset++] = CharCodes.x;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.f;\n buffer[offset++] = CharCodes.Newline;\n\n offset += copyStringIntoBuffer(this.lastXRefOffset, buffer, offset);\n\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.Percent;\n buffer[offset++] = CharCodes.Percent;\n buffer[offset++] = CharCodes.E;\n buffer[offset++] = CharCodes.O;\n buffer[offset++] = CharCodes.F;\n\n return offset - initialOffset;\n }\n}\n\nexport default PDFTrailer;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nclass PDFTrailerDict {\n static of = (dict: PDFDict) => new PDFTrailerDict(dict);\n\n readonly dict: PDFDict;\n\n private constructor(dict: PDFDict) {\n this.dict = dict;\n }\n\n toString(): string {\n return `trailer\\n${this.dict.toString()}`;\n }\n\n sizeInBytes(): number {\n return 8 + this.dict.sizeInBytes();\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const initialOffset = offset;\n\n buffer[offset++] = CharCodes.t;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.a;\n buffer[offset++] = CharCodes.i;\n buffer[offset++] = CharCodes.l;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.Newline;\n\n offset += this.dict.copyBytesInto(buffer, offset);\n\n return offset - initialOffset;\n }\n}\n\nexport default PDFTrailerDict;\n","import PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFFlateStream from 'src/core/structures/PDFFlateStream';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { copyStringIntoBuffer, last } from 'src/utils';\n\nexport type IndirectObject = [PDFRef, PDFObject];\n\nclass PDFObjectStream extends PDFFlateStream {\n static withContextAndObjects = (\n context: PDFContext,\n objects: IndirectObject[],\n encode = true,\n ) => new PDFObjectStream(context, objects, encode);\n\n private readonly objects: IndirectObject[];\n private readonly offsets: [number, number][];\n private readonly offsetsString: string;\n\n private constructor(\n context: PDFContext,\n objects: IndirectObject[],\n encode = true,\n ) {\n super(context.obj({}), encode);\n\n this.objects = objects;\n this.offsets = this.computeObjectOffsets();\n this.offsetsString = this.computeOffsetsString();\n\n this.dict.set(PDFName.of('Type'), PDFName.of('ObjStm'));\n this.dict.set(PDFName.of('N'), PDFNumber.of(this.objects.length));\n this.dict.set(PDFName.of('First'), PDFNumber.of(this.offsetsString.length));\n }\n\n getObjectsCount(): number {\n return this.objects.length;\n }\n\n clone(context?: PDFContext): PDFObjectStream {\n return PDFObjectStream.withContextAndObjects(\n context || this.dict.context,\n this.objects.slice(),\n this.encode,\n );\n }\n\n getContentsString(): string {\n let value = this.offsetsString;\n for (let idx = 0, len = this.objects.length; idx < len; idx++) {\n const [, object] = this.objects[idx];\n value += `${object}\\n`;\n }\n return value;\n }\n\n getUnencodedContents(): Uint8Array {\n const buffer = new Uint8Array(this.getUnencodedContentsSize());\n let offset = copyStringIntoBuffer(this.offsetsString, buffer, 0);\n for (let idx = 0, len = this.objects.length; idx < len; idx++) {\n const [, object] = this.objects[idx];\n offset += object.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n }\n return buffer;\n }\n\n getUnencodedContentsSize(): number {\n return (\n this.offsetsString.length +\n last(this.offsets)[1] +\n last(this.objects)[1].sizeInBytes() +\n 1\n );\n }\n\n private computeOffsetsString(): string {\n let offsetsString = '';\n for (let idx = 0, len = this.offsets.length; idx < len; idx++) {\n const [objectNumber, offset] = this.offsets[idx];\n offsetsString += `${objectNumber} ${offset} `;\n }\n return offsetsString;\n }\n\n private computeObjectOffsets(): [number, number][] {\n let offset = 0;\n const offsets = new Array(this.objects.length);\n for (let idx = 0, len = this.objects.length; idx < len; idx++) {\n const [ref, object] = this.objects[idx];\n offsets[idx] = [ref.objectNumber, offset];\n offset += object.sizeInBytes() + 1; // '\\n'\n }\n return offsets;\n }\n}\n\nexport default PDFObjectStream;\n","import PDFCrossRefSection from 'src/core/document/PDFCrossRefSection';\nimport PDFHeader from 'src/core/document/PDFHeader';\nimport PDFTrailer from 'src/core/document/PDFTrailer';\nimport PDFTrailerDict from 'src/core/document/PDFTrailerDict';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFObjectStream from 'src/core/structures/PDFObjectStream';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { copyStringIntoBuffer, waitForTick } from 'src/utils';\n\nexport interface SerializationInfo {\n size: number;\n header: PDFHeader;\n indirectObjects: [PDFRef, PDFObject][];\n xref?: PDFCrossRefSection;\n trailerDict?: PDFTrailerDict;\n trailer: PDFTrailer;\n}\n\nclass PDFWriter {\n static forContext = (context: PDFContext, objectsPerTick: number) =>\n new PDFWriter(context, objectsPerTick);\n\n protected readonly context: PDFContext;\n\n protected readonly objectsPerTick: number;\n private parsedObjects = 0;\n\n protected constructor(context: PDFContext, objectsPerTick: number) {\n this.context = context;\n this.objectsPerTick = objectsPerTick;\n }\n\n async serializeToBuffer(): Promise {\n const {\n size,\n header,\n indirectObjects,\n xref,\n trailerDict,\n trailer,\n } = await this.computeBufferSize();\n\n let offset = 0;\n const buffer = new Uint8Array(size);\n\n offset += header.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.Newline;\n\n for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {\n const [ref, object] = indirectObjects[idx];\n\n const objectNumber = String(ref.objectNumber);\n offset += copyStringIntoBuffer(objectNumber, buffer, offset);\n buffer[offset++] = CharCodes.Space;\n\n const generationNumber = String(ref.generationNumber);\n offset += copyStringIntoBuffer(generationNumber, buffer, offset);\n buffer[offset++] = CharCodes.Space;\n\n buffer[offset++] = CharCodes.o;\n buffer[offset++] = CharCodes.b;\n buffer[offset++] = CharCodes.j;\n buffer[offset++] = CharCodes.Newline;\n\n offset += object.copyBytesInto(buffer, offset);\n\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.n;\n buffer[offset++] = CharCodes.d;\n buffer[offset++] = CharCodes.o;\n buffer[offset++] = CharCodes.b;\n buffer[offset++] = CharCodes.j;\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.Newline;\n\n const n =\n object instanceof PDFObjectStream ? object.getObjectsCount() : 1;\n if (this.shouldWaitForTick(n)) await waitForTick();\n }\n\n if (xref) {\n offset += xref.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n }\n\n if (trailerDict) {\n offset += trailerDict.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.Newline;\n }\n\n offset += trailer.copyBytesInto(buffer, offset);\n\n return buffer;\n }\n\n protected computeIndirectObjectSize([ref, object]: [\n PDFRef,\n PDFObject,\n ]): number {\n const refSize = ref.sizeInBytes() + 3; // 'R' -> 'obj\\n'\n const objectSize = object.sizeInBytes() + 9; // '\\nendobj\\n\\n'\n return refSize + objectSize;\n }\n\n protected createTrailerDict(): PDFDict {\n return this.context.obj({\n Size: this.context.largestObjectNumber + 1,\n Root: this.context.trailerInfo.Root,\n Encrypt: this.context.trailerInfo.Encrypt,\n Info: this.context.trailerInfo.Info,\n ID: this.context.trailerInfo.ID,\n });\n }\n\n protected async computeBufferSize(): Promise {\n const header = PDFHeader.forVersion(1, 7);\n\n let size = header.sizeInBytes() + 2;\n\n const xref = PDFCrossRefSection.create();\n\n const indirectObjects = this.context.enumerateIndirectObjects();\n\n for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {\n const indirectObject = indirectObjects[idx];\n const [ref] = indirectObject;\n xref.addEntry(ref, size);\n size += this.computeIndirectObjectSize(indirectObject);\n if (this.shouldWaitForTick(1)) await waitForTick();\n }\n\n const xrefOffset = size;\n size += xref.sizeInBytes() + 1; // '\\n'\n\n const trailerDict = PDFTrailerDict.of(this.createTrailerDict());\n size += trailerDict.sizeInBytes() + 2; // '\\n\\n'\n\n const trailer = PDFTrailer.forLastCrossRefSectionOffset(xrefOffset);\n size += trailer.sizeInBytes();\n\n return { size, header, indirectObjects, xref, trailerDict, trailer };\n }\n\n protected shouldWaitForTick = (n: number) => {\n this.parsedObjects += n;\n return this.parsedObjects % this.objectsPerTick === 0;\n };\n}\n\nexport default PDFWriter;\n","import PDFObject from 'src/core/objects/PDFObject';\n\nclass PDFInvalidObject extends PDFObject {\n static of = (data: Uint8Array) => new PDFInvalidObject(data);\n\n private readonly data: Uint8Array;\n\n private constructor(data: Uint8Array) {\n super();\n this.data = data;\n }\n\n clone(): PDFInvalidObject {\n return PDFInvalidObject.of(this.data.slice());\n }\n\n toString(): string {\n return `PDFInvalidObject(${this.data.length} bytes)`;\n }\n\n sizeInBytes(): number {\n return this.data.length;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const length = this.data.length;\n for (let idx = 0; idx < length; idx++) {\n buffer[offset++] = this.data[idx];\n }\n return length;\n }\n}\n\nexport default PDFInvalidObject;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFFlateStream from 'src/core/structures/PDFFlateStream';\nimport { bytesFor, Cache, reverseArray, sizeInBytes, sum } from 'src/utils';\n\nexport enum EntryType {\n Deleted = 0,\n Uncompressed = 1,\n Compressed = 2,\n}\n\nexport interface DeletedEntry {\n type: EntryType.Deleted;\n ref: PDFRef;\n nextFreeObjectNumber: number;\n}\n\nexport interface UncompressedEntry {\n type: EntryType.Uncompressed;\n ref: PDFRef;\n offset: number;\n}\n\nexport interface CompressedEntry {\n type: EntryType.Compressed;\n ref: PDFRef;\n objectStreamRef: PDFRef;\n index: number;\n}\n\nexport type Entry = DeletedEntry | UncompressedEntry | CompressedEntry;\n\nexport type EntryTuple = [number, number, number];\n\n/**\n * Entries should be added using the [[addDeletedEntry]],\n * [[addUncompressedEntry]], and [[addCompressedEntry]] methods\n * **in order of ascending object number**.\n */\nclass PDFCrossRefStream extends PDFFlateStream {\n static create = (dict: PDFDict, encode = true) => {\n const stream = new PDFCrossRefStream(dict, [], encode);\n stream.addDeletedEntry(PDFRef.of(0, 65535), 0);\n return stream;\n };\n\n static of = (dict: PDFDict, entries: Entry[], encode = true) =>\n new PDFCrossRefStream(dict, entries, encode);\n\n private readonly entries: Entry[];\n private readonly entryTuplesCache: Cache;\n private readonly maxByteWidthsCache: Cache<[number, number, number]>;\n private readonly indexCache: Cache;\n\n private constructor(dict: PDFDict, entries?: Entry[], encode = true) {\n super(dict, encode);\n\n this.entries = entries || [];\n this.entryTuplesCache = Cache.populatedBy(this.computeEntryTuples);\n this.maxByteWidthsCache = Cache.populatedBy(this.computeMaxEntryByteWidths);\n this.indexCache = Cache.populatedBy(this.computeIndex);\n\n dict.set(PDFName.of('Type'), PDFName.of('XRef'));\n }\n\n addDeletedEntry(ref: PDFRef, nextFreeObjectNumber: number) {\n const type = EntryType.Deleted;\n this.entries.push({ type, ref, nextFreeObjectNumber });\n this.entryTuplesCache.invalidate();\n this.maxByteWidthsCache.invalidate();\n this.indexCache.invalidate();\n this.contentsCache.invalidate();\n }\n\n addUncompressedEntry(ref: PDFRef, offset: number) {\n const type = EntryType.Uncompressed;\n this.entries.push({ type, ref, offset });\n this.entryTuplesCache.invalidate();\n this.maxByteWidthsCache.invalidate();\n this.indexCache.invalidate();\n this.contentsCache.invalidate();\n }\n\n addCompressedEntry(ref: PDFRef, objectStreamRef: PDFRef, index: number) {\n const type = EntryType.Compressed;\n this.entries.push({ type, ref, objectStreamRef, index });\n this.entryTuplesCache.invalidate();\n this.maxByteWidthsCache.invalidate();\n this.indexCache.invalidate();\n this.contentsCache.invalidate();\n }\n\n clone(context?: PDFContext): PDFCrossRefStream {\n const { dict, entries, encode } = this;\n return PDFCrossRefStream.of(dict.clone(context), entries.slice(), encode);\n }\n\n getContentsString(): string {\n const entryTuples = this.entryTuplesCache.access();\n const byteWidths = this.maxByteWidthsCache.access();\n let value = '';\n\n for (\n let entryIdx = 0, entriesLen = entryTuples.length;\n entryIdx < entriesLen;\n entryIdx++\n ) {\n const [first, second, third] = entryTuples[entryIdx];\n\n const firstBytes = reverseArray(bytesFor(first));\n const secondBytes = reverseArray(bytesFor(second));\n const thirdBytes = reverseArray(bytesFor(third));\n\n for (let idx = byteWidths[0] - 1; idx >= 0; idx--) {\n value += (firstBytes[idx] || 0).toString(2);\n }\n for (let idx = byteWidths[1] - 1; idx >= 0; idx--) {\n value += (secondBytes[idx] || 0).toString(2);\n }\n for (let idx = byteWidths[2] - 1; idx >= 0; idx--) {\n value += (thirdBytes[idx] || 0).toString(2);\n }\n }\n\n return value;\n }\n\n getUnencodedContents(): Uint8Array {\n const entryTuples = this.entryTuplesCache.access();\n const byteWidths = this.maxByteWidthsCache.access();\n const buffer = new Uint8Array(this.getUnencodedContentsSize());\n\n let offset = 0;\n for (\n let entryIdx = 0, entriesLen = entryTuples.length;\n entryIdx < entriesLen;\n entryIdx++\n ) {\n const [first, second, third] = entryTuples[entryIdx];\n\n const firstBytes = reverseArray(bytesFor(first));\n const secondBytes = reverseArray(bytesFor(second));\n const thirdBytes = reverseArray(bytesFor(third));\n\n for (let idx = byteWidths[0] - 1; idx >= 0; idx--) {\n buffer[offset++] = firstBytes[idx] || 0;\n }\n for (let idx = byteWidths[1] - 1; idx >= 0; idx--) {\n buffer[offset++] = secondBytes[idx] || 0;\n }\n for (let idx = byteWidths[2] - 1; idx >= 0; idx--) {\n buffer[offset++] = thirdBytes[idx] || 0;\n }\n }\n\n return buffer;\n }\n\n getUnencodedContentsSize(): number {\n const byteWidths = this.maxByteWidthsCache.access();\n const entryWidth = sum(byteWidths);\n return entryWidth * this.entries.length;\n }\n\n updateDict(): void {\n super.updateDict();\n\n const byteWidths = this.maxByteWidthsCache.access();\n const index = this.indexCache.access();\n\n const { context } = this.dict;\n this.dict.set(PDFName.of('W'), context.obj(byteWidths));\n this.dict.set(PDFName.of('Index'), context.obj(index));\n }\n\n // Returns an array of integer pairs for each subsection of the cross ref\n // section, where each integer pair represents:\n // firstObjectNumber(OfSection), length(OfSection)\n private computeIndex = (): number[] => {\n const subsections: number[] = [];\n\n let subsectionLength = 0;\n for (let idx = 0, len = this.entries.length; idx < len; idx++) {\n const currEntry = this.entries[idx];\n const prevEntry = this.entries[idx - 1];\n\n if (idx === 0) {\n subsections.push(currEntry.ref.objectNumber);\n } else if (currEntry.ref.objectNumber - prevEntry.ref.objectNumber > 1) {\n subsections.push(subsectionLength);\n subsections.push(currEntry.ref.objectNumber);\n subsectionLength = 0;\n }\n\n subsectionLength += 1;\n }\n subsections.push(subsectionLength);\n\n return subsections;\n };\n\n private computeEntryTuples = (): EntryTuple[] => {\n const entryTuples: EntryTuple[] = new Array(this.entries.length);\n\n for (let idx = 0, len = this.entries.length; idx < len; idx++) {\n const entry = this.entries[idx];\n if (entry.type === EntryType.Deleted) {\n const { type, nextFreeObjectNumber, ref } = entry;\n entryTuples[idx] = [type, nextFreeObjectNumber, ref.generationNumber];\n }\n if (entry.type === EntryType.Uncompressed) {\n const { type, offset, ref } = entry;\n entryTuples[idx] = [type, offset, ref.generationNumber];\n }\n if (entry.type === EntryType.Compressed) {\n const { type, objectStreamRef, index } = entry;\n entryTuples[idx] = [type, objectStreamRef.objectNumber, index];\n }\n }\n\n return entryTuples;\n };\n\n private computeMaxEntryByteWidths = (): [number, number, number] => {\n const entryTuples = this.entryTuplesCache.access();\n const widths: [number, number, number] = [0, 0, 0];\n\n for (let idx = 0, len = entryTuples.length; idx < len; idx++) {\n const [first, second, third] = entryTuples[idx];\n\n const firstSize = sizeInBytes(first);\n const secondSize = sizeInBytes(second);\n const thirdSize = sizeInBytes(third);\n\n if (firstSize > widths[0]) widths[0] = firstSize;\n if (secondSize > widths[1]) widths[1] = secondSize;\n if (thirdSize > widths[2]) widths[2] = thirdSize;\n }\n\n return widths;\n };\n}\n\nexport default PDFCrossRefStream;\n","import PDFHeader from 'src/core/document/PDFHeader';\nimport PDFTrailer from 'src/core/document/PDFTrailer';\nimport PDFInvalidObject from 'src/core/objects/PDFInvalidObject';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFCrossRefStream from 'src/core/structures/PDFCrossRefStream';\nimport PDFObjectStream from 'src/core/structures/PDFObjectStream';\nimport PDFWriter from 'src/core/writers/PDFWriter';\nimport { last, waitForTick } from 'src/utils';\n\nclass PDFStreamWriter extends PDFWriter {\n static forContext = (\n context: PDFContext,\n objectsPerTick: number,\n encodeStreams = true,\n objectsPerStream = 50,\n ) =>\n new PDFStreamWriter(\n context,\n objectsPerTick,\n encodeStreams,\n objectsPerStream,\n );\n\n private readonly encodeStreams: boolean;\n private readonly objectsPerStream: number;\n\n private constructor(\n context: PDFContext,\n objectsPerTick: number,\n encodeStreams: boolean,\n objectsPerStream: number,\n ) {\n super(context, objectsPerTick);\n\n this.encodeStreams = encodeStreams;\n this.objectsPerStream = objectsPerStream;\n }\n\n protected async computeBufferSize() {\n let objectNumber = this.context.largestObjectNumber + 1;\n\n const header = PDFHeader.forVersion(1, 7);\n\n let size = header.sizeInBytes() + 2;\n\n const xrefStream = PDFCrossRefStream.create(\n this.createTrailerDict(),\n this.encodeStreams,\n );\n\n const uncompressedObjects: [PDFRef, PDFObject][] = [];\n const compressedObjects: [PDFRef, PDFObject][][] = [];\n const objectStreamRefs: PDFRef[] = [];\n\n const indirectObjects = this.context.enumerateIndirectObjects();\n for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {\n const indirectObject = indirectObjects[idx];\n const [ref, object] = indirectObject;\n\n const shouldNotCompress =\n ref === this.context.trailerInfo.Encrypt ||\n object instanceof PDFStream ||\n object instanceof PDFInvalidObject ||\n ref.generationNumber !== 0;\n\n if (shouldNotCompress) {\n uncompressedObjects.push(indirectObject);\n xrefStream.addUncompressedEntry(ref, size);\n size += this.computeIndirectObjectSize(indirectObject);\n if (this.shouldWaitForTick(1)) await waitForTick();\n } else {\n let chunk = last(compressedObjects);\n let objectStreamRef = last(objectStreamRefs);\n if (!chunk || chunk.length % this.objectsPerStream === 0) {\n chunk = [];\n compressedObjects.push(chunk);\n objectStreamRef = PDFRef.of(objectNumber++);\n objectStreamRefs.push(objectStreamRef);\n }\n xrefStream.addCompressedEntry(ref, objectStreamRef, chunk.length);\n chunk.push(indirectObject);\n }\n }\n\n for (let idx = 0, len = compressedObjects.length; idx < len; idx++) {\n const chunk = compressedObjects[idx];\n const ref = objectStreamRefs[idx];\n\n const objectStream = PDFObjectStream.withContextAndObjects(\n this.context,\n chunk,\n this.encodeStreams,\n );\n\n xrefStream.addUncompressedEntry(ref, size);\n size += this.computeIndirectObjectSize([ref, objectStream]);\n\n uncompressedObjects.push([ref, objectStream]);\n\n if (this.shouldWaitForTick(chunk.length)) await waitForTick();\n }\n\n const xrefStreamRef = PDFRef.of(objectNumber++);\n xrefStream.dict.set(PDFName.of('Size'), PDFNumber.of(objectNumber));\n xrefStream.addUncompressedEntry(xrefStreamRef, size);\n const xrefOffset = size;\n size += this.computeIndirectObjectSize([xrefStreamRef, xrefStream]);\n\n uncompressedObjects.push([xrefStreamRef, xrefStream]);\n\n const trailer = PDFTrailer.forLastCrossRefSectionOffset(xrefOffset);\n size += trailer.sizeInBytes();\n\n return { size, header, indirectObjects: uncompressedObjects, trailer };\n }\n}\n\nexport default PDFStreamWriter;\n","import {\n Encodings,\n Font,\n FontNames,\n EncodingType,\n} from '@pdf-lib/standard-fonts';\n\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport { toCodePoint, toHexString } from 'src/utils';\n\nexport interface Glyph {\n code: number;\n name: string;\n}\n\n/**\n * A note of thanks to the developers of https://github.com/foliojs/pdfkit, as\n * this class borrows from:\n * https://github.com/foliojs/pdfkit/blob/f91bdd61c164a72ea06be1a43dc0a412afc3925f/lib/font/afm.coffee\n */\nclass StandardFontEmbedder {\n static for = (fontName: FontNames, customName?: string) =>\n new StandardFontEmbedder(fontName, customName);\n\n readonly font: Font;\n readonly encoding: EncodingType;\n readonly fontName: string;\n readonly customName: string | undefined;\n\n private constructor(fontName: FontNames, customName?: string) {\n // prettier-ignore\n this.encoding = (\n fontName === FontNames.ZapfDingbats ? Encodings.ZapfDingbats\n : fontName === FontNames.Symbol ? Encodings.Symbol\n : Encodings.WinAnsi\n );\n this.font = Font.load(fontName);\n this.fontName = this.font.FontName;\n this.customName = customName;\n }\n\n /**\n * Encode the JavaScript string into this font. (JavaScript encodes strings in\n * Unicode, but standard fonts use either WinAnsi, ZapfDingbats, or Symbol\n * encodings)\n */\n encodeText(text: string): PDFHexString {\n const glyphs = this.encodeTextAsGlyphs(text);\n const hexCodes = new Array(glyphs.length);\n for (let idx = 0, len = glyphs.length; idx < len; idx++) {\n hexCodes[idx] = toHexString(glyphs[idx].code);\n }\n return PDFHexString.of(hexCodes.join(''));\n }\n\n widthOfTextAtSize(text: string, size: number): number {\n const glyphs = this.encodeTextAsGlyphs(text);\n let totalWidth = 0;\n\n for (let idx = 0, len = glyphs.length; idx < len; idx++) {\n const left = glyphs[idx].name;\n const right = (glyphs[idx + 1] || {}).name;\n const kernAmount = this.font.getXAxisKerningForPair(left, right) || 0;\n totalWidth += this.widthOfGlyph(left) + kernAmount;\n }\n\n const scale = size / 1000;\n return totalWidth * scale;\n }\n\n heightOfFontAtSize(\n size: number,\n options: { descender?: boolean } = {},\n ): number {\n const { descender = true } = options;\n\n const { Ascender, Descender, FontBBox } = this.font;\n const yTop = Ascender || FontBBox[3];\n const yBottom = Descender || FontBBox[1];\n\n let height = yTop - yBottom;\n if (!descender) height += Descender || 0;\n\n return (height / 1000) * size;\n }\n\n sizeOfFontAtHeight(height: number): number {\n const { Ascender, Descender, FontBBox } = this.font;\n const yTop = Ascender || FontBBox[3];\n const yBottom = Descender || FontBBox[1];\n return (1000 * height) / (yTop - yBottom);\n }\n\n embedIntoContext(context: PDFContext, ref?: PDFRef): PDFRef {\n const fontDict = context.obj({\n Type: 'Font',\n Subtype: 'Type1',\n BaseFont: this.customName || this.fontName,\n\n Encoding:\n this.encoding === Encodings.WinAnsi ? 'WinAnsiEncoding' : undefined,\n });\n\n if (ref) {\n context.assign(ref, fontDict);\n return ref;\n } else {\n return context.register(fontDict);\n }\n }\n\n private widthOfGlyph(glyphName: string): number {\n // Default to 250 if font doesn't specify a width\n return this.font.getWidthOfGlyph(glyphName) || 250;\n }\n\n private encodeTextAsGlyphs(text: string): Glyph[] {\n const codePoints = Array.from(text);\n const glyphs: Glyph[] = new Array(codePoints.length);\n for (let idx = 0, len = codePoints.length; idx < len; idx++) {\n const codePoint = toCodePoint(codePoints[idx])!;\n glyphs[idx] = this.encoding.encodeUnicodeCodePoint(codePoint);\n }\n return glyphs;\n }\n}\n\nexport default StandardFontEmbedder;\n","import { Glyph } from 'src/types/fontkit';\n\nimport { toHexString, toHexStringOfMinLength } from 'src/utils';\nimport {\n hasSurrogates,\n highSurrogate,\n isWithinBMP,\n lowSurrogate,\n} from 'src/utils/unicode';\n\n/** [fontId, codePoint] */\ntype BfChar = [string, string];\n\n/** `glyphs` should be an array of unique glyphs */\nexport const createCmap = (glyphs: Glyph[], glyphId: (g?: Glyph) => number) => {\n const bfChars: BfChar[] = new Array(glyphs.length);\n for (let idx = 0, len = glyphs.length; idx < len; idx++) {\n const glyph = glyphs[idx];\n const id = cmapHexFormat(cmapHexString(glyphId(glyph)));\n const unicode = cmapHexFormat(...glyph.codePoints.map(cmapCodePointFormat));\n bfChars[idx] = [id, unicode];\n }\n\n return fillCmapTemplate(bfChars);\n};\n\n/* =============================== Templates ================================ */\n\nconst fillCmapTemplate = (bfChars: BfChar[]) => `\\\n/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000>\nendcodespacerange\n${bfChars.length} beginbfchar\n${bfChars.map(([glyphId, codePoint]) => `${glyphId} ${codePoint}`).join('\\n')}\nendbfchar\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend\\\n`;\n\n/* =============================== Utilities ================================ */\n\nconst cmapHexFormat = (...values: string[]) => `<${values.join('')}>`;\n\nconst cmapHexString = (value: number) => toHexStringOfMinLength(value, 4);\n\nconst cmapCodePointFormat = (codePoint: number) => {\n if (isWithinBMP(codePoint)) return cmapHexString(codePoint);\n\n if (hasSurrogates(codePoint)) {\n const hs = highSurrogate(codePoint);\n const ls = lowSurrogate(codePoint);\n return `${cmapHexString(hs)}${cmapHexString(ls)}`;\n }\n\n const hex = toHexString(codePoint);\n const msg = `0x${hex} is not a valid UTF-8 or UTF-16 codepoint.`;\n throw new Error(msg);\n};\n","import { Font, Fontkit, Glyph, TypeFeatures } from 'src/types/fontkit';\n\nimport { createCmap } from 'src/core/embedders/CMap';\nimport { deriveFontFlags } from 'src/core/embedders/FontFlags';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFContext from 'src/core/PDFContext';\nimport {\n byAscendingId,\n Cache,\n sortedUniq,\n toHexStringOfMinLength,\n} from 'src/utils';\n\n/**\n * A note of thanks to the developers of https://github.com/foliojs/pdfkit, as\n * this class borrows from:\n * https://github.com/devongovett/pdfkit/blob/e71edab0dd4657b5a767804ba86c94c58d01fbca/lib/image/jpeg.coffee\n */\nclass CustomFontEmbedder {\n static async for(\n fontkit: Fontkit,\n fontData: Uint8Array,\n customName?: string,\n fontFeatures?: TypeFeatures,\n ) {\n const font = await fontkit.create(fontData);\n return new CustomFontEmbedder(font, fontData, customName, fontFeatures);\n }\n\n readonly font: Font;\n readonly scale: number;\n readonly fontData: Uint8Array;\n readonly fontName: string;\n readonly customName: string | undefined;\n readonly fontFeatures: TypeFeatures | undefined;\n\n protected baseFontName: string;\n protected glyphCache: Cache;\n\n protected constructor(\n font: Font,\n fontData: Uint8Array,\n customName?: string,\n fontFeatures?: TypeFeatures,\n ) {\n this.font = font;\n this.scale = 1000 / this.font.unitsPerEm;\n this.fontData = fontData;\n this.fontName = this.font.postscriptName || 'Font';\n this.customName = customName;\n this.fontFeatures = fontFeatures;\n\n this.baseFontName = '';\n this.glyphCache = Cache.populatedBy(this.allGlyphsInFontSortedById);\n }\n\n /**\n * Encode the JavaScript string into this font. (JavaScript encodes strings in\n * Unicode, but embedded fonts use their own custom encodings)\n */\n encodeText(text: string): PDFHexString {\n const { glyphs } = this.font.layout(text, this.fontFeatures);\n const hexCodes = new Array(glyphs.length);\n for (let idx = 0, len = glyphs.length; idx < len; idx++) {\n hexCodes[idx] = toHexStringOfMinLength(glyphs[idx].id, 4);\n }\n return PDFHexString.of(hexCodes.join(''));\n }\n\n // The advanceWidth takes into account kerning automatically, so we don't\n // have to do that manually like we do for the standard fonts.\n widthOfTextAtSize(text: string, size: number): number {\n const { glyphs } = this.font.layout(text, this.fontFeatures);\n let totalWidth = 0;\n for (let idx = 0, len = glyphs.length; idx < len; idx++) {\n totalWidth += glyphs[idx].advanceWidth * this.scale;\n }\n const scale = size / 1000;\n return totalWidth * scale;\n }\n\n heightOfFontAtSize(\n size: number,\n options: { descender?: boolean } = {},\n ): number {\n const { descender = true } = options;\n\n const { ascent, descent, bbox } = this.font;\n const yTop = (ascent || bbox.maxY) * this.scale;\n const yBottom = (descent || bbox.minY) * this.scale;\n\n let height = yTop - yBottom;\n if (!descender) height -= Math.abs(descent) || 0;\n\n return (height / 1000) * size;\n }\n\n sizeOfFontAtHeight(height: number): number {\n const { ascent, descent, bbox } = this.font;\n const yTop = (ascent || bbox.maxY) * this.scale;\n const yBottom = (descent || bbox.minY) * this.scale;\n return (1000 * height) / (yTop - yBottom);\n }\n\n embedIntoContext(context: PDFContext, ref?: PDFRef): Promise {\n this.baseFontName =\n this.customName || context.addRandomSuffix(this.fontName);\n return this.embedFontDict(context, ref);\n }\n\n protected async embedFontDict(\n context: PDFContext,\n ref?: PDFRef,\n ): Promise {\n const cidFontDictRef = await this.embedCIDFontDict(context);\n const unicodeCMapRef = this.embedUnicodeCmap(context);\n\n const fontDict = context.obj({\n Type: 'Font',\n Subtype: 'Type0',\n BaseFont: this.baseFontName,\n Encoding: 'Identity-H',\n DescendantFonts: [cidFontDictRef],\n ToUnicode: unicodeCMapRef,\n });\n\n if (ref) {\n context.assign(ref, fontDict);\n return ref;\n } else {\n return context.register(fontDict);\n }\n }\n\n protected isCFF(): boolean {\n return this.font.cff;\n }\n\n protected async embedCIDFontDict(context: PDFContext): Promise {\n const fontDescriptorRef = await this.embedFontDescriptor(context);\n\n const cidFontDict = context.obj({\n Type: 'Font',\n Subtype: this.isCFF() ? 'CIDFontType0' : 'CIDFontType2',\n CIDToGIDMap: 'Identity',\n BaseFont: this.baseFontName,\n CIDSystemInfo: {\n Registry: PDFString.of('Adobe'),\n Ordering: PDFString.of('Identity'),\n Supplement: 0,\n },\n FontDescriptor: fontDescriptorRef,\n W: this.computeWidths(),\n });\n\n return context.register(cidFontDict);\n }\n\n protected async embedFontDescriptor(context: PDFContext): Promise {\n const fontStreamRef = await this.embedFontStream(context);\n\n const { scale } = this;\n const { italicAngle, ascent, descent, capHeight, xHeight } = this.font;\n const { minX, minY, maxX, maxY } = this.font.bbox;\n\n const fontDescriptor = context.obj({\n Type: 'FontDescriptor',\n FontName: this.baseFontName,\n Flags: deriveFontFlags(this.font),\n FontBBox: [minX * scale, minY * scale, maxX * scale, maxY * scale],\n ItalicAngle: italicAngle,\n Ascent: ascent * scale,\n Descent: descent * scale,\n CapHeight: (capHeight || ascent) * scale,\n XHeight: (xHeight || 0) * scale,\n\n // Not sure how to compute/find this, nor is anybody else really:\n // https://stackoverflow.com/questions/35485179/stemv-value-of-the-truetype-font\n StemV: 0,\n\n [this.isCFF() ? 'FontFile3' : 'FontFile2']: fontStreamRef,\n });\n\n return context.register(fontDescriptor);\n }\n\n protected async serializeFont(): Promise {\n return this.fontData;\n }\n\n protected async embedFontStream(context: PDFContext): Promise {\n const fontStream = context.flateStream(await this.serializeFont(), {\n Subtype: this.isCFF() ? 'CIDFontType0C' : undefined,\n });\n return context.register(fontStream);\n }\n\n protected embedUnicodeCmap(context: PDFContext): PDFRef {\n const cmap = createCmap(this.glyphCache.access(), this.glyphId.bind(this));\n const cmapStream = context.flateStream(cmap);\n return context.register(cmapStream);\n }\n\n protected glyphId(glyph?: Glyph): number {\n return glyph ? glyph.id : -1;\n }\n\n protected computeWidths(): (number | number[])[] {\n const glyphs = this.glyphCache.access();\n\n const widths: (number | number[])[] = [];\n let currSection: number[] = [];\n\n for (let idx = 0, len = glyphs.length; idx < len; idx++) {\n const currGlyph = glyphs[idx];\n const prevGlyph = glyphs[idx - 1];\n\n const currGlyphId = this.glyphId(currGlyph);\n const prevGlyphId = this.glyphId(prevGlyph);\n\n if (idx === 0) {\n widths.push(currGlyphId);\n } else if (currGlyphId - prevGlyphId !== 1) {\n widths.push(currSection);\n widths.push(currGlyphId);\n currSection = [];\n }\n\n currSection.push(currGlyph.advanceWidth * this.scale);\n }\n\n widths.push(currSection);\n\n return widths;\n }\n\n private allGlyphsInFontSortedById = (): Glyph[] => {\n const glyphs: Glyph[] = new Array(this.font.characterSet.length);\n for (let idx = 0, len = glyphs.length; idx < len; idx++) {\n const codePoint = this.font.characterSet[idx];\n glyphs[idx] = this.font.glyphForCodePoint(codePoint);\n }\n return sortedUniq(glyphs.sort(byAscendingId), (g) => g.id);\n };\n}\n\nexport default CustomFontEmbedder;\n","import { Font } from 'src/types/fontkit';\n\nexport interface FontFlagOptions {\n fixedPitch?: boolean;\n serif?: boolean;\n symbolic?: boolean;\n script?: boolean;\n nonsymbolic?: boolean;\n italic?: boolean;\n allCap?: boolean;\n smallCap?: boolean;\n forceBold?: boolean;\n}\n\n// prettier-ignore\nconst makeFontFlags = (options: FontFlagOptions) => {\n let flags = 0;\n\n const flipBit = (bit: number) => { flags |= (1 << (bit - 1)); };\n\n if (options.fixedPitch) flipBit(1);\n if (options.serif) flipBit(2);\n if (options.symbolic) flipBit(3);\n if (options.script) flipBit(4);\n if (options.nonsymbolic) flipBit(6);\n if (options.italic) flipBit(7);\n if (options.allCap) flipBit(17);\n if (options.smallCap) flipBit(18);\n if (options.forceBold) flipBit(19);\n\n return flags;\n};\n\n// From: https://github.com/foliojs/pdfkit/blob/83f5f7243172a017adcf6a7faa5547c55982c57b/lib/font/embedded.js#L123-L129\nexport const deriveFontFlags = (font: Font): number => {\n const familyClass = font['OS/2'] ? font['OS/2'].sFamilyClass : 0;\n const flags = makeFontFlags({\n fixedPitch: font.post.isFixedPitch,\n serif: 1 <= familyClass && familyClass <= 7,\n symbolic: true, // Assume the font uses non-latin characters\n script: familyClass === 10,\n italic: font.head.macStyle.italic,\n });\n return flags;\n};\n","import { Font, Fontkit, Glyph, Subset, TypeFeatures } from 'src/types/fontkit';\n\nimport CustomFontEmbedder from 'src/core/embedders/CustomFontEmbedder';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport { Cache, mergeUint8Arrays, toHexStringOfMinLength } from 'src/utils';\n\n/**\n * A note of thanks to the developers of https://github.com/foliojs/pdfkit, as\n * this class borrows from:\n * https://github.com/devongovett/pdfkit/blob/e71edab0dd4657b5a767804ba86c94c58d01fbca/lib/image/jpeg.coffee\n */\nclass CustomFontSubsetEmbedder extends CustomFontEmbedder {\n static async for(\n fontkit: Fontkit,\n fontData: Uint8Array,\n customFontName?: string,\n fontFeatures?: TypeFeatures,\n ) {\n const font = await fontkit.create(fontData);\n return new CustomFontSubsetEmbedder(\n font,\n fontData,\n customFontName,\n fontFeatures,\n );\n }\n\n private readonly subset: Subset;\n private readonly glyphs: Glyph[];\n private readonly glyphIdMap: Map;\n\n private constructor(\n font: Font,\n fontData: Uint8Array,\n customFontName?: string,\n fontFeatures?: TypeFeatures,\n ) {\n super(font, fontData, customFontName, fontFeatures);\n\n this.subset = this.font.createSubset();\n this.glyphs = [];\n this.glyphCache = Cache.populatedBy(() => this.glyphs);\n this.glyphIdMap = new Map();\n }\n\n encodeText(text: string): PDFHexString {\n const { glyphs } = this.font.layout(text, this.fontFeatures);\n const hexCodes = new Array(glyphs.length);\n\n for (let idx = 0, len = glyphs.length; idx < len; idx++) {\n const glyph = glyphs[idx];\n const subsetGlyphId = this.subset.includeGlyph(glyph);\n\n this.glyphs[subsetGlyphId - 1] = glyph;\n this.glyphIdMap.set(glyph.id, subsetGlyphId);\n\n hexCodes[idx] = toHexStringOfMinLength(subsetGlyphId, 4);\n }\n\n this.glyphCache.invalidate();\n return PDFHexString.of(hexCodes.join(''));\n }\n\n protected isCFF(): boolean {\n return (this.subset as any).cff;\n }\n\n protected glyphId(glyph?: Glyph): number {\n return glyph ? this.glyphIdMap.get(glyph.id)! : -1;\n }\n\n protected serializeFont(): Promise {\n return new Promise((resolve, reject) => {\n const parts: Uint8Array[] = [];\n this.subset\n .encodeStream()\n .on('data', (bytes) => parts.push(bytes))\n .on('end', () => resolve(mergeUint8Arrays(parts)))\n .on('error' as any, (err) => reject(err));\n });\n }\n}\n\nexport default CustomFontSubsetEmbedder;\n","import PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\n\n// prettier-ignore\nconst MARKERS = [\n 0xffc0, 0xffc1, 0xffc2,\n 0xffc3, 0xffc5, 0xffc6,\n 0xffc7, 0xffc8, 0xffc9,\n 0xffca, 0xffcb, 0xffcc,\n 0xffcd, 0xffce, 0xffcf,\n];\n\nenum ColorSpace {\n DeviceGray = 'DeviceGray',\n DeviceRGB = 'DeviceRGB',\n DeviceCMYK = 'DeviceCMYK',\n}\n\nconst ChannelToColorSpace: { [idx: number]: ColorSpace | undefined } = {\n 1: ColorSpace.DeviceGray,\n 3: ColorSpace.DeviceRGB,\n 4: ColorSpace.DeviceCMYK,\n};\n\n/**\n * A note of thanks to the developers of https://github.com/foliojs/pdfkit, as\n * this class borrows from:\n * https://github.com/foliojs/pdfkit/blob/a6af76467ce06bd6a2af4aa7271ccac9ff152a7d/lib/image/jpeg.js\n */\nclass JpegEmbedder {\n static async for(imageData: Uint8Array) {\n const dataView = new DataView(imageData.buffer);\n\n const soi = dataView.getUint16(0);\n if (soi !== 0xffd8) throw new Error('SOI not found in JPEG');\n\n let pos = 2;\n let marker: number;\n\n while (pos < dataView.byteLength) {\n marker = dataView.getUint16(pos);\n pos += 2;\n if (MARKERS.includes(marker)) break;\n pos += dataView.getUint16(pos);\n }\n\n if (!MARKERS.includes(marker!)) throw new Error('Invalid JPEG');\n pos += 2;\n\n const bitsPerComponent = dataView.getUint8(pos++);\n const height = dataView.getUint16(pos);\n pos += 2;\n\n const width = dataView.getUint16(pos);\n pos += 2;\n\n const channelByte = dataView.getUint8(pos++);\n const channelName = ChannelToColorSpace[channelByte];\n\n if (!channelName) throw new Error('Unknown JPEG channel.');\n\n const colorSpace = channelName;\n\n return new JpegEmbedder(\n imageData,\n bitsPerComponent,\n width,\n height,\n colorSpace,\n );\n }\n\n readonly bitsPerComponent: number;\n readonly height: number;\n readonly width: number;\n readonly colorSpace: ColorSpace;\n\n private readonly imageData: Uint8Array;\n\n private constructor(\n imageData: Uint8Array,\n bitsPerComponent: number,\n width: number,\n height: number,\n colorSpace: ColorSpace,\n ) {\n this.imageData = imageData;\n this.bitsPerComponent = bitsPerComponent;\n this.width = width;\n this.height = height;\n this.colorSpace = colorSpace;\n }\n\n async embedIntoContext(context: PDFContext, ref?: PDFRef): Promise {\n const xObject = context.stream(this.imageData, {\n Type: 'XObject',\n Subtype: 'Image',\n BitsPerComponent: this.bitsPerComponent,\n Width: this.width,\n Height: this.height,\n ColorSpace: this.colorSpace,\n Filter: 'DCTDecode',\n\n // CMYK JPEG streams in PDF are typically stored complemented,\n // with 1 as 'off' and 0 as 'on' (PDF 32000-1:2008, 8.6.4.4).\n //\n // Standalone CMYK JPEG (usually exported by Photoshop) are\n // stored inverse, with 0 as 'off' and 1 as 'on', like RGB.\n //\n // Applying a swap here as a hedge that most bytes passing\n // through this method will benefit from it.\n Decode:\n this.colorSpace === ColorSpace.DeviceCMYK\n ? [1, 0, 1, 0, 1, 0, 1, 0]\n : undefined,\n });\n\n if (ref) {\n context.assign(ref, xObject);\n return ref;\n } else {\n return context.register(xObject);\n }\n }\n}\n\nexport default JpegEmbedder;\n","import PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport { PNG } from 'src/utils/png';\n\n/**\n * A note of thanks to the developers of https://github.com/foliojs/pdfkit, as\n * this class borrows from:\n * https://github.com/devongovett/pdfkit/blob/e71edab0dd4657b5a767804ba86c94c58d01fbca/lib/image/png.coffee\n */\nclass PngEmbedder {\n static async for(imageData: Uint8Array) {\n const png = PNG.load(imageData);\n return new PngEmbedder(png);\n }\n\n readonly bitsPerComponent: number;\n readonly height: number;\n readonly width: number;\n readonly colorSpace: 'DeviceRGB';\n\n private readonly image: PNG;\n\n private constructor(png: PNG) {\n this.image = png;\n this.bitsPerComponent = png.bitsPerComponent;\n this.width = png.width;\n this.height = png.height;\n this.colorSpace = 'DeviceRGB';\n }\n\n async embedIntoContext(context: PDFContext, ref?: PDFRef): Promise {\n const SMask = this.embedAlphaChannel(context);\n\n const xObject = context.flateStream(this.image.rgbChannel, {\n Type: 'XObject',\n Subtype: 'Image',\n BitsPerComponent: this.image.bitsPerComponent,\n Width: this.image.width,\n Height: this.image.height,\n ColorSpace: this.colorSpace,\n SMask,\n });\n\n if (ref) {\n context.assign(ref, xObject);\n return ref;\n } else {\n return context.register(xObject);\n }\n }\n\n private embedAlphaChannel(context: PDFContext): PDFRef | undefined {\n if (!this.image.alphaChannel) return undefined;\n\n const xObject = context.flateStream(this.image.alphaChannel, {\n Type: 'XObject',\n Subtype: 'Image',\n Height: this.image.height,\n Width: this.image.width,\n BitsPerComponent: this.image.bitsPerComponent,\n ColorSpace: 'DeviceGray',\n Decode: [0, 1],\n });\n\n return context.register(xObject);\n }\n}\n\nexport default PngEmbedder;\n","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The Stream class contained in this file is a TypeScript port of the\n * JavaScript Stream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\nexport interface StreamType {\n isEmpty: boolean;\n getByte(): number;\n getUint16(): number;\n getInt32(): number;\n getBytes(\n length: number,\n forceClamped?: boolean,\n ): Uint8Array | Uint8ClampedArray;\n peekByte(): number;\n peekBytes(\n length: number,\n forceClamped?: boolean,\n ): Uint8Array | Uint8ClampedArray;\n skip(n: number): void;\n reset(): void;\n makeSubStream(start: number, length: number): StreamType;\n decode(): Uint8Array;\n}\n\nclass Stream implements StreamType {\n private bytes: Uint8Array;\n private start: number;\n private pos: number;\n private end: number;\n\n constructor(buffer: Uint8Array, start?: number, length?: number) {\n this.bytes = buffer;\n this.start = start || 0;\n this.pos = this.start;\n this.end = !!start && !!length ? start + length : this.bytes.length;\n }\n\n get length() {\n return this.end - this.start;\n }\n\n get isEmpty() {\n return this.length === 0;\n }\n\n getByte() {\n if (this.pos >= this.end) {\n return -1;\n }\n return this.bytes[this.pos++];\n }\n\n getUint16() {\n const b0 = this.getByte();\n const b1 = this.getByte();\n if (b0 === -1 || b1 === -1) {\n return -1;\n }\n return (b0 << 8) + b1;\n }\n\n getInt32() {\n const b0 = this.getByte();\n const b1 = this.getByte();\n const b2 = this.getByte();\n const b3 = this.getByte();\n return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n }\n\n // Returns subarray of original buffer, should only be read.\n getBytes(length: number, forceClamped = false) {\n const bytes = this.bytes;\n const pos = this.pos;\n const strEnd = this.end;\n\n if (!length) {\n const subarray = bytes.subarray(pos, strEnd);\n // `this.bytes` is always a `Uint8Array` here.\n return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n } else {\n let end = pos + length;\n if (end > strEnd) {\n end = strEnd;\n }\n this.pos = end;\n const subarray = bytes.subarray(pos, end);\n // `this.bytes` is always a `Uint8Array` here.\n return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n }\n }\n\n peekByte() {\n const peekedByte = this.getByte();\n this.pos--;\n return peekedByte;\n }\n\n peekBytes(length: number, forceClamped = false) {\n const bytes = this.getBytes(length, forceClamped);\n this.pos -= bytes.length;\n return bytes;\n }\n\n skip(n: number) {\n if (!n) {\n n = 1;\n }\n this.pos += n;\n }\n\n reset() {\n this.pos = this.start;\n }\n\n moveStart() {\n this.start = this.pos;\n }\n\n makeSubStream(start: number, length: number) {\n return new Stream(this.bytes, start, length);\n }\n\n decode(): Uint8Array {\n return this.bytes;\n }\n}\n\nexport default Stream;\n","import { MethodNotImplementedError } from 'src/core/errors';\nimport Stream, { StreamType } from 'src/core/streams/Stream';\n\n/*\n * Copyright 2012 Mozilla Foundation\n *\n * The DecodeStream class contained in this file is a TypeScript port of the\n * JavaScript DecodeStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\n// Lots of DecodeStreams are created whose buffers are never used. For these\n// we share a single empty buffer. This is (a) space-efficient and (b) avoids\n// having special cases that would be required if we used |null| for an empty\n// buffer.\nconst emptyBuffer = new Uint8Array(0);\n\n/**\n * Super class for the decoding streams\n */\nclass DecodeStream implements StreamType {\n protected bufferLength: number;\n protected buffer: Uint8Array;\n protected eof: boolean;\n\n private pos: number;\n private minBufferLength: number;\n\n constructor(maybeMinBufferLength?: number) {\n this.pos = 0;\n this.bufferLength = 0;\n this.eof = false;\n this.buffer = emptyBuffer;\n this.minBufferLength = 512;\n if (maybeMinBufferLength) {\n // Compute the first power of two that is as big as maybeMinBufferLength.\n while (this.minBufferLength < maybeMinBufferLength) {\n this.minBufferLength *= 2;\n }\n }\n }\n\n get isEmpty() {\n while (!this.eof && this.bufferLength === 0) {\n this.readBlock();\n }\n return this.bufferLength === 0;\n }\n\n getByte() {\n const pos = this.pos;\n while (this.bufferLength <= pos) {\n if (this.eof) {\n return -1;\n }\n this.readBlock();\n }\n return this.buffer[this.pos++];\n }\n\n getUint16() {\n const b0 = this.getByte();\n const b1 = this.getByte();\n if (b0 === -1 || b1 === -1) {\n return -1;\n }\n return (b0 << 8) + b1;\n }\n\n getInt32() {\n const b0 = this.getByte();\n const b1 = this.getByte();\n const b2 = this.getByte();\n const b3 = this.getByte();\n return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n }\n\n getBytes(length: number, forceClamped = false) {\n let end;\n const pos = this.pos;\n\n if (length) {\n this.ensureBuffer(pos + length);\n end = pos + length;\n\n while (!this.eof && this.bufferLength < end) {\n this.readBlock();\n }\n const bufEnd = this.bufferLength;\n if (end > bufEnd) {\n end = bufEnd;\n }\n } else {\n while (!this.eof) {\n this.readBlock();\n }\n end = this.bufferLength;\n }\n\n this.pos = end;\n const subarray = this.buffer.subarray(pos, end);\n // `this.buffer` is either a `Uint8Array` or `Uint8ClampedArray` here.\n return forceClamped && !(subarray instanceof Uint8ClampedArray)\n ? new Uint8ClampedArray(subarray)\n : subarray;\n }\n\n peekByte() {\n const peekedByte = this.getByte();\n this.pos--;\n return peekedByte;\n }\n\n peekBytes(length: number, forceClamped = false) {\n const bytes = this.getBytes(length, forceClamped);\n this.pos -= bytes.length;\n return bytes;\n }\n\n skip(n: number) {\n if (!n) {\n n = 1;\n }\n this.pos += n;\n }\n\n reset() {\n this.pos = 0;\n }\n\n makeSubStream(start: number, length: number /* dict */) {\n const end = start + length;\n while (this.bufferLength <= end && !this.eof) {\n this.readBlock();\n }\n return new Stream(this.buffer, start, length /* dict */);\n }\n\n decode(): Uint8Array {\n while (!this.eof) this.readBlock();\n return this.buffer.subarray(0, this.bufferLength);\n }\n\n protected readBlock(): void {\n throw new MethodNotImplementedError(this.constructor.name, 'readBlock');\n }\n\n protected ensureBuffer(requested: number) {\n const buffer = this.buffer;\n if (requested <= buffer.byteLength) {\n return buffer;\n }\n let size = this.minBufferLength;\n while (size < requested) {\n size *= 2;\n }\n const buffer2 = new Uint8Array(size);\n buffer2.set(buffer);\n return (this.buffer = buffer2);\n }\n\n // getBaseStreams() {\n // if (this.str && this.str.getBaseStreams) {\n // return this.str.getBaseStreams();\n // }\n // return [];\n // }\n}\n\nexport default DecodeStream;\n","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The Ascii85Stream class contained in this file is a TypeScript port of the\n * JavaScript Ascii85Stream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\nimport DecodeStream from 'src/core/streams/DecodeStream';\nimport { StreamType } from 'src/core/streams/Stream';\n\nconst isSpace = (ch: number) =>\n ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;\n\nclass Ascii85Stream extends DecodeStream {\n private stream: StreamType;\n private input: Uint8Array;\n\n constructor(stream: StreamType, maybeLength?: number) {\n super(maybeLength);\n\n this.stream = stream;\n this.input = new Uint8Array(5);\n\n // Most streams increase in size when decoded, but Ascii85 streams\n // typically shrink by ~20%.\n if (maybeLength) {\n maybeLength = 0.8 * maybeLength;\n }\n }\n\n protected readBlock() {\n const TILDA_CHAR = 0x7e; // '~'\n const Z_LOWER_CHAR = 0x7a; // 'z'\n const EOF = -1;\n\n const stream = this.stream;\n\n let c = stream.getByte();\n while (isSpace(c)) {\n c = stream.getByte();\n }\n\n if (c === EOF || c === TILDA_CHAR) {\n this.eof = true;\n return;\n }\n\n const bufferLength = this.bufferLength;\n let buffer;\n let i;\n\n // special code for z\n if (c === Z_LOWER_CHAR) {\n buffer = this.ensureBuffer(bufferLength + 4);\n for (i = 0; i < 4; ++i) {\n buffer[bufferLength + i] = 0;\n }\n this.bufferLength += 4;\n } else {\n const input = this.input;\n input[0] = c;\n for (i = 1; i < 5; ++i) {\n c = stream.getByte();\n while (isSpace(c)) {\n c = stream.getByte();\n }\n\n input[i] = c;\n\n if (c === EOF || c === TILDA_CHAR) {\n break;\n }\n }\n buffer = this.ensureBuffer(bufferLength + i - 1);\n this.bufferLength += i - 1;\n\n // partial ending;\n if (i < 5) {\n for (; i < 5; ++i) {\n input[i] = 0x21 + 84;\n }\n this.eof = true;\n }\n let t = 0;\n for (i = 0; i < 5; ++i) {\n t = t * 85 + (input[i] - 0x21);\n }\n\n for (i = 3; i >= 0; --i) {\n buffer[bufferLength + i] = t & 0xff;\n t >>= 8;\n }\n }\n }\n}\n\nexport default Ascii85Stream;\n","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The AsciiHexStream class contained in this file is a TypeScript port of the\n * JavaScript AsciiHexStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\nimport DecodeStream from 'src/core/streams/DecodeStream';\nimport { StreamType } from 'src/core/streams/Stream';\n\nclass AsciiHexStream extends DecodeStream {\n private stream: StreamType;\n private firstDigit: number;\n\n constructor(stream: StreamType, maybeLength?: number) {\n super(maybeLength);\n\n this.stream = stream;\n\n this.firstDigit = -1;\n\n // Most streams increase in size when decoded, but AsciiHex streams shrink\n // by 50%.\n if (maybeLength) {\n maybeLength = 0.5 * maybeLength;\n }\n }\n\n protected readBlock() {\n const UPSTREAM_BLOCK_SIZE = 8000;\n const bytes = this.stream.getBytes(UPSTREAM_BLOCK_SIZE);\n if (!bytes.length) {\n this.eof = true;\n return;\n }\n\n const maxDecodeLength = (bytes.length + 1) >> 1;\n const buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);\n let bufferLength = this.bufferLength;\n\n let firstDigit = this.firstDigit;\n for (let i = 0, ii = bytes.length; i < ii; i++) {\n const ch = bytes[i];\n let digit;\n if (ch >= 0x30 && ch <= 0x39) {\n // '0'-'9'\n digit = ch & 0x0f;\n } else if ((ch >= 0x41 && ch <= 0x46) || (ch >= 0x61 && ch <= 0x66)) {\n // 'A'-'Z', 'a'-'z'\n digit = (ch & 0x0f) + 9;\n } else if (ch === 0x3e) {\n // '>'\n this.eof = true;\n break;\n } else {\n // probably whitespace\n continue; // ignoring\n }\n if (firstDigit < 0) {\n firstDigit = digit;\n } else {\n buffer[bufferLength++] = (firstDigit << 4) | digit;\n firstDigit = -1;\n }\n }\n if (firstDigit >= 0 && this.eof) {\n // incomplete byte\n buffer[bufferLength++] = firstDigit << 4;\n firstDigit = -1;\n }\n this.firstDigit = firstDigit;\n this.bufferLength = bufferLength;\n }\n}\n\nexport default AsciiHexStream;\n","/*\n * Copyright 1996-2003 Glyph & Cog, LLC\n *\n * The flate stream implementation contained in this file is a JavaScript port\n * of XPDF's implementation, made available under the Apache 2.0 open source\n * license.\n */\n\n/*\n * Copyright 2012 Mozilla Foundation\n *\n * The FlateStream class contained in this file is a TypeScript port of the\n * JavaScript FlateStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\n/* tslint:disable no-conditional-assignment */\nimport DecodeStream from 'src/core/streams/DecodeStream';\nimport { StreamType } from 'src/core/streams/Stream';\n\n// prettier-ignore\nconst codeLenCodeMap = new Int32Array([\n 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15\n]);\n\n// prettier-ignore\nconst lengthDecode = new Int32Array([\n 0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a,\n 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f,\n 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073,\n 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102\n]);\n\n// prettier-ignore\nconst distDecode = new Int32Array([\n 0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d,\n 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1,\n 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01,\n 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001\n]);\n\n// prettier-ignore\nconst fixedLitCodeTab = [new Int32Array([\n 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0,\n 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0,\n 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0,\n 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0,\n 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8,\n 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8,\n 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8,\n 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8,\n 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4,\n 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4,\n 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4,\n 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4,\n 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc,\n 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec,\n 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc,\n 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc,\n 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2,\n 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2,\n 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2,\n 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2,\n 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca,\n 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea,\n 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da,\n 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa,\n 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6,\n 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6,\n 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6,\n 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6,\n 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce,\n 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee,\n 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de,\n 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe,\n 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1,\n 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1,\n 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1,\n 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1,\n 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9,\n 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9,\n 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9,\n 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9,\n 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5,\n 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5,\n 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5,\n 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5,\n 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd,\n 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed,\n 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd,\n 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd,\n 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3,\n 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3,\n 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3,\n 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3,\n 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb,\n 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb,\n 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db,\n 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb,\n 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7,\n 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7,\n 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7,\n 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7,\n 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf,\n 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef,\n 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df,\n 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff\n]), 9] as [Int32Array, number];\n\n// prettier-ignore\nconst fixedDistCodeTab = [new Int32Array([\n 0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c,\n 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000,\n 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d,\n 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000\n]), 5] as [Int32Array, number];\n\nclass FlateStream extends DecodeStream {\n private stream: StreamType;\n private codeSize: number;\n private codeBuf: number;\n\n constructor(stream: StreamType, maybeLength?: number) {\n super(maybeLength);\n\n this.stream = stream;\n\n const cmf = stream.getByte();\n const flg = stream.getByte();\n if (cmf === -1 || flg === -1) {\n throw new Error(`Invalid header in flate stream: ${cmf}, ${flg}`);\n }\n if ((cmf & 0x0f) !== 0x08) {\n throw new Error(\n `Unknown compression method in flate stream: ${cmf}, ${flg}`,\n );\n }\n if (((cmf << 8) + flg) % 31 !== 0) {\n throw new Error(`Bad FCHECK in flate stream: ${cmf}, ${flg}`);\n }\n if (flg & 0x20) {\n throw new Error(`FDICT bit set in flate stream: ${cmf}, ${flg}`);\n }\n\n this.codeSize = 0;\n this.codeBuf = 0;\n }\n\n protected readBlock() {\n let buffer;\n let len;\n const str = this.stream;\n // read block header\n let hdr = this.getBits(3);\n if (hdr & 1) {\n this.eof = true;\n }\n hdr >>= 1;\n\n if (hdr === 0) {\n // uncompressed block\n let b;\n\n if ((b = str.getByte()) === -1) {\n throw new Error('Bad block header in flate stream');\n }\n let blockLen = b;\n if ((b = str.getByte()) === -1) {\n throw new Error('Bad block header in flate stream');\n }\n blockLen |= b << 8;\n if ((b = str.getByte()) === -1) {\n throw new Error('Bad block header in flate stream');\n }\n let check = b;\n if ((b = str.getByte()) === -1) {\n throw new Error('Bad block header in flate stream');\n }\n check |= b << 8;\n if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {\n // Ignoring error for bad \"empty\" block (see issue 1277)\n throw new Error('Bad uncompressed block length in flate stream');\n }\n\n this.codeBuf = 0;\n this.codeSize = 0;\n\n const bufferLength = this.bufferLength;\n buffer = this.ensureBuffer(bufferLength + blockLen);\n const end = bufferLength + blockLen;\n this.bufferLength = end;\n if (blockLen === 0) {\n if (str.peekByte() === -1) {\n this.eof = true;\n }\n } else {\n for (let n = bufferLength; n < end; ++n) {\n if ((b = str.getByte()) === -1) {\n this.eof = true;\n break;\n }\n buffer[n] = b;\n }\n }\n return;\n }\n\n let litCodeTable;\n let distCodeTable;\n if (hdr === 1) {\n // compressed block, fixed codes\n litCodeTable = fixedLitCodeTab;\n distCodeTable = fixedDistCodeTab;\n } else if (hdr === 2) {\n // compressed block, dynamic codes\n const numLitCodes = this.getBits(5) + 257;\n const numDistCodes = this.getBits(5) + 1;\n const numCodeLenCodes = this.getBits(4) + 4;\n\n // build the code lengths code table\n const codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);\n\n let i;\n for (i = 0; i < numCodeLenCodes; ++i) {\n codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);\n }\n const codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);\n\n // build the literal and distance code tables\n len = 0;\n i = 0;\n const codes = numLitCodes + numDistCodes;\n const codeLengths = new Uint8Array(codes);\n let bitsLength;\n let bitsOffset;\n let what;\n while (i < codes) {\n const code = this.getCode(codeLenCodeTab);\n if (code === 16) {\n bitsLength = 2;\n bitsOffset = 3;\n what = len;\n } else if (code === 17) {\n bitsLength = 3;\n bitsOffset = 3;\n what = len = 0;\n } else if (code === 18) {\n bitsLength = 7;\n bitsOffset = 11;\n what = len = 0;\n } else {\n codeLengths[i++] = len = code;\n continue;\n }\n\n let repeatLength = this.getBits(bitsLength) + bitsOffset;\n while (repeatLength-- > 0) {\n codeLengths[i++] = what;\n }\n }\n\n litCodeTable = this.generateHuffmanTable(\n codeLengths.subarray(0, numLitCodes),\n );\n distCodeTable = this.generateHuffmanTable(\n codeLengths.subarray(numLitCodes, codes),\n );\n } else {\n throw new Error('Unknown block type in flate stream');\n }\n\n buffer = this.buffer;\n let limit = buffer ? buffer.length : 0;\n let pos = this.bufferLength;\n while (true) {\n let code1 = this.getCode(litCodeTable);\n if (code1 < 256) {\n if (pos + 1 >= limit) {\n buffer = this.ensureBuffer(pos + 1);\n limit = buffer.length;\n }\n buffer[pos++] = code1;\n continue;\n }\n if (code1 === 256) {\n this.bufferLength = pos;\n return;\n }\n code1 -= 257;\n code1 = lengthDecode[code1];\n let code2 = code1 >> 16;\n if (code2 > 0) {\n code2 = this.getBits(code2);\n }\n len = (code1 & 0xffff) + code2;\n code1 = this.getCode(distCodeTable);\n code1 = distDecode[code1];\n code2 = code1 >> 16;\n if (code2 > 0) {\n code2 = this.getBits(code2);\n }\n const dist = (code1 & 0xffff) + code2;\n if (pos + len >= limit) {\n buffer = this.ensureBuffer(pos + len);\n limit = buffer.length;\n }\n for (let k = 0; k < len; ++k, ++pos) {\n buffer[pos] = buffer[pos - dist];\n }\n }\n }\n\n private getBits(bits: number) {\n const str = this.stream;\n let codeSize = this.codeSize;\n let codeBuf = this.codeBuf;\n\n let b;\n while (codeSize < bits) {\n if ((b = str.getByte()) === -1) {\n throw new Error('Bad encoding in flate stream');\n }\n codeBuf |= b << codeSize;\n codeSize += 8;\n }\n b = codeBuf & ((1 << bits) - 1);\n this.codeBuf = codeBuf >> bits;\n this.codeSize = codeSize -= bits;\n\n return b;\n }\n\n private getCode(table: [Int32Array, number]) {\n const str = this.stream;\n const codes = table[0];\n const maxLen = table[1];\n let codeSize = this.codeSize;\n let codeBuf = this.codeBuf;\n\n let b;\n while (codeSize < maxLen) {\n if ((b = str.getByte()) === -1) {\n // premature end of stream. code might however still be valid.\n // codeSize < codeLen check below guards against incomplete codeVal.\n break;\n }\n codeBuf |= b << codeSize;\n codeSize += 8;\n }\n const code = codes[codeBuf & ((1 << maxLen) - 1)];\n if (typeof codes === 'number') {\n console.log('FLATE:', code);\n }\n const codeLen = code >> 16;\n const codeVal = code & 0xffff;\n if (codeLen < 1 || codeSize < codeLen) {\n throw new Error('Bad encoding in flate stream');\n }\n this.codeBuf = codeBuf >> codeLen;\n this.codeSize = codeSize - codeLen;\n return codeVal;\n }\n\n private generateHuffmanTable(lengths: Uint8Array): [Int32Array, number] {\n const n = lengths.length;\n\n // find max code length\n let maxLen = 0;\n let i;\n for (i = 0; i < n; ++i) {\n if (lengths[i] > maxLen) {\n maxLen = lengths[i];\n }\n }\n\n // build the table\n const size = 1 << maxLen;\n const codes = new Int32Array(size);\n for (\n let len = 1, code = 0, skip = 2;\n len <= maxLen;\n ++len, code <<= 1, skip <<= 1\n ) {\n for (let val = 0; val < n; ++val) {\n if (lengths[val] === len) {\n // bit-reverse the code\n let code2 = 0;\n let t = code;\n for (i = 0; i < len; ++i) {\n code2 = (code2 << 1) | (t & 1);\n t >>= 1;\n }\n\n // fill the table entries\n for (i = code2; i < size; i += skip) {\n codes[i] = (len << 16) | val;\n }\n ++code;\n }\n }\n }\n\n return [codes, maxLen];\n }\n}\n\nexport default FlateStream;\n","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The LZWStream class contained in this file is a TypeScript port of the\n * JavaScript LZWStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\nimport DecodeStream from 'src/core/streams/DecodeStream';\nimport { StreamType } from 'src/core/streams/Stream';\n\nclass LZWStream extends DecodeStream {\n private stream: StreamType;\n private cachedData: number;\n private bitsCached: number;\n private lzwState: {\n earlyChange: 0 | 1;\n codeLength: number;\n nextCode: number;\n dictionaryValues: Uint8Array;\n dictionaryLengths: Uint16Array;\n dictionaryPrevCodes: Uint16Array;\n currentSequence: Uint8Array;\n currentSequenceLength: number;\n prevCode?: number | null;\n };\n\n constructor(\n stream: StreamType,\n maybeLength: number | undefined,\n earlyChange: 0 | 1,\n ) {\n super(maybeLength);\n\n this.stream = stream;\n this.cachedData = 0;\n this.bitsCached = 0;\n\n const maxLzwDictionarySize = 4096;\n const lzwState = {\n earlyChange,\n codeLength: 9,\n nextCode: 258,\n dictionaryValues: new Uint8Array(maxLzwDictionarySize),\n dictionaryLengths: new Uint16Array(maxLzwDictionarySize),\n dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),\n currentSequence: new Uint8Array(maxLzwDictionarySize),\n currentSequenceLength: 0,\n };\n for (let i = 0; i < 256; ++i) {\n lzwState.dictionaryValues[i] = i;\n lzwState.dictionaryLengths[i] = 1;\n }\n this.lzwState = lzwState;\n }\n\n protected readBlock() {\n const blockSize = 512;\n\n let estimatedDecodedSize = blockSize * 2;\n const decodedSizeDelta = blockSize;\n let i;\n let j;\n let q;\n\n const lzwState = this.lzwState;\n if (!lzwState) {\n return; // eof was found\n }\n\n const earlyChange = lzwState.earlyChange;\n let nextCode = lzwState.nextCode;\n const dictionaryValues = lzwState.dictionaryValues;\n const dictionaryLengths = lzwState.dictionaryLengths;\n const dictionaryPrevCodes = lzwState.dictionaryPrevCodes;\n let codeLength = lzwState.codeLength;\n let prevCode = lzwState.prevCode;\n const currentSequence = lzwState.currentSequence;\n let currentSequenceLength = lzwState.currentSequenceLength;\n\n let decodedLength = 0;\n let currentBufferLength = this.bufferLength;\n let buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n\n for (i = 0; i < blockSize; i++) {\n const code = this.readBits(codeLength);\n const hasPrev = currentSequenceLength > 0;\n if (!code || code < 256) {\n currentSequence[0] = code as number;\n currentSequenceLength = 1;\n } else if (code >= 258) {\n if (code < nextCode) {\n currentSequenceLength = dictionaryLengths[code];\n for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {\n currentSequence[j] = dictionaryValues[q];\n q = dictionaryPrevCodes[q];\n }\n } else {\n currentSequence[currentSequenceLength++] = currentSequence[0];\n }\n } else if (code === 256) {\n codeLength = 9;\n nextCode = 258;\n currentSequenceLength = 0;\n continue;\n } else {\n this.eof = true;\n delete this.lzwState;\n break;\n }\n\n if (hasPrev) {\n dictionaryPrevCodes[nextCode] = prevCode as number;\n dictionaryLengths[nextCode] = dictionaryLengths[prevCode as number] + 1;\n dictionaryValues[nextCode] = currentSequence[0];\n nextCode++;\n codeLength =\n (nextCode + earlyChange) & (nextCode + earlyChange - 1)\n ? codeLength\n : Math.min(\n Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1,\n 12,\n ) | 0;\n }\n prevCode = code;\n\n decodedLength += currentSequenceLength;\n if (estimatedDecodedSize < decodedLength) {\n do {\n estimatedDecodedSize += decodedSizeDelta;\n } while (estimatedDecodedSize < decodedLength);\n buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n }\n for (j = 0; j < currentSequenceLength; j++) {\n buffer[currentBufferLength++] = currentSequence[j];\n }\n }\n lzwState.nextCode = nextCode;\n lzwState.codeLength = codeLength;\n lzwState.prevCode = prevCode;\n lzwState.currentSequenceLength = currentSequenceLength;\n\n this.bufferLength = currentBufferLength;\n }\n\n private readBits(n: number) {\n let bitsCached = this.bitsCached;\n let cachedData = this.cachedData;\n while (bitsCached < n) {\n const c = this.stream.getByte();\n if (c === -1) {\n this.eof = true;\n return null;\n }\n cachedData = (cachedData << 8) | c;\n bitsCached += 8;\n }\n this.bitsCached = bitsCached -= n;\n this.cachedData = cachedData;\n return (cachedData >>> bitsCached) & ((1 << n) - 1);\n }\n}\n\nexport default LZWStream;\n","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The RunLengthStream class contained in this file is a TypeScript port of the\n * JavaScript RunLengthStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\nimport DecodeStream from 'src/core/streams/DecodeStream';\nimport { StreamType } from 'src/core/streams/Stream';\n\nclass RunLengthStream extends DecodeStream {\n private stream: StreamType;\n\n constructor(stream: StreamType, maybeLength?: number) {\n super(maybeLength);\n this.stream = stream;\n }\n\n protected readBlock() {\n // The repeatHeader has following format. The first byte defines type of run\n // and amount of bytes to repeat/copy: n = 0 through 127 - copy next n bytes\n // (in addition to the second byte from the header), n = 129 through 255 -\n // duplicate the second byte from the header (257 - n) times, n = 128 - end.\n const repeatHeader = this.stream.getBytes(2);\n if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {\n this.eof = true;\n return;\n }\n\n let buffer;\n let bufferLength = this.bufferLength;\n let n = repeatHeader[0];\n if (n < 128) {\n // copy n bytes\n buffer = this.ensureBuffer(bufferLength + n + 1);\n buffer[bufferLength++] = repeatHeader[1];\n if (n > 0) {\n const source = this.stream.getBytes(n);\n buffer.set(source, bufferLength);\n bufferLength += n;\n }\n } else {\n n = 257 - n;\n const b = repeatHeader[1];\n buffer = this.ensureBuffer(bufferLength + n + 1);\n for (let i = 0; i < n; i++) {\n buffer[bufferLength++] = b;\n }\n }\n this.bufferLength = bufferLength;\n }\n}\n\nexport default RunLengthStream;\n","import {\n UnexpectedObjectTypeError,\n UnsupportedEncodingError,\n} from 'src/core/errors';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNull from 'src/core/objects/PDFNull';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport Ascii85Stream from 'src/core/streams/Ascii85Stream';\nimport AsciiHexStream from 'src/core/streams/AsciiHexStream';\nimport FlateStream from 'src/core/streams/FlateStream';\nimport LZWStream from 'src/core/streams/LZWStream';\nimport RunLengthStream from 'src/core/streams/RunLengthStream';\nimport Stream, { StreamType } from 'src/core/streams/Stream';\n\nconst decodeStream = (\n stream: StreamType,\n encoding: PDFName,\n params: undefined | typeof PDFNull | PDFDict,\n) => {\n if (encoding === PDFName.of('FlateDecode')) {\n return new FlateStream(stream);\n }\n if (encoding === PDFName.of('LZWDecode')) {\n let earlyChange = 1;\n if (params instanceof PDFDict) {\n const EarlyChange = params.lookup(PDFName.of('EarlyChange'));\n if (EarlyChange instanceof PDFNumber) {\n earlyChange = EarlyChange.asNumber();\n }\n }\n return new LZWStream(stream, undefined, earlyChange as 0 | 1);\n }\n if (encoding === PDFName.of('ASCII85Decode')) {\n return new Ascii85Stream(stream);\n }\n if (encoding === PDFName.of('ASCIIHexDecode')) {\n return new AsciiHexStream(stream);\n }\n if (encoding === PDFName.of('RunLengthDecode')) {\n return new RunLengthStream(stream);\n }\n throw new UnsupportedEncodingError(encoding.asString());\n};\n\nexport const decodePDFRawStream = ({ dict, contents }: PDFRawStream) => {\n let stream: StreamType = new Stream(contents);\n\n const Filter = dict.lookup(PDFName.of('Filter'));\n const DecodeParms = dict.lookup(PDFName.of('DecodeParms'));\n\n if (Filter instanceof PDFName) {\n stream = decodeStream(\n stream,\n Filter,\n DecodeParms as PDFDict | typeof PDFNull | undefined,\n );\n } else if (Filter instanceof PDFArray) {\n for (let idx = 0, len = Filter.size(); idx < len; idx++) {\n stream = decodeStream(\n stream,\n Filter.lookup(idx, PDFName),\n DecodeParms && (DecodeParms as PDFArray).lookupMaybe(idx, PDFDict),\n );\n }\n } else if (!!Filter) {\n throw new UnexpectedObjectTypeError([PDFName, PDFArray], Filter);\n }\n\n return stream;\n};\n","import {\n MissingPageContentsEmbeddingError,\n UnrecognizedStreamTypeError,\n} from 'src/core/errors';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFContext from 'src/core/PDFContext';\nimport { decodePDFRawStream } from 'src/core/streams/decode';\nimport PDFContentStream from 'src/core/structures/PDFContentStream';\nimport PDFPageLeaf from 'src/core/structures/PDFPageLeaf';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { TransformationMatrix } from 'src/types/matrix';\nimport { mergeIntoTypedArray } from 'src/utils';\n\n/**\n * Represents a page bounding box.\n * Usually `left` and `bottom` are 0 and right, top are equal\n * to width, height if you want to clip to the whole page.\n *\n * y\n * ^\n * | +--------+ (width,height)\n * | | |\n * | | Page |\n * | | |\n * | | |\n * (0,0) | +--------+\n * +----------> x\n */\nexport interface PageBoundingBox {\n left: number /** The left of the bounding box */;\n bottom: number /** The bottom of the bounding box */;\n right: number /** The right of the bounding box */;\n top: number /** The top of the bounding box */;\n}\n\nconst fullPageBoundingBox = (page: PDFPageLeaf) => {\n const mediaBox = page.MediaBox();\n\n const width =\n mediaBox.lookup(2, PDFNumber).asNumber() -\n mediaBox.lookup(0, PDFNumber).asNumber();\n\n const height =\n mediaBox.lookup(3, PDFNumber).asNumber() -\n mediaBox.lookup(1, PDFNumber).asNumber();\n\n return { left: 0, bottom: 0, right: width, top: height };\n};\n\n// Returns the identity matrix, modified to position the content of the given\n// bounding box at (0, 0).\nconst boundingBoxAdjustedMatrix = (\n bb: PageBoundingBox,\n): TransformationMatrix => [1, 0, 0, 1, -bb.left, -bb.bottom];\n\nclass PDFPageEmbedder {\n static async for(\n page: PDFPageLeaf,\n boundingBox?: PageBoundingBox,\n transformationMatrix?: TransformationMatrix,\n ) {\n return new PDFPageEmbedder(page, boundingBox, transformationMatrix);\n }\n\n readonly width: number;\n readonly height: number;\n readonly boundingBox: PageBoundingBox;\n readonly transformationMatrix: TransformationMatrix;\n\n private readonly page: PDFPageLeaf;\n\n private constructor(\n page: PDFPageLeaf,\n boundingBox?: PageBoundingBox,\n transformationMatrix?: TransformationMatrix,\n ) {\n this.page = page;\n\n const bb = boundingBox ?? fullPageBoundingBox(page);\n\n this.width = bb.right - bb.left;\n this.height = bb.top - bb.bottom;\n this.boundingBox = bb;\n this.transformationMatrix =\n transformationMatrix ?? boundingBoxAdjustedMatrix(bb);\n }\n\n async embedIntoContext(context: PDFContext, ref?: PDFRef): Promise {\n const { Contents, Resources } = this.page.normalizedEntries();\n\n if (!Contents) throw new MissingPageContentsEmbeddingError();\n const decodedContents = this.decodeContents(Contents);\n\n const { left, bottom, right, top } = this.boundingBox;\n const xObject = context.flateStream(decodedContents, {\n Type: 'XObject',\n Subtype: 'Form',\n FormType: 1,\n BBox: [left, bottom, right, top],\n Matrix: this.transformationMatrix,\n Resources,\n });\n\n if (ref) {\n context.assign(ref, xObject);\n return ref;\n } else {\n return context.register(xObject);\n }\n }\n\n // `contents` is an array of streams which are merged to include them in the XObject.\n // This methods extracts each stream and joins them with a newline character.\n private decodeContents(contents: PDFArray) {\n const newline = Uint8Array.of(CharCodes.Newline);\n const decodedContents: Uint8Array[] = [];\n\n for (let idx = 0, len = contents.size(); idx < len; idx++) {\n const stream = contents.lookup(idx, PDFStream);\n\n let content: Uint8Array;\n if (stream instanceof PDFRawStream) {\n content = decodePDFRawStream(stream).decode();\n } else if (stream instanceof PDFContentStream) {\n content = stream.getUnencodedContents();\n } else {\n throw new UnrecognizedStreamTypeError(stream);\n }\n\n decodedContents.push(content, newline);\n }\n\n return mergeIntoTypedArray(...decodedContents);\n }\n}\n\nexport default PDFPageEmbedder;\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFBool from 'src/core/objects/PDFBool';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFContext from 'src/core/PDFContext';\nimport {\n assertEachIs,\n assertInteger,\n assertIsOneOf,\n assertRange,\n} from 'src/utils';\n\nconst asEnum = (\n rawValue: T | undefined,\n enumType: U,\n): U[keyof U] | undefined => {\n if (rawValue === undefined) return undefined;\n return enumType[rawValue];\n};\n\nexport enum NonFullScreenPageMode {\n /**\n * After exiting FullScreen mode, neither the document outline nor thumbnail\n * images should be visible.\n */\n UseNone = 'UseNone',\n\n /** After exiting FullScreen mode, the document outline should be visible. */\n UseOutlines = 'UseOutlines',\n\n /** After exiting FullScreen mode, thumbnail images should be visible. */\n UseThumbs = 'UseThumbs',\n\n /**\n * After exiting FullScreen mode, the optional content group panel should be\n * visible.\n */\n UseOC = 'UseOC',\n}\n\nexport enum ReadingDirection {\n /** The predominant reading order is Left to Right. */\n L2R = 'L2R',\n\n /**\n * The predominant reading order is Right to left (including vertical writing\n * systems, such as Chinese, Japanese and Korean).\n */\n R2L = 'R2L',\n}\n\nexport enum PrintScaling {\n /** No page scaling. */\n None = 'None',\n\n /* Use the PDF reader's default print scaling. */\n AppDefault = 'AppDefault',\n}\n\nexport enum Duplex {\n /** The PDF reader should print single-sided. */\n Simplex = 'Simplex',\n\n /**\n * The PDF reader should print double sided and flip on the short edge of the\n * sheet.\n */\n DuplexFlipShortEdge = 'DuplexFlipShortEdge',\n\n /**\n * The PDF reader should print double sided and flip on the long edge of the\n * sheet.\n */\n DuplexFlipLongEdge = 'DuplexFlipLongEdge',\n}\n\ntype BoolViewerPrefKey =\n | 'HideToolbar'\n | 'HideMenubar'\n | 'HideWindowUI'\n | 'FitWindow'\n | 'CenterWindow'\n | 'DisplayDocTitle'\n | 'PickTrayByPDFSize';\ntype NameViewerPrefKey =\n | 'NonFullScreenPageMode'\n | 'Direction'\n | 'PrintScaling'\n | 'Duplex';\n\ninterface PageRange {\n start: number;\n end: number;\n}\n\nclass ViewerPreferences {\n /** @ignore */\n readonly dict: PDFDict;\n\n /** @ignore */\n static fromDict = (dict: PDFDict): ViewerPreferences =>\n new ViewerPreferences(dict);\n\n /** @ignore */\n static create = (context: PDFContext) => {\n const dict = context.obj({});\n return new ViewerPreferences(dict);\n };\n\n /** @ignore */\n protected constructor(dict: PDFDict) {\n this.dict = dict;\n }\n\n protected lookupBool(key: BoolViewerPrefKey): PDFBool | undefined {\n const returnObj = this.dict.lookup(PDFName.of(key));\n if (returnObj instanceof PDFBool) return returnObj;\n return undefined;\n }\n\n protected lookupName(key: NameViewerPrefKey): PDFName | undefined {\n const returnObj = this.dict.lookup(PDFName.of(key));\n if (returnObj instanceof PDFName) return returnObj;\n return undefined;\n }\n\n /** @ignore */\n HideToolbar(): PDFBool | undefined {\n return this.lookupBool('HideToolbar');\n }\n\n /** @ignore */\n HideMenubar(): PDFBool | undefined {\n return this.lookupBool('HideMenubar');\n }\n\n /** @ignore */\n HideWindowUI(): PDFBool | undefined {\n return this.lookupBool('HideWindowUI');\n }\n\n /** @ignore */\n FitWindow(): PDFBool | undefined {\n return this.lookupBool('FitWindow');\n }\n\n /** @ignore */\n CenterWindow(): PDFBool | undefined {\n return this.lookupBool('CenterWindow');\n }\n\n /** @ignore */\n DisplayDocTitle(): PDFBool | undefined {\n return this.lookupBool('DisplayDocTitle');\n }\n\n /** @ignore */\n NonFullScreenPageMode(): PDFName | undefined {\n return this.lookupName('NonFullScreenPageMode');\n }\n\n /** @ignore */\n Direction(): PDFName | undefined {\n return this.lookupName('Direction');\n }\n\n /** @ignore */\n PrintScaling(): PDFName | undefined {\n return this.lookupName('PrintScaling');\n }\n\n /** @ignore */\n Duplex(): PDFName | undefined {\n return this.lookupName('Duplex');\n }\n\n /** @ignore */\n PickTrayByPDFSize(): PDFBool | undefined {\n return this.lookupBool('PickTrayByPDFSize');\n }\n\n /** @ignore */\n PrintPageRange(): PDFArray | undefined {\n const PrintPageRange = this.dict.lookup(PDFName.of('PrintPageRange'));\n if (PrintPageRange instanceof PDFArray) return PrintPageRange;\n return undefined;\n }\n\n /** @ignore */\n NumCopies(): PDFNumber | undefined {\n const NumCopies = this.dict.lookup(PDFName.of('NumCopies'));\n if (NumCopies instanceof PDFNumber) return NumCopies;\n return undefined;\n }\n\n /**\n * Returns `true` if PDF readers should hide the toolbar menus when displaying\n * this document.\n * @returns Whether or not toolbars should be hidden.\n */\n getHideToolbar(): boolean {\n return this.HideToolbar()?.asBoolean() ?? false;\n }\n\n /**\n * Returns `true` if PDF readers should hide the menu bar when displaying this\n * document.\n * @returns Whether or not the menu bar should be hidden.\n */\n getHideMenubar(): boolean {\n return this.HideMenubar()?.asBoolean() ?? false;\n }\n\n /**\n * Returns `true` if PDF readers should hide the user interface elements in\n * the document's window (such as scroll bars and navigation controls),\n * leaving only the document's contents displayed.\n * @returns Whether or not user interface elements should be hidden.\n */\n getHideWindowUI(): boolean {\n return this.HideWindowUI()?.asBoolean() ?? false;\n }\n\n /**\n * Returns `true` if PDF readers should resize the document's window to fit\n * the size of the first displayed page.\n * @returns Whether or not the window should be resized to fit.\n */\n getFitWindow(): boolean {\n return this.FitWindow()?.asBoolean() ?? false;\n }\n\n /**\n * Returns `true` if PDF readers should position the document's window in the\n * center of the screen.\n * @returns Whether or not to center the document window.\n */\n getCenterWindow(): boolean {\n return this.CenterWindow()?.asBoolean() ?? false;\n }\n\n /**\n * Returns `true` if the window's title bar should display the document\n * `Title`, taken from the document metadata (see [[PDFDocument.getTitle]]).\n * Returns `false` if the title bar should instead display the filename of the\n * PDF file.\n * @returns Whether to display the document title.\n */\n getDisplayDocTitle(): boolean {\n return this.DisplayDocTitle()?.asBoolean() ?? false;\n }\n\n /**\n * Returns the page mode, which tells the PDF reader how to display the\n * document after exiting full-screen mode.\n * @returns The page mode after exiting full-screen mode.\n */\n getNonFullScreenPageMode(): NonFullScreenPageMode {\n const mode = this.NonFullScreenPageMode()?.decodeText();\n return asEnum(mode, NonFullScreenPageMode) ?? NonFullScreenPageMode.UseNone;\n }\n\n /**\n * Returns the predominant reading order for text.\n * @returns The text reading order.\n */\n getReadingDirection(): ReadingDirection {\n const direction = this.Direction()?.decodeText();\n return asEnum(direction, ReadingDirection) ?? ReadingDirection.L2R;\n }\n\n /**\n * Returns the page scaling option that the PDF reader should select when the\n * print dialog is displayed.\n * @returns The page scaling option.\n */\n getPrintScaling(): PrintScaling {\n const scaling = this.PrintScaling()?.decodeText();\n return asEnum(scaling, PrintScaling) ?? PrintScaling.AppDefault;\n }\n\n /**\n * Returns the paper handling option that should be used when printing the\n * file from the print dialog.\n * @returns The paper handling option.\n */\n getDuplex(): Duplex | undefined {\n const duplex = this.Duplex()?.decodeText();\n return asEnum(duplex, Duplex);\n }\n\n /**\n * Returns `true` if the PDF page size should be used to select the input\n * paper tray.\n * @returns Whether or not the PDF page size should be used to select the\n * input paper tray.\n */\n getPickTrayByPDFSize(): boolean | undefined {\n return this.PickTrayByPDFSize()?.asBoolean();\n }\n\n /**\n * Returns an array of page number ranges, which are the values used to\n * initialize the print dialog box when the file is printed. Each range\n * specifies the first (`start`) and last (`end`) pages in a sub-range of\n * pages to be printed. The first page of the PDF file is denoted by 0.\n * For example:\n * ```js\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n * const includesPage3 = viewerPrefs\n * .getPrintRanges()\n * .some(pr => pr.start =< 2 && pr.end >= 2)\n * if (includesPage3) console.log('printRange includes page 3')\n * ```\n * @returns An array of objects, each with the properties `start` and `end`,\n * denoting page indices. If not, specified an empty array is\n * returned.\n */\n getPrintPageRange(): PageRange[] {\n const rng = this.PrintPageRange();\n if (!rng) return [];\n\n const pageRanges: PageRange[] = [];\n for (let i = 0; i < rng.size(); i += 2) {\n // Despite the spec clearly stating that \"The first page of the PDF file\n // shall be donoted by 1\", several test PDFs (spec 1.7) created in\n // Acrobat XI 11.0 and also read with Reader DC 2020.013 indicate this is\n // actually a 0 based index.\n const start = rng.lookup(i, PDFNumber).asNumber();\n const end = rng.lookup(i + 1, PDFNumber).asNumber();\n pageRanges.push({ start, end });\n }\n\n return pageRanges;\n }\n\n /**\n * Returns the number of copies to be printed when the print dialog is opened\n * for this document.\n * @returns The default number of copies to be printed.\n */\n getNumCopies(): number {\n return this.NumCopies()?.asNumber() ?? 1;\n }\n\n /**\n * Choose whether the PDF reader's toolbars should be hidden while the\n * document is active.\n * @param hideToolbar `true` if the toolbar should be hidden.\n */\n setHideToolbar(hideToolbar: boolean) {\n const HideToolbar = this.dict.context.obj(hideToolbar);\n this.dict.set(PDFName.of('HideToolbar'), HideToolbar);\n }\n\n /**\n * Choose whether the PDF reader's menu bar should be hidden while the\n * document is active.\n * @param hideMenubar `true` if the menu bar should be hidden.\n */\n setHideMenubar(hideMenubar: boolean) {\n const HideMenubar = this.dict.context.obj(hideMenubar);\n this.dict.set(PDFName.of('HideMenubar'), HideMenubar);\n }\n\n /**\n * Choose whether the PDF reader should hide user interface elements in the\n * document's window (such as scroll bars and navigation controls), leaving\n * only the document's contents displayed.\n * @param hideWindowUI `true` if the user interface elements should be hidden.\n */\n setHideWindowUI(hideWindowUI: boolean) {\n const HideWindowUI = this.dict.context.obj(hideWindowUI);\n this.dict.set(PDFName.of('HideWindowUI'), HideWindowUI);\n }\n\n /**\n * Choose whether the PDF reader should resize the document's window to fit\n * the size of the first displayed page.\n * @param fitWindow `true` if the window should be resized.\n */\n setFitWindow(fitWindow: boolean) {\n const FitWindow = this.dict.context.obj(fitWindow);\n this.dict.set(PDFName.of('FitWindow'), FitWindow);\n }\n\n /**\n * Choose whether the PDF reader should position the document's window in the\n * center of the screen.\n * @param centerWindow `true` if the window should be centered.\n */\n setCenterWindow(centerWindow: boolean) {\n const CenterWindow = this.dict.context.obj(centerWindow);\n this.dict.set(PDFName.of('CenterWindow'), CenterWindow);\n }\n\n /**\n * Choose whether the window's title bar should display the document `Title`\n * taken from the document metadata (see [[PDFDocument.setTitle]]). If\n * `false`, the title bar should instead display the PDF filename.\n * @param displayTitle `true` if the document title should be displayed.\n */\n setDisplayDocTitle(displayTitle: boolean) {\n const DisplayDocTitle = this.dict.context.obj(displayTitle);\n this.dict.set(PDFName.of('DisplayDocTitle'), DisplayDocTitle);\n }\n\n /**\n * Choose how the PDF reader should display the document upon exiting\n * full-screen mode. This entry is meaningful only if the value of the\n * `PageMode` entry in the document's [[PDFCatalog]] is `FullScreen`.\n *\n * For example:\n * ```js\n * import { PDFDocument, NonFullScreenPageMode, PDFName } from 'pdf-lib'\n *\n * const pdfDoc = await PDFDocument.create()\n *\n * // Set the PageMode\n * pdfDoc.catalog.set(PDFName.of('PageMode'),PDFName.of('FullScreen'))\n *\n * // Set what happens when full-screen is closed\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n * viewerPrefs.setNonFullScreenPageMode(NonFullScreenPageMode.UseOutlines)\n * ```\n *\n * @param nonFullScreenPageMode How the document should be displayed upon\n * exiting full screen mode.\n */\n setNonFullScreenPageMode(nonFullScreenPageMode: NonFullScreenPageMode) {\n assertIsOneOf(\n nonFullScreenPageMode,\n 'nonFullScreenPageMode',\n NonFullScreenPageMode,\n );\n const mode = PDFName.of(nonFullScreenPageMode);\n this.dict.set(PDFName.of('NonFullScreenPageMode'), mode);\n }\n\n /**\n * Choose the predominant reading order for text.\n *\n * This entry has no direct effect on the document's contents or page\n * numbering, but may be used to determine the relative positioning of pages\n * when displayed side by side or printed n-up.\n *\n * For example:\n * ```js\n * import { PDFDocument, ReadingDirection } from 'pdf-lib'\n *\n * const pdfDoc = await PDFDocument.create()\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n * viewerPrefs.setReadingDirection(ReadingDirection.R2L)\n * ```\n *\n * @param readingDirection The reading order for text.\n */\n setReadingDirection(readingDirection: ReadingDirection) {\n assertIsOneOf(readingDirection, 'readingDirection', ReadingDirection);\n const direction = PDFName.of(readingDirection);\n this.dict.set(PDFName.of('Direction'), direction);\n }\n\n /**\n * Choose the page scaling option that should be selected when a print dialog\n * is displayed for this document.\n *\n * For example:\n * ```js\n * import { PDFDocument, PrintScaling } from 'pdf-lib'\n *\n * const pdfDoc = await PDFDocument.create()\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n * viewerPrefs.setPrintScaling(PrintScaling.None)\n * ```\n *\n * @param printScaling The print scaling option.\n */\n setPrintScaling(printScaling: PrintScaling) {\n assertIsOneOf(printScaling, 'printScaling', PrintScaling);\n const scaling = PDFName.of(printScaling);\n this.dict.set(PDFName.of('PrintScaling'), scaling);\n }\n\n /**\n * Choose the paper handling option that should be selected by default in the\n * print dialog.\n *\n * For example:\n * ```js\n * import { PDFDocument, Duplex } from 'pdf-lib'\n *\n * const pdfDoc = await PDFDocument.create()\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n * viewerPrefs.setDuplex(Duplex.DuplexFlipShortEdge)\n * ```\n *\n * @param duplex The double or single sided printing option.\n */\n setDuplex(duplex: Duplex) {\n assertIsOneOf(duplex, 'duplex', Duplex);\n const dup = PDFName.of(duplex);\n this.dict.set(PDFName.of('Duplex'), dup);\n }\n\n /**\n * Choose whether the PDF document's page size should be used to select the\n * input paper tray when printing. This setting influences only the preset\n * values used to populate the print dialog presented by a PDF reader.\n *\n * If PickTrayByPDFSize is true, the check box in the print dialog associated\n * with input paper tray should be checked. This setting has no effect on\n * operating systems that do not provide the ability to pick the input tray\n * by size.\n *\n * @param pickTrayByPDFSize `true` if the document's page size should be used\n * to select the input paper tray.\n */\n setPickTrayByPDFSize(pickTrayByPDFSize: boolean) {\n const PickTrayByPDFSize = this.dict.context.obj(pickTrayByPDFSize);\n this.dict.set(PDFName.of('PickTrayByPDFSize'), PickTrayByPDFSize);\n }\n\n /**\n * Choose the page numbers used to initialize the print dialog box when the\n * file is printed. The first page of the PDF file is denoted by 0.\n *\n * For example:\n * ```js\n * import { PDFDocument } from 'pdf-lib'\n *\n * const pdfDoc = await PDFDocument.create()\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n *\n * // We can set the default print range to only the first page\n * viewerPrefs.setPrintPageRange({ start: 0, end: 0 })\n *\n * // Or we can supply noncontiguous ranges (e.g. pages 1, 3, and 5-7)\n * viewerPrefs.setPrintPageRange([\n * { start: 0, end: 0 },\n * { start: 2, end: 2 },\n * { start: 4, end: 6 },\n * ])\n * ```\n *\n * @param printPageRange An object or array of objects, each with the\n * properties `start` and `end`, denoting a range of\n * page indices.\n */\n setPrintPageRange(printPageRange: PageRange[] | PageRange) {\n if (!Array.isArray(printPageRange)) printPageRange = [printPageRange];\n\n const flatRange: number[] = [];\n for (let idx = 0, len = printPageRange.length; idx < len; idx++) {\n flatRange.push(printPageRange[idx].start);\n flatRange.push(printPageRange[idx].end);\n }\n\n assertEachIs(flatRange, 'printPageRange', ['number']);\n\n const pageRanges = this.dict.context.obj(flatRange);\n this.dict.set(PDFName.of('PrintPageRange'), pageRanges);\n }\n\n /**\n * Choose the default number of copies to be printed when the print dialog is\n * opened for this file.\n * @param numCopies The default number of copies.\n */\n setNumCopies(numCopies: number) {\n assertRange(numCopies, 'numCopies', 1, Number.MAX_VALUE);\n assertInteger(numCopies, 'numCopies');\n const NumCopies = this.dict.context.obj(numCopies);\n this.dict.set(PDFName.of('NumCopies'), NumCopies);\n }\n}\n\nexport default ViewerPreferences;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport { findLastMatch } from 'src/utils';\nimport { MissingDAEntryError, MissingTfOperatorError } from 'src/core/errors';\n\n// Examples:\n// `/Helv 12 Tf` -> ['Helv', '12']\n// `/HeBo 8.00 Tf` -> ['HeBo', '8.00']\n// `/HeBo Tf` -> ['HeBo', undefined]\nconst tfRegex = /\\/([^\\0\\t\\n\\f\\r\\ ]+)[\\0\\t\\n\\f\\r\\ ]*(\\d*\\.\\d+|\\d+)?[\\0\\t\\n\\f\\r\\ ]+Tf/;\n\nclass PDFAcroField {\n readonly dict: PDFDict;\n readonly ref: PDFRef;\n\n protected constructor(dict: PDFDict, ref: PDFRef) {\n this.dict = dict;\n this.ref = ref;\n }\n\n T(): PDFString | PDFHexString | undefined {\n return this.dict.lookupMaybe(PDFName.of('T'), PDFString, PDFHexString);\n }\n\n Ff(): PDFNumber | undefined {\n const numberOrRef = this.getInheritableAttribute(PDFName.of('Ff'));\n return this.dict.context.lookupMaybe(numberOrRef, PDFNumber);\n }\n\n V(): PDFObject | undefined {\n const valueOrRef = this.getInheritableAttribute(PDFName.of('V'));\n return this.dict.context.lookup(valueOrRef);\n }\n\n Kids(): PDFArray | undefined {\n return this.dict.lookupMaybe(PDFName.of('Kids'), PDFArray);\n }\n\n // Parent(): PDFDict | undefined {\n // return this.dict.lookupMaybe(PDFName.of('Parent'), PDFDict);\n // }\n\n DA(): PDFString | PDFHexString | undefined {\n const da = this.dict.lookup(PDFName.of('DA'));\n if (da instanceof PDFString || da instanceof PDFHexString) return da;\n return undefined;\n }\n\n setKids(kids: PDFObject[]) {\n this.dict.set(PDFName.of('Kids'), this.dict.context.obj(kids));\n }\n\n getParent(): PDFAcroField | undefined {\n // const parent = this.Parent();\n // if (!parent) return undefined;\n // return new PDFAcroField(parent);\n\n const parentRef = this.dict.get(PDFName.of('Parent'));\n if (parentRef instanceof PDFRef) {\n const parent = this.dict.lookup(PDFName.of('Parent'), PDFDict);\n return new PDFAcroField(parent, parentRef);\n }\n\n return undefined;\n }\n\n setParent(parent: PDFRef | undefined) {\n if (!parent) this.dict.delete(PDFName.of('Parent'));\n else this.dict.set(PDFName.of('Parent'), parent);\n }\n\n getFullyQualifiedName(): string | undefined {\n const parent = this.getParent();\n if (!parent) return this.getPartialName();\n return `${parent.getFullyQualifiedName()}.${this.getPartialName()}`;\n }\n\n getPartialName(): string | undefined {\n return this.T()?.decodeText();\n }\n\n setPartialName(partialName: string | undefined) {\n if (!partialName) this.dict.delete(PDFName.of('T'));\n else this.dict.set(PDFName.of('T'), PDFHexString.fromText(partialName));\n }\n\n setDefaultAppearance(appearance: string) {\n this.dict.set(PDFName.of('DA'), PDFString.of(appearance));\n }\n\n getDefaultAppearance(): string | undefined {\n const DA = this.DA();\n\n if (DA instanceof PDFHexString) {\n return DA.decodeText();\n }\n\n return DA?.asString();\n }\n\n setFontSize(fontSize: number) {\n const name = this.getFullyQualifiedName() ?? '';\n\n const da = this.getDefaultAppearance();\n if (!da) throw new MissingDAEntryError(name);\n\n const daMatch = findLastMatch(da, tfRegex);\n if (!daMatch.match) throw new MissingTfOperatorError(name);\n\n const daStart = da.slice(0, daMatch.pos - daMatch.match[0].length);\n const daEnd = daMatch.pos <= da.length ? da.slice(daMatch.pos) : '';\n const fontName = daMatch.match[1];\n const modifiedDa = `${daStart} /${fontName} ${fontSize} Tf ${daEnd}`;\n\n this.setDefaultAppearance(modifiedDa);\n }\n\n getFlags(): number {\n return this.Ff()?.asNumber() ?? 0;\n }\n\n setFlags(flags: number) {\n this.dict.set(PDFName.of('Ff'), PDFNumber.of(flags));\n }\n\n hasFlag(flag: number): boolean {\n const flags = this.getFlags();\n return (flags & flag) !== 0;\n }\n\n setFlag(flag: number) {\n const flags = this.getFlags();\n this.setFlags(flags | flag);\n }\n\n clearFlag(flag: number) {\n const flags = this.getFlags();\n this.setFlags(flags & ~flag);\n }\n\n setFlagTo(flag: number, enable: boolean) {\n if (enable) this.setFlag(flag);\n else this.clearFlag(flag);\n }\n\n getInheritableAttribute(name: PDFName): PDFObject | undefined {\n let attribute: PDFObject | undefined;\n this.ascend((node) => {\n if (!attribute) attribute = node.dict.get(name);\n });\n return attribute;\n }\n\n ascend(visitor: (node: PDFAcroField) => any): void {\n visitor(this);\n const parent = this.getParent();\n if (parent) parent.ascend(visitor);\n }\n}\n\nexport default PDFAcroField;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\n\n// TODO: Also handle the `/S` and `/D` entries\nclass BorderStyle {\n readonly dict: PDFDict;\n\n static fromDict = (dict: PDFDict): BorderStyle => new BorderStyle(dict);\n\n protected constructor(dict: PDFDict) {\n this.dict = dict;\n }\n\n W(): PDFNumber | undefined {\n const W = this.dict.lookup(PDFName.of('W'));\n if (W instanceof PDFNumber) return W;\n return undefined;\n }\n\n getWidth(): number | undefined {\n return this.W()?.asNumber() ?? 1;\n }\n\n setWidth(width: number) {\n const W = this.dict.context.obj(width);\n this.dict.set(PDFName.of('W'), W);\n }\n}\n\nexport default BorderStyle;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFNumber from 'src/core/objects/PDFNumber';\n\nclass PDFAnnotation {\n readonly dict: PDFDict;\n\n static fromDict = (dict: PDFDict): PDFAnnotation => new PDFAnnotation(dict);\n\n protected constructor(dict: PDFDict) {\n this.dict = dict;\n }\n\n // This is technically required by the PDF spec\n Rect(): PDFArray | undefined {\n return this.dict.lookup(PDFName.of('Rect'), PDFArray);\n }\n\n AP(): PDFDict | undefined {\n return this.dict.lookupMaybe(PDFName.of('AP'), PDFDict);\n }\n\n F(): PDFNumber | undefined {\n const numberOrRef = this.dict.lookup(PDFName.of('F'));\n return this.dict.context.lookupMaybe(numberOrRef, PDFNumber);\n }\n\n getRectangle(): { x: number; y: number; width: number; height: number } {\n const Rect = this.Rect();\n return Rect?.asRectangle() ?? { x: 0, y: 0, width: 0, height: 0 };\n }\n\n setRectangle(rect: { x: number; y: number; width: number; height: number }) {\n const { x, y, width, height } = rect;\n const Rect = this.dict.context.obj([x, y, x + width, y + height]);\n this.dict.set(PDFName.of('Rect'), Rect);\n }\n\n getAppearanceState(): PDFName | undefined {\n const AS = this.dict.lookup(PDFName.of('AS'));\n if (AS instanceof PDFName) return AS;\n return undefined;\n }\n\n setAppearanceState(state: PDFName) {\n this.dict.set(PDFName.of('AS'), state);\n }\n\n setAppearances(appearances: PDFDict) {\n this.dict.set(PDFName.of('AP'), appearances);\n }\n\n ensureAP(): PDFDict {\n let AP = this.AP();\n if (!AP) {\n AP = this.dict.context.obj({});\n this.dict.set(PDFName.of('AP'), AP);\n }\n return AP;\n }\n\n getNormalAppearance(): PDFRef | PDFDict {\n const AP = this.ensureAP();\n const N = AP.get(PDFName.of('N'));\n if (N instanceof PDFRef || N instanceof PDFDict) return N;\n\n throw new Error(`Unexpected N type: ${N?.constructor.name}`);\n }\n\n /** @param appearance A PDFDict or PDFStream (direct or ref) */\n setNormalAppearance(appearance: PDFRef | PDFDict) {\n const AP = this.ensureAP();\n AP.set(PDFName.of('N'), appearance);\n }\n\n /** @param appearance A PDFDict or PDFStream (direct or ref) */\n setRolloverAppearance(appearance: PDFRef | PDFDict) {\n const AP = this.ensureAP();\n AP.set(PDFName.of('R'), appearance);\n }\n\n /** @param appearance A PDFDict or PDFStream (direct or ref) */\n setDownAppearance(appearance: PDFRef | PDFDict) {\n const AP = this.ensureAP();\n AP.set(PDFName.of('D'), appearance);\n }\n\n removeRolloverAppearance() {\n const AP = this.AP();\n AP?.delete(PDFName.of('R'));\n }\n\n removeDownAppearance() {\n const AP = this.AP();\n AP?.delete(PDFName.of('D'));\n }\n\n getAppearances():\n | {\n normal: PDFStream | PDFDict;\n rollover?: PDFStream | PDFDict;\n down?: PDFStream | PDFDict;\n }\n | undefined {\n const AP = this.AP();\n\n if (!AP) return undefined;\n\n const N = AP.lookup(PDFName.of('N'), PDFDict, PDFStream);\n const R = AP.lookupMaybe(PDFName.of('R'), PDFDict, PDFStream);\n const D = AP.lookupMaybe(PDFName.of('D'), PDFDict, PDFStream);\n\n return { normal: N, rollover: R, down: D };\n }\n\n getFlags(): number {\n return this.F()?.asNumber() ?? 0;\n }\n\n setFlags(flags: number) {\n this.dict.set(PDFName.of('F'), PDFNumber.of(flags));\n }\n\n hasFlag(flag: number): boolean {\n const flags = this.getFlags();\n return (flags & flag) !== 0;\n }\n\n setFlag(flag: number) {\n const flags = this.getFlags();\n this.setFlags(flags | flag);\n }\n\n clearFlag(flag: number) {\n const flags = this.getFlags();\n this.setFlags(flags & ~flag);\n }\n\n setFlagTo(flag: number, enable: boolean) {\n if (enable) this.setFlag(flag);\n else this.clearFlag(flag);\n }\n}\n\nexport default PDFAnnotation;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFString from 'src/core/objects/PDFString';\n\nclass AppearanceCharacteristics {\n readonly dict: PDFDict;\n\n static fromDict = (dict: PDFDict): AppearanceCharacteristics =>\n new AppearanceCharacteristics(dict);\n\n protected constructor(dict: PDFDict) {\n this.dict = dict;\n }\n\n R(): PDFNumber | undefined {\n const R = this.dict.lookup(PDFName.of('R'));\n if (R instanceof PDFNumber) return R;\n return undefined;\n }\n\n BC(): PDFArray | undefined {\n const BC = this.dict.lookup(PDFName.of('BC'));\n if (BC instanceof PDFArray) return BC;\n return undefined;\n }\n\n BG(): PDFArray | undefined {\n const BG = this.dict.lookup(PDFName.of('BG'));\n if (BG instanceof PDFArray) return BG;\n return undefined;\n }\n\n CA(): PDFHexString | PDFString | undefined {\n const CA = this.dict.lookup(PDFName.of('CA'));\n if (CA instanceof PDFHexString || CA instanceof PDFString) return CA;\n return undefined;\n }\n\n RC(): PDFHexString | PDFString | undefined {\n const RC = this.dict.lookup(PDFName.of('RC'));\n if (RC instanceof PDFHexString || RC instanceof PDFString) return RC;\n return undefined;\n }\n\n AC(): PDFHexString | PDFString | undefined {\n const AC = this.dict.lookup(PDFName.of('AC'));\n if (AC instanceof PDFHexString || AC instanceof PDFString) return AC;\n return undefined;\n }\n\n getRotation(): number | undefined {\n return this.R()?.asNumber();\n }\n\n getBorderColor(): number[] | undefined {\n const BC = this.BC();\n\n if (!BC) return undefined;\n\n const components: number[] = [];\n for (let idx = 0, len = BC?.size(); idx < len; idx++) {\n const component = BC.get(idx);\n if (component instanceof PDFNumber) components.push(component.asNumber());\n }\n\n return components;\n }\n\n getBackgroundColor(): number[] | undefined {\n const BG = this.BG();\n\n if (!BG) return undefined;\n\n const components: number[] = [];\n for (let idx = 0, len = BG?.size(); idx < len; idx++) {\n const component = BG.get(idx);\n if (component instanceof PDFNumber) components.push(component.asNumber());\n }\n\n return components;\n }\n\n getCaptions(): { normal?: string; rollover?: string; down?: string } {\n const CA = this.CA();\n const RC = this.RC();\n const AC = this.AC();\n\n return {\n normal: CA?.decodeText(),\n rollover: RC?.decodeText(),\n down: AC?.decodeText(),\n };\n }\n\n setRotation(rotation: number) {\n const R = this.dict.context.obj(rotation);\n this.dict.set(PDFName.of('R'), R);\n }\n\n setBorderColor(color: number[]) {\n const BC = this.dict.context.obj(color);\n this.dict.set(PDFName.of('BC'), BC);\n }\n\n setBackgroundColor(color: number[]) {\n const BG = this.dict.context.obj(color);\n this.dict.set(PDFName.of('BG'), BG);\n }\n\n setCaptions(captions: { normal: string; rollover?: string; down?: string }) {\n const CA = PDFHexString.fromText(captions.normal);\n this.dict.set(PDFName.of('CA'), CA);\n\n if (captions.rollover) {\n const RC = PDFHexString.fromText(captions.rollover);\n this.dict.set(PDFName.of('RC'), RC);\n } else {\n this.dict.delete(PDFName.of('RC'));\n }\n\n if (captions.down) {\n const AC = PDFHexString.fromText(captions.down);\n this.dict.set(PDFName.of('AC'), AC);\n } else {\n this.dict.delete(PDFName.of('AC'));\n }\n }\n}\n\nexport default AppearanceCharacteristics;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFContext from 'src/core/PDFContext';\nimport BorderStyle from 'src/core/annotation/BorderStyle';\nimport PDFAnnotation from 'src/core/annotation/PDFAnnotation';\nimport AppearanceCharacteristics from 'src/core/annotation/AppearanceCharacteristics';\n\nclass PDFWidgetAnnotation extends PDFAnnotation {\n static fromDict = (dict: PDFDict): PDFWidgetAnnotation =>\n new PDFWidgetAnnotation(dict);\n\n static create = (context: PDFContext, parent: PDFRef) => {\n const dict = context.obj({\n Type: 'Annot',\n Subtype: 'Widget',\n Rect: [0, 0, 0, 0],\n Parent: parent,\n });\n return new PDFWidgetAnnotation(dict);\n };\n\n MK(): PDFDict | undefined {\n const MK = this.dict.lookup(PDFName.of('MK'));\n if (MK instanceof PDFDict) return MK;\n return undefined;\n }\n\n BS(): PDFDict | undefined {\n const BS = this.dict.lookup(PDFName.of('BS'));\n if (BS instanceof PDFDict) return BS;\n return undefined;\n }\n\n DA(): PDFString | PDFHexString | undefined {\n const da = this.dict.lookup(PDFName.of('DA'));\n if (da instanceof PDFString || da instanceof PDFHexString) return da;\n return undefined;\n }\n\n P(): PDFRef | undefined {\n const P = this.dict.get(PDFName.of('P'));\n if (P instanceof PDFRef) return P;\n return undefined;\n }\n\n setP(page: PDFRef) {\n this.dict.set(PDFName.of('P'), page);\n }\n\n setDefaultAppearance(appearance: string) {\n this.dict.set(PDFName.of('DA'), PDFString.of(appearance));\n }\n\n getDefaultAppearance(): string | undefined {\n const DA = this.DA();\n\n if (DA instanceof PDFHexString) {\n return DA.decodeText();\n }\n\n return DA?.asString();\n }\n\n getAppearanceCharacteristics(): AppearanceCharacteristics | undefined {\n const MK = this.MK();\n if (MK) return AppearanceCharacteristics.fromDict(MK);\n return undefined;\n }\n\n getOrCreateAppearanceCharacteristics(): AppearanceCharacteristics {\n const MK = this.MK();\n if (MK) return AppearanceCharacteristics.fromDict(MK);\n\n const ac = AppearanceCharacteristics.fromDict(this.dict.context.obj({}));\n this.dict.set(PDFName.of('MK'), ac.dict);\n return ac;\n }\n\n getBorderStyle(): BorderStyle | undefined {\n const BS = this.BS();\n if (BS) return BorderStyle.fromDict(BS);\n return undefined;\n }\n\n getOrCreateBorderStyle(): BorderStyle {\n const BS = this.BS();\n if (BS) return BorderStyle.fromDict(BS);\n\n const bs = BorderStyle.fromDict(this.dict.context.obj({}));\n this.dict.set(PDFName.of('BS'), bs.dict);\n return bs;\n }\n\n getOnValue(): PDFName | undefined {\n const normal = this.getAppearances()?.normal;\n\n if (normal instanceof PDFDict) {\n const keys = normal.keys();\n for (let idx = 0, len = keys.length; idx < len; idx++) {\n const key = keys[idx];\n if (key !== PDFName.of('Off')) return key;\n }\n }\n\n return undefined;\n }\n}\n\nexport default PDFWidgetAnnotation;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFAcroField from 'src/core/acroform/PDFAcroField';\nimport PDFWidgetAnnotation from 'src/core/annotation/PDFWidgetAnnotation';\nimport { IndexOutOfBoundsError } from 'src/core/errors';\n\nclass PDFAcroTerminal extends PDFAcroField {\n static fromDict = (dict: PDFDict, ref: PDFRef) =>\n new PDFAcroTerminal(dict, ref);\n\n FT(): PDFName {\n const nameOrRef = this.getInheritableAttribute(PDFName.of('FT'));\n return this.dict.context.lookup(nameOrRef, PDFName);\n }\n\n getWidgets(): PDFWidgetAnnotation[] {\n const kidDicts = this.Kids();\n\n // This field is itself a widget\n if (!kidDicts) return [PDFWidgetAnnotation.fromDict(this.dict)];\n\n // This field's kids are its widgets\n const widgets = new Array(kidDicts.size());\n for (let idx = 0, len = kidDicts.size(); idx < len; idx++) {\n const dict = kidDicts.lookup(idx, PDFDict);\n widgets[idx] = PDFWidgetAnnotation.fromDict(dict);\n }\n\n return widgets;\n }\n\n addWidget(ref: PDFRef) {\n const { Kids } = this.normalizedEntries();\n Kids.push(ref);\n }\n\n removeWidget(idx: number) {\n const kidDicts = this.Kids();\n\n if (!kidDicts) {\n // This field is itself a widget\n if (idx !== 0) throw new IndexOutOfBoundsError(idx, 0, 0);\n this.setKids([]);\n } else {\n // This field's kids are its widgets\n if (idx < 0 || idx > kidDicts.size()) {\n throw new IndexOutOfBoundsError(idx, 0, kidDicts.size());\n }\n kidDicts.remove(idx);\n }\n }\n\n normalizedEntries() {\n let Kids = this.Kids();\n\n // If this field is itself a widget (because it was only rendered once in\n // the document, so the field and widget properties were merged) then we\n // add itself to the `Kids` array. The alternative would be to try\n // splitting apart the widget properties and creating a separate object\n // for them.\n if (!Kids) {\n Kids = this.dict.context.obj([this.ref]);\n this.dict.set(PDFName.of('Kids'), Kids);\n }\n\n return { Kids };\n }\n}\n\nexport default PDFAcroTerminal;\n","import PDFObject from 'src/core/objects/PDFObject';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFAcroTerminal from 'src/core/acroform/PDFAcroTerminal';\nimport { IndexOutOfBoundsError } from 'src/core/errors';\n\nclass PDFAcroButton extends PDFAcroTerminal {\n Opt(): PDFString | PDFHexString | PDFArray | undefined {\n return this.dict.lookupMaybe(\n PDFName.of('Opt'),\n PDFString,\n PDFHexString,\n PDFArray,\n );\n }\n\n setOpt(opt: PDFObject[]) {\n this.dict.set(PDFName.of('Opt'), this.dict.context.obj(opt));\n }\n\n getExportValues(): (PDFString | PDFHexString)[] | undefined {\n const opt = this.Opt();\n\n if (!opt) return undefined;\n\n if (opt instanceof PDFString || opt instanceof PDFHexString) {\n return [opt];\n }\n\n const values: (PDFString | PDFHexString)[] = [];\n for (let idx = 0, len = opt.size(); idx < len; idx++) {\n const value = opt.lookup(idx);\n if (value instanceof PDFString || value instanceof PDFHexString) {\n values.push(value);\n }\n }\n\n return values;\n }\n\n removeExportValue(idx: number) {\n const opt = this.Opt();\n\n if (!opt) return;\n\n if (opt instanceof PDFString || opt instanceof PDFHexString) {\n if (idx !== 0) throw new IndexOutOfBoundsError(idx, 0, 0);\n this.setOpt([]);\n } else {\n if (idx < 0 || idx > opt.size()) {\n throw new IndexOutOfBoundsError(idx, 0, opt.size());\n }\n opt.remove(idx);\n }\n }\n\n // Enforce use use of /Opt even if it isn't strictly necessary\n normalizeExportValues() {\n const exportValues = this.getExportValues() ?? [];\n\n const Opt: (PDFString | PDFHexString)[] = [];\n\n const widgets = this.getWidgets();\n for (let idx = 0, len = widgets.length; idx < len; idx++) {\n const widget = widgets[idx];\n const exportVal =\n exportValues[idx] ??\n PDFHexString.fromText(widget.getOnValue()?.decodeText() ?? '');\n Opt.push(exportVal);\n }\n\n this.setOpt(Opt);\n }\n\n /**\n * Reuses existing opt if one exists with the same value (assuming\n * `useExistingIdx` is `true`). Returns index of existing (or new) opt.\n */\n addOpt(opt: PDFHexString | PDFString, useExistingOptIdx: boolean): number {\n this.normalizeExportValues();\n\n const optText = opt.decodeText();\n\n let existingIdx: number | undefined;\n if (useExistingOptIdx) {\n const exportValues = this.getExportValues() ?? [];\n for (let idx = 0, len = exportValues.length; idx < len; idx++) {\n const exportVal = exportValues[idx];\n if (exportVal.decodeText() === optText) existingIdx = idx;\n }\n }\n\n const Opt = this.Opt() as PDFArray;\n Opt.push(opt);\n\n return existingIdx ?? Opt.size() - 1;\n }\n\n addWidgetWithOpt(\n widget: PDFRef,\n opt: PDFHexString | PDFString,\n useExistingOptIdx: boolean,\n ) {\n const optIdx = this.addOpt(opt, useExistingOptIdx);\n const apStateValue = PDFName.of(String(optIdx));\n this.addWidget(widget);\n return apStateValue;\n }\n}\n\nexport default PDFAcroButton;\n","import PDFContext from 'src/core/PDFContext';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFAcroButton from 'src/core/acroform/PDFAcroButton';\nimport { InvalidAcroFieldValueError } from 'src/core/errors';\n\nclass PDFAcroCheckBox extends PDFAcroButton {\n static fromDict = (dict: PDFDict, ref: PDFRef) =>\n new PDFAcroCheckBox(dict, ref);\n\n static create = (context: PDFContext) => {\n const dict = context.obj({\n FT: 'Btn',\n Kids: [],\n });\n const ref = context.register(dict);\n return new PDFAcroCheckBox(dict, ref);\n };\n\n setValue(value: PDFName) {\n const onValue = this.getOnValue() ?? PDFName.of('Yes');\n if (value !== onValue && value !== PDFName.of('Off')) {\n throw new InvalidAcroFieldValueError();\n }\n\n this.dict.set(PDFName.of('V'), value);\n\n const widgets = this.getWidgets();\n for (let idx = 0, len = widgets.length; idx < len; idx++) {\n const widget = widgets[idx];\n const state = widget.getOnValue() === value ? value : PDFName.of('Off');\n widget.setAppearanceState(state);\n }\n }\n\n getValue(): PDFName {\n const v = this.V();\n if (v instanceof PDFName) return v;\n return PDFName.of('Off');\n }\n\n getOnValue(): PDFName | undefined {\n const [widget] = this.getWidgets();\n return widget?.getOnValue();\n }\n}\n\nexport default PDFAcroCheckBox;\n","const flag = (bitIndex: number) => 1 << bitIndex;\n\n/** From PDF spec table 221 */\nexport enum AcroFieldFlags {\n /**\n * If set, the user may not change the value of the field. Any associated\n * widget annotations will not interact with the user; that is, they will not\n * respond to mouse clicks or change their appearance in response to mouse\n * motions. This flag is useful for fields whose values are computed or\n * imported from a database.\n */\n ReadOnly = flag(1 - 1),\n\n /**\n * If set, the field shall have a value at the time it is exported by a\n * submit-form action (see 12.7.5.2, \"Submit-Form Action\").\n */\n Required = flag(2 - 1),\n\n /**\n * If set, the field shall not be exported by a submit-form action\n * (see 12.7.5.2, \"Submit-Form Action\").\n */\n NoExport = flag(3 - 1),\n}\n\n/** From PDF spec table 226 */\nexport enum AcroButtonFlags {\n /**\n * (Radio buttons only) If set, exactly one radio button shall be selected at\n * all times; selecting the currently selected button has no effect. If clear,\n * clicking the selected button deselects it, leaving no button selected.\n */\n NoToggleToOff = flag(15 - 1),\n\n /**\n * If set, the field is a set of radio buttons; if clear, the field is a check\n * box. This flag may be set only if the Pushbutton flag is clear.\n */\n Radio = flag(16 - 1),\n\n /**\n * If set, the field is a pushbutton that does not retain a permanent value.\n */\n PushButton = flag(17 - 1),\n\n /**\n * If set, a group of radio buttons within a radio button field that use the\n * same value for the on state will turn on and off in unison; that is if one\n * is checked, they are all checked. If clear, the buttons are mutually\n * exclusive (the same behavior as HTML radio buttons).\n */\n RadiosInUnison = flag(26 - 1),\n}\n\n/** From PDF spec table 228 */\nexport enum AcroTextFlags {\n /**\n * If set, the field may contain multiple lines of text; if clear, the field's\n * text shall be restricted to a single line.\n */\n Multiline = flag(13 - 1),\n\n /**\n * If set, the field is intended for entering a secure password that should\n * not be echoed visibly to the screen. Characters typed from the keyboard\n * shall instead be echoed in some unreadable form, such as asterisks or\n * bullet characters.\n * > NOTE To protect password confidentiality, readers should never store\n * > the value of the text field in the PDF file if this flag is set.\n */\n Password = flag(14 - 1),\n\n /**\n * If set, the text entered in the field represents the pathname of a file\n * whose contents shall be submitted as the value of the field.\n */\n FileSelect = flag(21 - 1),\n\n /**\n * If set, text entered in the field shall not be spell-checked.\n */\n DoNotSpellCheck = flag(23 - 1),\n\n /**\n * If set, the field shall not scroll (horizontally for single-line fields,\n * vertically for multiple-line fields) to accommodate more text than fits\n * within its annotation rectangle. Once the field is full, no further text\n * shall be accepted for interactive form filling; for non-interactive form\n * filling, the filler should take care not to add more character than will\n * visibly fit in the defined area.\n */\n DoNotScroll = flag(24 - 1),\n\n /**\n * May be set only if the MaxLen entry is present in the text field dictionary\n * (see Table 229) and if the Multiline, Password, and FileSelect flags are\n * clear. If set, the field shall be automatically divided into as many\n * equally spaced positions, or combs, as the value of MaxLen, and the text\n * is laid out into those combs.\n */\n Comb = flag(25 - 1),\n\n /**\n * If set, the value of this field shall be a rich text string\n * (see 12.7.3.4, \"Rich Text Strings\"). If the field has a value, the RV\n * entry of the field dictionary (Table 222) shall specify the rich text\n * string.\n */\n RichText = flag(26 - 1),\n}\n\n/** From PDF spec table 230 */\nexport enum AcroChoiceFlags {\n /**\n * If set, the field is a combo box; if clear, the field is a list box.\n */\n Combo = flag(18 - 1),\n\n /**\n * If set, the combo box shall include an editable text box as well as a\n * drop-down list; if clear, it shall include only a drop-down list. This\n * flag shall be used only if the Combo flag is set.\n */\n Edit = flag(19 - 1),\n\n /**\n * If set, the field's option items shall be sorted alphabetically. This flag\n * is intended for use by writers, not by readers. Conforming readers shall\n * display the options in the order in which they occur in the Opt array\n * (see Table 231).\n */\n Sort = flag(20 - 1),\n\n /**\n * If set, more than one of the field's option items may be selected\n * simultaneously; if clear, at most one item shall be selected.\n */\n MultiSelect = flag(22 - 1),\n\n /**\n * If set, text entered in the field shall not be spell-checked. This flag\n * shall not be used unless the Combo and Edit flags are both set.\n */\n DoNotSpellCheck = flag(23 - 1),\n\n /**\n * If set, the new value shall be committed as soon as a selection is made\n * (commonly with the pointing device). In this case, supplying a value for\n * a field involves three actions: selecting the field for fill-in,\n * selecting a choice for the fill-in value, and leaving that field, which\n * finalizes or \"commits\" the data choice and triggers any actions associated\n * with the entry or changing of this data. If this flag is on, then\n * processing does not wait for leaving the field action to occur, but\n * immediately proceeds to the third step.\n *\n * This option enables applications to perform an action once a selection is\n * made, without requiring the user to exit the field. If clear, the new\n * value is not committed until the user exits the field.\n */\n CommitOnSelChange = flag(27 - 1),\n}\n","import PDFAcroTerminal from 'src/core/acroform/PDFAcroTerminal';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFName from 'src/core/objects/PDFName';\nimport { AcroChoiceFlags } from 'src/core/acroform/flags';\nimport {\n InvalidAcroFieldValueError,\n MultiSelectValueError,\n} from 'src/core/errors';\n\nclass PDFAcroChoice extends PDFAcroTerminal {\n setValues(values: (PDFString | PDFHexString)[]) {\n if (\n this.hasFlag(AcroChoiceFlags.Combo) &&\n !this.hasFlag(AcroChoiceFlags.Edit) &&\n !this.valuesAreValid(values)\n ) {\n throw new InvalidAcroFieldValueError();\n }\n\n if (values.length === 0) {\n this.dict.delete(PDFName.of('V'));\n }\n if (values.length === 1) {\n this.dict.set(PDFName.of('V'), values[0]);\n }\n if (values.length > 1) {\n if (!this.hasFlag(AcroChoiceFlags.MultiSelect)) {\n throw new MultiSelectValueError();\n }\n this.dict.set(PDFName.of('V'), this.dict.context.obj(values));\n }\n\n this.updateSelectedIndices(values);\n }\n\n valuesAreValid(values: (PDFString | PDFHexString)[]): boolean {\n const options = this.getOptions();\n for (let idx = 0, len = values.length; idx < len; idx++) {\n const val = values[idx].decodeText();\n if (!options.find((o) => val === (o.display || o.value).decodeText())) {\n return false;\n }\n }\n return true;\n }\n\n updateSelectedIndices(values: (PDFString | PDFHexString)[]) {\n if (values.length > 1) {\n const indices = new Array(values.length);\n const options = this.getOptions();\n for (let idx = 0, len = values.length; idx < len; idx++) {\n const val = values[idx].decodeText();\n indices[idx] = options.findIndex(\n (o) => val === (o.display || o.value).decodeText(),\n );\n }\n this.dict.set(PDFName.of('I'), this.dict.context.obj(indices.sort()));\n } else {\n this.dict.delete(PDFName.of('I'));\n }\n }\n\n getValues(): (PDFString | PDFHexString)[] {\n const v = this.V();\n\n if (v instanceof PDFString || v instanceof PDFHexString) return [v];\n\n if (v instanceof PDFArray) {\n const values: (PDFString | PDFHexString)[] = [];\n\n for (let idx = 0, len = v.size(); idx < len; idx++) {\n const value = v.lookup(idx);\n if (value instanceof PDFString || value instanceof PDFHexString) {\n values.push(value);\n }\n }\n\n return values;\n }\n\n return [];\n }\n\n Opt(): PDFArray | PDFString | PDFHexString | undefined {\n return this.dict.lookupMaybe(\n PDFName.of('Opt'),\n PDFString,\n PDFHexString,\n PDFArray,\n );\n }\n\n setOptions(\n options: {\n value: PDFString | PDFHexString;\n display?: PDFString | PDFHexString;\n }[],\n ) {\n const newOpt = new Array(options.length);\n for (let idx = 0, len = options.length; idx < len; idx++) {\n const { value, display } = options[idx];\n newOpt[idx] = this.dict.context.obj([value, display || value]);\n }\n this.dict.set(PDFName.of('Opt'), this.dict.context.obj(newOpt));\n }\n\n getOptions(): {\n value: PDFString | PDFHexString;\n display: PDFString | PDFHexString;\n }[] {\n const Opt = this.Opt();\n\n // Not supposed to happen - Opt _should_ always be `PDFArray | undefined`\n if (Opt instanceof PDFString || Opt instanceof PDFHexString) {\n return [{ value: Opt, display: Opt }];\n }\n\n if (Opt instanceof PDFArray) {\n const res: {\n value: PDFString | PDFHexString;\n display: PDFString | PDFHexString;\n }[] = [];\n\n for (let idx = 0, len = Opt.size(); idx < len; idx++) {\n const item = Opt.lookup(idx);\n\n // If `item` is a string, use that as both the export and text value\n if (item instanceof PDFString || item instanceof PDFHexString) {\n res.push({ value: item, display: item });\n }\n\n // If `item` is an array of one, treat it the same as just a string,\n // if it's an array of two then `item[0]` is the export value and\n // `item[1]` is the text value\n if (item instanceof PDFArray) {\n if (item.size() > 0) {\n const first = item.lookup(0, PDFString, PDFHexString);\n const second = item.lookupMaybe(1, PDFString, PDFHexString);\n res.push({ value: first, display: second || first });\n }\n }\n }\n\n return res;\n }\n\n return [];\n }\n}\n\nexport default PDFAcroChoice;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFAcroChoice from 'src/core/acroform/PDFAcroChoice';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport { AcroChoiceFlags } from 'src/core/acroform/flags';\n\nclass PDFAcroComboBox extends PDFAcroChoice {\n static fromDict = (dict: PDFDict, ref: PDFRef) =>\n new PDFAcroComboBox(dict, ref);\n\n static create = (context: PDFContext) => {\n const dict = context.obj({\n FT: 'Ch',\n Ff: AcroChoiceFlags.Combo,\n Kids: [],\n });\n const ref = context.register(dict);\n return new PDFAcroComboBox(dict, ref);\n };\n}\n\nexport default PDFAcroComboBox;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFAcroField from 'src/core/acroform/PDFAcroField';\n\nclass PDFAcroNonTerminal extends PDFAcroField {\n static fromDict = (dict: PDFDict, ref: PDFRef) =>\n new PDFAcroNonTerminal(dict, ref);\n\n static create = (context: PDFContext) => {\n const dict = context.obj({});\n const ref = context.register(dict);\n return new PDFAcroNonTerminal(dict, ref);\n };\n\n addField(field: PDFRef) {\n const { Kids } = this.normalizedEntries();\n Kids?.push(field);\n }\n\n normalizedEntries() {\n let Kids = this.Kids();\n\n if (!Kids) {\n Kids = this.dict.context.obj([]);\n this.dict.set(PDFName.of('Kids'), Kids);\n }\n\n return { Kids };\n }\n}\n\nexport default PDFAcroNonTerminal;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFAcroTerminal from 'src/core/acroform/PDFAcroTerminal';\n\nclass PDFAcroSignature extends PDFAcroTerminal {\n static fromDict = (dict: PDFDict, ref: PDFRef) =>\n new PDFAcroSignature(dict, ref);\n}\n\nexport default PDFAcroSignature;\n","import PDFContext from 'src/core/PDFContext';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFAcroTerminal from 'src/core/acroform/PDFAcroTerminal';\n\nclass PDFAcroText extends PDFAcroTerminal {\n static fromDict = (dict: PDFDict, ref: PDFRef) => new PDFAcroText(dict, ref);\n\n static create = (context: PDFContext) => {\n const dict = context.obj({\n FT: 'Tx',\n Kids: [],\n });\n const ref = context.register(dict);\n return new PDFAcroText(dict, ref);\n };\n\n MaxLen(): PDFNumber | undefined {\n const maxLen = this.dict.lookup(PDFName.of('MaxLen'));\n if (maxLen instanceof PDFNumber) return maxLen;\n return undefined;\n }\n\n Q(): PDFNumber | undefined {\n const q = this.dict.lookup(PDFName.of('Q'));\n if (q instanceof PDFNumber) return q;\n return undefined;\n }\n\n setMaxLength(maxLength: number) {\n this.dict.set(PDFName.of('MaxLen'), PDFNumber.of(maxLength));\n }\n\n removeMaxLength() {\n this.dict.delete(PDFName.of('MaxLen'));\n }\n\n getMaxLength(): number | undefined {\n return this.MaxLen()?.asNumber();\n }\n\n setQuadding(quadding: 0 | 1 | 2) {\n this.dict.set(PDFName.of('Q'), PDFNumber.of(quadding));\n }\n\n getQuadding(): number | undefined {\n return this.Q()?.asNumber();\n }\n\n setValue(value: PDFHexString | PDFString) {\n this.dict.set(PDFName.of('V'), value);\n\n // const widgets = this.getWidgets();\n // for (let idx = 0, len = widgets.length; idx < len; idx++) {\n // const widget = widgets[idx];\n // const state = widget.getOnValue() === value ? value : PDFName.of('Off');\n // widget.setAppearanceState(state);\n // }\n }\n\n removeValue() {\n this.dict.delete(PDFName.of('V'));\n }\n\n getValue(): PDFString | PDFHexString | undefined {\n const v = this.V();\n if (v instanceof PDFString || v instanceof PDFHexString) return v;\n return undefined;\n }\n}\n\nexport default PDFAcroText;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFAcroButton from 'src/core/acroform/PDFAcroButton';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport { AcroButtonFlags } from 'src/core/acroform/flags';\n\nclass PDFAcroPushButton extends PDFAcroButton {\n static fromDict = (dict: PDFDict, ref: PDFRef) =>\n new PDFAcroPushButton(dict, ref);\n\n static create = (context: PDFContext) => {\n const dict = context.obj({\n FT: 'Btn',\n Ff: AcroButtonFlags.PushButton,\n Kids: [],\n });\n const ref = context.register(dict);\n return new PDFAcroPushButton(dict, ref);\n };\n}\n\nexport default PDFAcroPushButton;\n","import PDFRef from 'src/core/objects/PDFRef';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFAcroButton from 'src/core/acroform/PDFAcroButton';\nimport PDFContext from 'src/core/PDFContext';\nimport { AcroButtonFlags } from 'src/core/acroform/flags';\nimport { InvalidAcroFieldValueError } from 'src/core/errors';\n\nclass PDFAcroRadioButton extends PDFAcroButton {\n static fromDict = (dict: PDFDict, ref: PDFRef) =>\n new PDFAcroRadioButton(dict, ref);\n\n static create = (context: PDFContext) => {\n const dict = context.obj({\n FT: 'Btn',\n Ff: AcroButtonFlags.Radio,\n Kids: [],\n });\n const ref = context.register(dict);\n return new PDFAcroRadioButton(dict, ref);\n };\n\n setValue(value: PDFName) {\n const onValues = this.getOnValues();\n if (!onValues.includes(value) && value !== PDFName.of('Off')) {\n throw new InvalidAcroFieldValueError();\n }\n\n this.dict.set(PDFName.of('V'), value);\n\n const widgets = this.getWidgets();\n for (let idx = 0, len = widgets.length; idx < len; idx++) {\n const widget = widgets[idx];\n const state = widget.getOnValue() === value ? value : PDFName.of('Off');\n widget.setAppearanceState(state);\n }\n }\n\n getValue(): PDFName {\n const v = this.V();\n if (v instanceof PDFName) return v;\n return PDFName.of('Off');\n }\n\n getOnValues(): PDFName[] {\n const widgets = this.getWidgets();\n\n const onValues: PDFName[] = [];\n for (let idx = 0, len = widgets.length; idx < len; idx++) {\n const onValue = widgets[idx].getOnValue();\n if (onValue) onValues.push(onValue);\n }\n\n return onValues;\n }\n}\n\nexport default PDFAcroRadioButton;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFAcroChoice from 'src/core/acroform/PDFAcroChoice';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFRef from 'src/core/objects/PDFRef';\n\nclass PDFAcroListBox extends PDFAcroChoice {\n static fromDict = (dict: PDFDict, ref: PDFRef) =>\n new PDFAcroListBox(dict, ref);\n\n static create = (context: PDFContext) => {\n const dict = context.obj({\n FT: 'Ch',\n Kids: [],\n });\n const ref = context.register(dict);\n return new PDFAcroListBox(dict, ref);\n };\n}\n\nexport default PDFAcroListBox;\n","import PDFObject from 'src/core/objects/PDFObject';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFRef from 'src/core/objects/PDFRef';\n\nimport PDFAcroField from 'src/core/acroform/PDFAcroField';\nimport PDFAcroTerminal from 'src/core/acroform/PDFAcroTerminal';\nimport PDFAcroNonTerminal from 'src/core/acroform/PDFAcroNonTerminal';\nimport PDFAcroButton from 'src/core/acroform/PDFAcroButton';\nimport PDFAcroSignature from 'src/core/acroform/PDFAcroSignature';\nimport PDFAcroChoice from 'src/core/acroform/PDFAcroChoice';\nimport PDFAcroText from 'src/core/acroform/PDFAcroText';\nimport PDFAcroPushButton from 'src/core/acroform/PDFAcroPushButton';\nimport PDFAcroRadioButton from 'src/core/acroform/PDFAcroRadioButton';\nimport PDFAcroCheckBox from 'src/core/acroform/PDFAcroCheckBox';\nimport PDFAcroComboBox from 'src/core/acroform/PDFAcroComboBox';\nimport PDFAcroListBox from 'src/core/acroform/PDFAcroListBox';\nimport { AcroButtonFlags, AcroChoiceFlags } from 'src/core/acroform/flags';\n\nexport const createPDFAcroFields = (\n kidDicts?: PDFArray,\n): [PDFAcroField, PDFRef][] => {\n if (!kidDicts) return [];\n\n const kids: [PDFAcroField, PDFRef][] = [];\n for (let idx = 0, len = kidDicts.size(); idx < len; idx++) {\n const ref = kidDicts.get(idx);\n const dict = kidDicts.lookup(idx);\n // if (dict instanceof PDFDict) kids.push(PDFAcroField.fromDict(dict));\n if (ref instanceof PDFRef && dict instanceof PDFDict) {\n kids.push([createPDFAcroField(dict, ref), ref]);\n }\n }\n\n return kids;\n};\n\nexport const createPDFAcroField = (\n dict: PDFDict,\n ref: PDFRef,\n): PDFAcroField => {\n const isNonTerminal = isNonTerminalAcroField(dict);\n if (isNonTerminal) return PDFAcroNonTerminal.fromDict(dict, ref);\n return createPDFAcroTerminal(dict, ref);\n};\n\n// TODO: Maybe just check if the dict is *not* a widget? That might be better.\n\n// According to the PDF spec:\n//\n// > A field's children in the hierarchy may also include widget annotations\n// > that define its appearance on the page. A field that has children that\n// > are fields is called a non-terminal field. A field that does not have\n// > children that are fields is called a terminal field.\n//\n// The spec is not entirely clear about how to determine whether a given\n// dictionary represents an acrofield or a widget annotation. So we will assume\n// that a dictionary is an acrofield if it is a member of the `/Kids` array\n// and it contains a `/T` entry (widgets do not have `/T` entries). This isn't\n// a bullet proof solution, because the `/T` entry is technically defined as\n// optional for acrofields by the PDF spec. But in practice all acrofields seem\n// to have a `/T` entry defined.\nconst isNonTerminalAcroField = (dict: PDFDict): boolean => {\n const kids = dict.lookup(PDFName.of('Kids'));\n\n if (kids instanceof PDFArray) {\n for (let idx = 0, len = kids.size(); idx < len; idx++) {\n const kid = kids.lookup(idx);\n const kidIsField = kid instanceof PDFDict && kid.has(PDFName.of('T'));\n if (kidIsField) return true;\n }\n }\n\n return false;\n};\n\nconst createPDFAcroTerminal = (dict: PDFDict, ref: PDFRef): PDFAcroTerminal => {\n const ftNameOrRef = getInheritableAttribute(dict, PDFName.of('FT'));\n const type = dict.context.lookup(ftNameOrRef, PDFName);\n\n if (type === PDFName.of('Btn')) return createPDFAcroButton(dict, ref);\n if (type === PDFName.of('Ch')) return createPDFAcroChoice(dict, ref);\n if (type === PDFName.of('Tx')) return PDFAcroText.fromDict(dict, ref);\n if (type === PDFName.of('Sig')) return PDFAcroSignature.fromDict(dict, ref);\n\n // We should never reach this line. But there are a lot of weird PDFs out\n // there. So, just to be safe, we'll try to handle things gracefully instead\n // of throwing an error.\n return PDFAcroTerminal.fromDict(dict, ref);\n};\n\nconst createPDFAcroButton = (dict: PDFDict, ref: PDFRef): PDFAcroButton => {\n const ffNumberOrRef = getInheritableAttribute(dict, PDFName.of('Ff'));\n const ffNumber = dict.context.lookupMaybe(ffNumberOrRef, PDFNumber);\n const flags = ffNumber?.asNumber() ?? 0;\n\n if (flagIsSet(flags, AcroButtonFlags.PushButton)) {\n return PDFAcroPushButton.fromDict(dict, ref);\n } else if (flagIsSet(flags, AcroButtonFlags.Radio)) {\n return PDFAcroRadioButton.fromDict(dict, ref);\n } else {\n return PDFAcroCheckBox.fromDict(dict, ref);\n }\n};\n\nconst createPDFAcroChoice = (dict: PDFDict, ref: PDFRef): PDFAcroChoice => {\n const ffNumberOrRef = getInheritableAttribute(dict, PDFName.of('Ff'));\n const ffNumber = dict.context.lookupMaybe(ffNumberOrRef, PDFNumber);\n const flags = ffNumber?.asNumber() ?? 0;\n\n if (flagIsSet(flags, AcroChoiceFlags.Combo)) {\n return PDFAcroComboBox.fromDict(dict, ref);\n } else {\n return PDFAcroListBox.fromDict(dict, ref);\n }\n};\n\nconst flagIsSet = (flags: number, flag: number): boolean =>\n (flags & flag) !== 0;\n\nconst getInheritableAttribute = (startNode: PDFDict, name: PDFName) => {\n let attribute: PDFObject | undefined;\n ascend(startNode, (node) => {\n if (!attribute) attribute = node.get(name);\n });\n return attribute;\n};\n\nconst ascend = (startNode: PDFDict, visitor: (node: PDFDict) => any) => {\n visitor(startNode);\n const Parent = startNode.lookupMaybe(PDFName.of('Parent'), PDFDict);\n if (Parent) ascend(Parent, visitor);\n};\n","import PDFContext from 'src/core/PDFContext';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFAcroField from 'src/core/acroform/PDFAcroField';\nimport PDFAcroNonTerminal from 'src/core/acroform/PDFAcroNonTerminal';\nimport {\n createPDFAcroField,\n createPDFAcroFields,\n} from 'src/core/acroform/utils';\n\nclass PDFAcroForm {\n readonly dict: PDFDict;\n\n static fromDict = (dict: PDFDict) => new PDFAcroForm(dict);\n\n static create = (context: PDFContext) => {\n const dict = context.obj({ Fields: [] });\n return new PDFAcroForm(dict);\n };\n\n private constructor(dict: PDFDict) {\n this.dict = dict;\n }\n\n Fields(): PDFArray | undefined {\n const fields = this.dict.lookup(PDFName.of('Fields'));\n if (fields instanceof PDFArray) return fields;\n return undefined;\n }\n\n getFields(): [PDFAcroField, PDFRef][] {\n const { Fields } = this.normalizedEntries();\n\n const fields = new Array(Fields.size());\n for (let idx = 0, len = Fields.size(); idx < len; idx++) {\n const ref = Fields.get(idx) as PDFRef;\n const dict = Fields.lookup(idx, PDFDict);\n fields[idx] = [createPDFAcroField(dict, ref), ref];\n }\n\n return fields;\n }\n\n getAllFields(): [PDFAcroField, PDFRef][] {\n const allFields: [PDFAcroField, PDFRef][] = [];\n\n const pushFields = (fields?: [PDFAcroField, PDFRef][]) => {\n if (!fields) return;\n for (let idx = 0, len = fields.length; idx < len; idx++) {\n const field = fields[idx];\n allFields.push(field);\n const [fieldModel] = field;\n if (fieldModel instanceof PDFAcroNonTerminal) {\n pushFields(createPDFAcroFields(fieldModel.Kids()));\n }\n }\n };\n\n pushFields(this.getFields());\n\n return allFields;\n }\n\n addField(field: PDFRef) {\n const { Fields } = this.normalizedEntries();\n Fields?.push(field);\n }\n\n removeField(field: PDFAcroField): void {\n const parent = field.getParent();\n const fields =\n parent === undefined ? this.normalizedEntries().Fields : parent.Kids();\n\n const index = fields?.indexOf(field.ref);\n if (fields === undefined || index === undefined) {\n throw new Error(\n `Tried to remove inexistent field ${field.getFullyQualifiedName()}`,\n );\n }\n\n fields.remove(index);\n\n if (parent !== undefined && fields.size() === 0) {\n this.removeField(parent);\n }\n }\n\n normalizedEntries() {\n let Fields = this.Fields();\n\n if (!Fields) {\n Fields = this.dict.context.obj([]);\n this.dict.set(PDFName.of('Fields'), Fields);\n }\n\n return { Fields };\n }\n}\n\nexport default PDFAcroForm;\n","import PDFDict, { DictMap } from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFPageTree from 'src/core/structures/PDFPageTree';\nimport { PDFAcroForm } from 'src/core/acroform';\nimport ViewerPreferences from '../interactive/ViewerPreferences';\n\nclass PDFCatalog extends PDFDict {\n static withContextAndPages = (\n context: PDFContext,\n pages: PDFPageTree | PDFRef,\n ) => {\n const dict = new Map();\n dict.set(PDFName.of('Type'), PDFName.of('Catalog'));\n dict.set(PDFName.of('Pages'), pages);\n return new PDFCatalog(dict, context);\n };\n\n static fromMapWithContext = (map: DictMap, context: PDFContext) =>\n new PDFCatalog(map, context);\n\n Pages(): PDFPageTree {\n return this.lookup(PDFName.of('Pages'), PDFDict) as PDFPageTree;\n }\n\n AcroForm(): PDFDict | undefined {\n return this.lookupMaybe(PDFName.of('AcroForm'), PDFDict);\n }\n\n getAcroForm(): PDFAcroForm | undefined {\n const dict = this.AcroForm();\n if (!dict) return undefined;\n return PDFAcroForm.fromDict(dict);\n }\n\n getOrCreateAcroForm(): PDFAcroForm {\n let acroForm = this.getAcroForm();\n if (!acroForm) {\n acroForm = PDFAcroForm.create(this.context);\n const acroFormRef = this.context.register(acroForm.dict);\n this.set(PDFName.of('AcroForm'), acroFormRef);\n }\n return acroForm;\n }\n\n ViewerPreferences(): PDFDict | undefined {\n return this.lookupMaybe(PDFName.of('ViewerPreferences'), PDFDict);\n }\n\n getViewerPreferences(): ViewerPreferences | undefined {\n const dict = this.ViewerPreferences();\n if (!dict) return undefined;\n return ViewerPreferences.fromDict(dict);\n }\n\n getOrCreateViewerPreferences(): ViewerPreferences {\n let viewerPrefs = this.getViewerPreferences();\n if (!viewerPrefs) {\n viewerPrefs = ViewerPreferences.create(this.context);\n const viewerPrefsRef = this.context.register(viewerPrefs.dict);\n this.set(PDFName.of('ViewerPreferences'), viewerPrefsRef);\n }\n return viewerPrefs;\n }\n\n /**\n * Inserts the given ref as a leaf node of this catalog's page tree at the\n * specified index (zero-based). Also increments the `Count` of each node in\n * the page tree hierarchy to accomodate the new page.\n *\n * Returns the ref of the PDFPageTree node into which `leafRef` was inserted.\n */\n insertLeafNode(leafRef: PDFRef, index: number): PDFRef {\n const pagesRef = this.get(PDFName.of('Pages')) as PDFRef;\n const maybeParentRef = this.Pages().insertLeafNode(leafRef, index);\n return maybeParentRef || pagesRef;\n }\n\n removeLeafNode(index: number): void {\n this.Pages().removeLeafNode(index);\n }\n}\n\nexport default PDFCatalog;\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFDict, { DictMap } from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFPageLeaf from 'src/core/structures/PDFPageLeaf';\nimport { InvalidTargetIndexError, CorruptPageTreeError } from 'src/core/errors';\n\nexport type TreeNode = PDFPageTree | PDFPageLeaf;\n\nclass PDFPageTree extends PDFDict {\n static withContext = (context: PDFContext, parent?: PDFRef) => {\n const dict = new Map();\n dict.set(PDFName.of('Type'), PDFName.of('Pages'));\n dict.set(PDFName.of('Kids'), context.obj([]));\n dict.set(PDFName.of('Count'), context.obj(0));\n if (parent) dict.set(PDFName.of('Parent'), parent);\n return new PDFPageTree(dict, context);\n };\n\n static fromMapWithContext = (map: DictMap, context: PDFContext) =>\n new PDFPageTree(map, context);\n\n Parent(): PDFPageTree | undefined {\n return this.lookup(PDFName.of('Parent')) as PDFPageTree | undefined;\n }\n\n Kids(): PDFArray {\n return this.lookup(PDFName.of('Kids'), PDFArray);\n }\n\n Count(): PDFNumber {\n return this.lookup(PDFName.of('Count'), PDFNumber);\n }\n\n pushTreeNode(treeRef: PDFRef): void {\n const Kids = this.Kids();\n Kids.push(treeRef);\n }\n\n pushLeafNode(leafRef: PDFRef): void {\n const Kids = this.Kids();\n this.insertLeafKid(Kids.size(), leafRef);\n }\n\n /**\n * Inserts the given ref as a leaf node of this page tree at the specified\n * index (zero-based). Also increments the `Count` of each page tree in the\n * hierarchy to accomodate the new page.\n *\n * Returns the ref of the PDFPageTree node into which `leafRef` was inserted,\n * or `undefined` if it was inserted into the root node (the PDFPageTree upon\n * which the method was first called).\n */\n insertLeafNode(leafRef: PDFRef, targetIndex: number): PDFRef | undefined {\n const Kids = this.Kids();\n const Count = this.Count().asNumber();\n\n if (targetIndex > Count) {\n throw new InvalidTargetIndexError(targetIndex, Count);\n }\n\n let leafsRemainingUntilTarget = targetIndex;\n for (let idx = 0, len = Kids.size(); idx < len; idx++) {\n if (leafsRemainingUntilTarget === 0) {\n // Insert page and return\n this.insertLeafKid(idx, leafRef);\n return undefined;\n }\n\n const kidRef = Kids.get(idx) as PDFRef;\n const kid = this.context.lookup(kidRef);\n\n if (kid instanceof PDFPageTree) {\n if (kid.Count().asNumber() > leafsRemainingUntilTarget) {\n // Dig in\n return (\n kid.insertLeafNode(leafRef, leafsRemainingUntilTarget) || kidRef\n );\n } else {\n // Move on\n leafsRemainingUntilTarget -= kid.Count().asNumber();\n }\n }\n\n if (kid instanceof PDFPageLeaf) {\n // Move on\n leafsRemainingUntilTarget -= 1;\n }\n }\n\n if (leafsRemainingUntilTarget === 0) {\n // Insert page at the end and return\n this.insertLeafKid(Kids.size(), leafRef);\n return undefined;\n }\n\n // Should never get here if `targetIndex` is valid\n throw new CorruptPageTreeError(targetIndex, 'insertLeafNode');\n }\n\n /**\n * Removes the leaf node at the specified index (zero-based) from this page\n * tree. Also decrements the `Count` of each page tree in the hierarchy to\n * account for the removed page.\n *\n * If `prune` is true, then intermediate tree nodes will be removed from the\n * tree if they contain 0 children after the leaf node is removed.\n */\n removeLeafNode(targetIndex: number, prune = true): void {\n const Kids = this.Kids();\n const Count = this.Count().asNumber();\n\n if (targetIndex >= Count) {\n throw new InvalidTargetIndexError(targetIndex, Count);\n }\n\n let leafsRemainingUntilTarget = targetIndex;\n for (let idx = 0, len = Kids.size(); idx < len; idx++) {\n const kidRef = Kids.get(idx) as PDFRef;\n const kid = this.context.lookup(kidRef);\n\n if (kid instanceof PDFPageTree) {\n if (kid.Count().asNumber() > leafsRemainingUntilTarget) {\n // Dig in\n kid.removeLeafNode(leafsRemainingUntilTarget, prune);\n if (prune && kid.Kids().size() === 0) Kids.remove(idx);\n return;\n } else {\n // Move on\n leafsRemainingUntilTarget -= kid.Count().asNumber();\n }\n }\n\n if (kid instanceof PDFPageLeaf) {\n if (leafsRemainingUntilTarget === 0) {\n // Remove page and return\n this.removeKid(idx);\n return;\n } else {\n // Move on\n leafsRemainingUntilTarget -= 1;\n }\n }\n }\n\n // Should never get here if `targetIndex` is valid\n throw new CorruptPageTreeError(targetIndex, 'removeLeafNode');\n }\n\n ascend(visitor: (node: PDFPageTree) => any): void {\n visitor(this);\n const Parent = this.Parent();\n if (Parent) Parent.ascend(visitor);\n }\n\n /** Performs a Post-Order traversal of this page tree */\n traverse(visitor: (node: TreeNode, ref: PDFRef) => any): void {\n const Kids = this.Kids();\n for (let idx = 0, len = Kids.size(); idx < len; idx++) {\n const kidRef = Kids.get(idx) as PDFRef;\n const kid = this.context.lookup(kidRef) as TreeNode;\n if (kid instanceof PDFPageTree) kid.traverse(visitor);\n visitor(kid, kidRef);\n }\n }\n\n private insertLeafKid(kidIdx: number, leafRef: PDFRef): void {\n const Kids = this.Kids();\n\n this.ascend((node) => {\n const newCount = node.Count().asNumber() + 1;\n node.set(PDFName.of('Count'), PDFNumber.of(newCount));\n });\n\n Kids.insert(kidIdx, leafRef);\n }\n\n private removeKid(kidIdx: number): void {\n const Kids = this.Kids();\n\n const kid = Kids.lookup(kidIdx);\n if (kid instanceof PDFPageLeaf) {\n this.ascend((node) => {\n const newCount = node.Count().asNumber() - 1;\n node.set(PDFName.of('Count'), PDFNumber.of(newCount));\n });\n }\n\n Kids.remove(kidIdx);\n }\n}\n\nexport default PDFPageTree;\n","import CharCodes from 'src/core/syntax/CharCodes';\n\nexport const IsDigit = new Uint8Array(256);\n\nIsDigit[CharCodes.Zero] = 1;\nIsDigit[CharCodes.One] = 1;\nIsDigit[CharCodes.Two] = 1;\nIsDigit[CharCodes.Three] = 1;\nIsDigit[CharCodes.Four] = 1;\nIsDigit[CharCodes.Five] = 1;\nIsDigit[CharCodes.Six] = 1;\nIsDigit[CharCodes.Seven] = 1;\nIsDigit[CharCodes.Eight] = 1;\nIsDigit[CharCodes.Nine] = 1;\n\nexport const IsNumericPrefix = new Uint8Array(256);\n\nIsNumericPrefix[CharCodes.Period] = 1;\nIsNumericPrefix[CharCodes.Plus] = 1;\nIsNumericPrefix[CharCodes.Minus] = 1;\n\nexport const IsNumeric = new Uint8Array(256);\n\nfor (let idx = 0, len = 256; idx < len; idx++) {\n IsNumeric[idx] = IsDigit[idx] || IsNumericPrefix[idx] ? 1 : 0;\n}\n","import { NumberParsingError } from 'src/core/errors';\nimport ByteStream from 'src/core/parser/ByteStream';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { IsDigit, IsNumeric } from 'src/core/syntax/Numeric';\nimport { IsWhitespace } from 'src/core/syntax/Whitespace';\nimport { charFromCode } from 'src/utils';\n\nconst { Newline, CarriageReturn } = CharCodes;\n\n// TODO: Throw error if eof is reached before finishing object parse...\nclass BaseParser {\n protected readonly bytes: ByteStream;\n protected readonly capNumbers: boolean;\n\n constructor(bytes: ByteStream, capNumbers = false) {\n this.bytes = bytes;\n this.capNumbers = capNumbers;\n }\n\n protected parseRawInt(): number {\n let value = '';\n\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (!IsDigit[byte]) break;\n value += charFromCode(this.bytes.next());\n }\n\n const numberValue = Number(value);\n\n if (!value || !isFinite(numberValue)) {\n throw new NumberParsingError(this.bytes.position(), value);\n }\n\n return numberValue;\n }\n\n // TODO: Maybe handle exponential format?\n // TODO: Compare performance of string concatenation to charFromCode(...bytes)\n protected parseRawNumber(): number {\n let value = '';\n\n // Parse integer-part, the leading (+ | - | . | 0-9)\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (!IsNumeric[byte]) break;\n value += charFromCode(this.bytes.next());\n if (byte === CharCodes.Period) break;\n }\n\n // Parse decimal-part, the trailing (0-9)\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (!IsDigit[byte]) break;\n value += charFromCode(this.bytes.next());\n }\n\n const numberValue = Number(value);\n\n if (!value || !isFinite(numberValue)) {\n throw new NumberParsingError(this.bytes.position(), value);\n }\n\n if (numberValue > Number.MAX_SAFE_INTEGER) {\n if (this.capNumbers) {\n const msg = `Parsed number that is too large for some PDF readers: ${value}, using Number.MAX_SAFE_INTEGER instead.`;\n console.warn(msg);\n return Number.MAX_SAFE_INTEGER;\n } else {\n const msg = `Parsed number that is too large for some PDF readers: ${value}, not capping.`;\n console.warn(msg);\n }\n }\n\n return numberValue;\n }\n\n protected skipWhitespace(): void {\n while (!this.bytes.done() && IsWhitespace[this.bytes.peek()]) {\n this.bytes.next();\n }\n }\n\n protected skipLine(): void {\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (byte === Newline || byte === CarriageReturn) return;\n this.bytes.next();\n }\n }\n\n protected skipComment(): boolean {\n if (this.bytes.peek() !== CharCodes.Percent) return false;\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (byte === Newline || byte === CarriageReturn) return true;\n this.bytes.next();\n }\n return true;\n }\n\n protected skipWhitespaceAndComments(): void {\n this.skipWhitespace();\n while (this.skipComment()) this.skipWhitespace();\n }\n\n protected matchKeyword(keyword: number[]): boolean {\n const initialOffset = this.bytes.offset();\n for (let idx = 0, len = keyword.length; idx < len; idx++) {\n if (this.bytes.done() || this.bytes.next() !== keyword[idx]) {\n this.bytes.moveTo(initialOffset);\n return false;\n }\n }\n return true;\n }\n}\n\nexport default BaseParser;\n","import { NextByteAssertionError } from 'src/core/errors';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport { decodePDFRawStream } from 'src/core/streams/decode';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\n// TODO: See how line/col tracking affects performance\nclass ByteStream {\n static of = (bytes: Uint8Array) => new ByteStream(bytes);\n\n static fromPDFRawStream = (rawStream: PDFRawStream) =>\n ByteStream.of(decodePDFRawStream(rawStream).decode());\n\n private readonly bytes: Uint8Array;\n private readonly length: number;\n\n private idx = 0;\n private line = 0;\n private column = 0;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n this.length = this.bytes.length;\n }\n\n moveTo(offset: number): void {\n this.idx = offset;\n }\n\n next(): number {\n const byte = this.bytes[this.idx++];\n if (byte === CharCodes.Newline) {\n this.line += 1;\n this.column = 0;\n } else {\n this.column += 1;\n }\n return byte;\n }\n\n assertNext(expected: number): number {\n if (this.peek() !== expected) {\n throw new NextByteAssertionError(this.position(), expected, this.peek());\n }\n return this.next();\n }\n\n peek(): number {\n return this.bytes[this.idx];\n }\n\n peekAhead(steps: number) {\n return this.bytes[this.idx + steps];\n }\n\n peekAt(offset: number) {\n return this.bytes[offset];\n }\n\n done(): boolean {\n return this.idx >= this.length;\n }\n\n offset(): number {\n return this.idx;\n }\n\n slice(start: number, end: number): Uint8Array {\n return this.bytes.slice(start, end);\n }\n\n position(): { line: number; column: number; offset: number } {\n return { line: this.line, column: this.column, offset: this.idx };\n }\n}\n\nexport default ByteStream;\n","import CharCodes from 'src/core/syntax/CharCodes';\n\nconst { Space, CarriageReturn, Newline } = CharCodes;\n\nconst stream = [\n CharCodes.s,\n CharCodes.t,\n CharCodes.r,\n CharCodes.e,\n CharCodes.a,\n CharCodes.m,\n];\n\nconst endstream = [\n CharCodes.e,\n CharCodes.n,\n CharCodes.d,\n CharCodes.s,\n CharCodes.t,\n CharCodes.r,\n CharCodes.e,\n CharCodes.a,\n CharCodes.m,\n];\n\nexport const Keywords = {\n header: [\n CharCodes.Percent,\n CharCodes.P,\n CharCodes.D,\n CharCodes.F,\n CharCodes.Dash,\n ],\n eof: [\n CharCodes.Percent,\n CharCodes.Percent,\n CharCodes.E,\n CharCodes.O,\n CharCodes.F,\n ],\n obj: [CharCodes.o, CharCodes.b, CharCodes.j],\n endobj: [\n CharCodes.e,\n CharCodes.n,\n CharCodes.d,\n CharCodes.o,\n CharCodes.b,\n CharCodes.j,\n ],\n xref: [CharCodes.x, CharCodes.r, CharCodes.e, CharCodes.f],\n trailer: [\n CharCodes.t,\n CharCodes.r,\n CharCodes.a,\n CharCodes.i,\n CharCodes.l,\n CharCodes.e,\n CharCodes.r,\n ],\n startxref: [\n CharCodes.s,\n CharCodes.t,\n CharCodes.a,\n CharCodes.r,\n CharCodes.t,\n CharCodes.x,\n CharCodes.r,\n CharCodes.e,\n CharCodes.f,\n ],\n true: [CharCodes.t, CharCodes.r, CharCodes.u, CharCodes.e],\n false: [CharCodes.f, CharCodes.a, CharCodes.l, CharCodes.s, CharCodes.e],\n null: [CharCodes.n, CharCodes.u, CharCodes.l, CharCodes.l],\n stream,\n streamEOF1: [...stream, Space, CarriageReturn, Newline],\n streamEOF2: [...stream, CarriageReturn, Newline],\n streamEOF3: [...stream, CarriageReturn],\n streamEOF4: [...stream, Newline],\n endstream,\n EOF1endstream: [CarriageReturn, Newline, ...endstream],\n EOF2endstream: [CarriageReturn, ...endstream],\n EOF3endstream: [Newline, ...endstream],\n};\n","import {\n PDFObjectParsingError,\n PDFStreamParsingError,\n Position,\n UnbalancedParenthesisError,\n} from 'src/core/errors';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFBool from 'src/core/objects/PDFBool';\nimport PDFDict, { DictMap } from 'src/core/objects/PDFDict';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNull from 'src/core/objects/PDFNull';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFString from 'src/core/objects/PDFString';\nimport BaseParser from 'src/core/parser/BaseParser';\nimport ByteStream from 'src/core/parser/ByteStream';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFCatalog from 'src/core/structures/PDFCatalog';\nimport PDFPageLeaf from 'src/core/structures/PDFPageLeaf';\nimport PDFPageTree from 'src/core/structures/PDFPageTree';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { IsDelimiter } from 'src/core/syntax/Delimiters';\nimport { Keywords } from 'src/core/syntax/Keywords';\nimport { IsDigit, IsNumeric } from 'src/core/syntax/Numeric';\nimport { IsWhitespace } from 'src/core/syntax/Whitespace';\nimport { charFromCode } from 'src/utils';\n\n// TODO: Throw error if eof is reached before finishing object parse...\nclass PDFObjectParser extends BaseParser {\n static forBytes = (\n bytes: Uint8Array,\n context: PDFContext,\n capNumbers?: boolean,\n ) => new PDFObjectParser(ByteStream.of(bytes), context, capNumbers);\n\n static forByteStream = (\n byteStream: ByteStream,\n context: PDFContext,\n capNumbers = false,\n ) => new PDFObjectParser(byteStream, context, capNumbers);\n\n protected readonly context: PDFContext;\n\n constructor(byteStream: ByteStream, context: PDFContext, capNumbers = false) {\n super(byteStream, capNumbers);\n this.context = context;\n }\n\n // TODO: Is it possible to reduce duplicate parsing for ref lookaheads?\n parseObject(): PDFObject {\n this.skipWhitespaceAndComments();\n\n if (this.matchKeyword(Keywords.true)) return PDFBool.True;\n if (this.matchKeyword(Keywords.false)) return PDFBool.False;\n if (this.matchKeyword(Keywords.null)) return PDFNull;\n\n const byte = this.bytes.peek();\n\n if (\n byte === CharCodes.LessThan &&\n this.bytes.peekAhead(1) === CharCodes.LessThan\n ) {\n return this.parseDictOrStream();\n }\n if (byte === CharCodes.LessThan) return this.parseHexString();\n if (byte === CharCodes.LeftParen) return this.parseString();\n if (byte === CharCodes.ForwardSlash) return this.parseName();\n if (byte === CharCodes.LeftSquareBracket) return this.parseArray();\n if (IsNumeric[byte]) return this.parseNumberOrRef();\n\n throw new PDFObjectParsingError(this.bytes.position(), byte);\n }\n\n protected parseNumberOrRef(): PDFNumber | PDFRef {\n const firstNum = this.parseRawNumber();\n this.skipWhitespaceAndComments();\n\n const lookaheadStart = this.bytes.offset();\n if (IsDigit[this.bytes.peek()]) {\n const secondNum = this.parseRawNumber();\n this.skipWhitespaceAndComments();\n if (this.bytes.peek() === CharCodes.R) {\n this.bytes.assertNext(CharCodes.R);\n return PDFRef.of(firstNum, secondNum);\n }\n }\n\n this.bytes.moveTo(lookaheadStart);\n return PDFNumber.of(firstNum);\n }\n\n // TODO: Maybe update PDFHexString.of() logic to remove whitespace and validate input?\n protected parseHexString(): PDFHexString {\n let value = '';\n\n this.bytes.assertNext(CharCodes.LessThan);\n while (!this.bytes.done() && this.bytes.peek() !== CharCodes.GreaterThan) {\n value += charFromCode(this.bytes.next());\n }\n this.bytes.assertNext(CharCodes.GreaterThan);\n\n return PDFHexString.of(value);\n }\n\n protected parseString(): PDFString {\n let nestingLvl = 0;\n let isEscaped = false;\n let value = '';\n\n while (!this.bytes.done()) {\n const byte = this.bytes.next();\n value += charFromCode(byte);\n\n // Check for unescaped parenthesis\n if (!isEscaped) {\n if (byte === CharCodes.LeftParen) nestingLvl += 1;\n if (byte === CharCodes.RightParen) nestingLvl -= 1;\n }\n\n // Track whether current character is being escaped or not\n if (byte === CharCodes.BackSlash) {\n isEscaped = !isEscaped;\n } else if (isEscaped) {\n isEscaped = false;\n }\n\n // Once (if) the unescaped parenthesis balance out, return their contents\n if (nestingLvl === 0) {\n // Remove the outer parens so they aren't part of the contents\n return PDFString.of(value.substring(1, value.length - 1));\n }\n }\n\n throw new UnbalancedParenthesisError(this.bytes.position());\n }\n\n // TODO: Compare performance of string concatenation to charFromCode(...bytes)\n // TODO: Maybe preallocate small Uint8Array if can use charFromCode?\n protected parseName(): PDFName {\n this.bytes.assertNext(CharCodes.ForwardSlash);\n\n let name = '';\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (IsWhitespace[byte] || IsDelimiter[byte]) break;\n name += charFromCode(byte);\n this.bytes.next();\n }\n\n return PDFName.of(name);\n }\n\n protected parseArray(): PDFArray {\n this.bytes.assertNext(CharCodes.LeftSquareBracket);\n this.skipWhitespaceAndComments();\n\n const pdfArray = PDFArray.withContext(this.context);\n while (this.bytes.peek() !== CharCodes.RightSquareBracket) {\n const element = this.parseObject();\n pdfArray.push(element);\n this.skipWhitespaceAndComments();\n }\n this.bytes.assertNext(CharCodes.RightSquareBracket);\n return pdfArray;\n }\n\n protected parseDict(): PDFDict {\n this.bytes.assertNext(CharCodes.LessThan);\n this.bytes.assertNext(CharCodes.LessThan);\n this.skipWhitespaceAndComments();\n\n const dict: DictMap = new Map();\n\n while (\n !this.bytes.done() &&\n this.bytes.peek() !== CharCodes.GreaterThan &&\n this.bytes.peekAhead(1) !== CharCodes.GreaterThan\n ) {\n const key = this.parseName();\n const value = this.parseObject();\n dict.set(key, value);\n this.skipWhitespaceAndComments();\n }\n\n this.skipWhitespaceAndComments();\n this.bytes.assertNext(CharCodes.GreaterThan);\n this.bytes.assertNext(CharCodes.GreaterThan);\n\n const Type = dict.get(PDFName.of('Type'));\n\n if (Type === PDFName.of('Catalog')) {\n return PDFCatalog.fromMapWithContext(dict, this.context);\n } else if (Type === PDFName.of('Pages')) {\n return PDFPageTree.fromMapWithContext(dict, this.context);\n } else if (Type === PDFName.of('Page')) {\n return PDFPageLeaf.fromMapWithContext(dict, this.context);\n } else {\n return PDFDict.fromMapWithContext(dict, this.context);\n }\n }\n\n protected parseDictOrStream(): PDFDict | PDFStream {\n const startPos = this.bytes.position();\n\n const dict = this.parseDict();\n\n this.skipWhitespaceAndComments();\n\n if (\n !this.matchKeyword(Keywords.streamEOF1) &&\n !this.matchKeyword(Keywords.streamEOF2) &&\n !this.matchKeyword(Keywords.streamEOF3) &&\n !this.matchKeyword(Keywords.streamEOF4) &&\n !this.matchKeyword(Keywords.stream)\n ) {\n return dict;\n }\n\n const start = this.bytes.offset();\n let end: number;\n\n const Length = dict.get(PDFName.of('Length'));\n if (Length instanceof PDFNumber) {\n end = start + Length.asNumber();\n this.bytes.moveTo(end);\n this.skipWhitespaceAndComments();\n if (!this.matchKeyword(Keywords.endstream)) {\n this.bytes.moveTo(start);\n end = this.findEndOfStreamFallback(startPos);\n }\n } else {\n end = this.findEndOfStreamFallback(startPos);\n }\n\n const contents = this.bytes.slice(start, end);\n\n return PDFRawStream.of(dict, contents);\n }\n\n protected findEndOfStreamFallback(startPos: Position) {\n // Move to end of stream, while handling nested streams\n let nestingLvl = 1;\n let end = this.bytes.offset();\n\n while (!this.bytes.done()) {\n end = this.bytes.offset();\n\n if (this.matchKeyword(Keywords.stream)) {\n nestingLvl += 1;\n } else if (\n this.matchKeyword(Keywords.EOF1endstream) ||\n this.matchKeyword(Keywords.EOF2endstream) ||\n this.matchKeyword(Keywords.EOF3endstream) ||\n this.matchKeyword(Keywords.endstream)\n ) {\n nestingLvl -= 1;\n } else {\n this.bytes.next();\n }\n\n if (nestingLvl === 0) break;\n }\n\n if (nestingLvl !== 0) throw new PDFStreamParsingError(startPos);\n\n return end;\n }\n}\n\nexport default PDFObjectParser;\n","import { ReparseError } from 'src/core/errors';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport ByteStream from 'src/core/parser/ByteStream';\nimport PDFObjectParser from 'src/core/parser/PDFObjectParser';\nimport { waitForTick } from 'src/utils';\n\nclass PDFObjectStreamParser extends PDFObjectParser {\n static forStream = (\n rawStream: PDFRawStream,\n shouldWaitForTick?: () => boolean,\n ) => new PDFObjectStreamParser(rawStream, shouldWaitForTick);\n\n private alreadyParsed: boolean;\n private readonly shouldWaitForTick: () => boolean;\n private readonly firstOffset: number;\n private readonly objectCount: number;\n\n constructor(rawStream: PDFRawStream, shouldWaitForTick?: () => boolean) {\n super(ByteStream.fromPDFRawStream(rawStream), rawStream.dict.context);\n\n const { dict } = rawStream;\n\n this.alreadyParsed = false;\n this.shouldWaitForTick = shouldWaitForTick || (() => false);\n this.firstOffset = dict.lookup(PDFName.of('First'), PDFNumber).asNumber();\n this.objectCount = dict.lookup(PDFName.of('N'), PDFNumber).asNumber();\n }\n\n async parseIntoContext(): Promise {\n if (this.alreadyParsed) {\n throw new ReparseError('PDFObjectStreamParser', 'parseIntoContext');\n }\n this.alreadyParsed = true;\n\n const offsetsAndObjectNumbers = this.parseOffsetsAndObjectNumbers();\n for (let idx = 0, len = offsetsAndObjectNumbers.length; idx < len; idx++) {\n const { objectNumber, offset } = offsetsAndObjectNumbers[idx];\n this.bytes.moveTo(this.firstOffset + offset);\n const object = this.parseObject();\n const ref = PDFRef.of(objectNumber, 0);\n this.context.assign(ref, object);\n if (this.shouldWaitForTick()) await waitForTick();\n }\n }\n\n private parseOffsetsAndObjectNumbers(): {\n objectNumber: number;\n offset: number;\n }[] {\n const offsetsAndObjectNumbers = [];\n for (let idx = 0, len = this.objectCount; idx < len; idx++) {\n this.skipWhitespaceAndComments();\n const objectNumber = this.parseRawInt();\n\n this.skipWhitespaceAndComments();\n const offset = this.parseRawInt();\n\n offsetsAndObjectNumbers.push({ objectNumber, offset });\n }\n return offsetsAndObjectNumbers;\n }\n}\n\nexport default PDFObjectStreamParser;\n","import { ReparseError } from 'src/core/errors';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport ByteStream from 'src/core/parser/ByteStream';\nimport PDFContext from 'src/core/PDFContext';\n\nexport interface Entry {\n ref: PDFRef;\n offset: number;\n deleted: boolean;\n inObjectStream: boolean;\n}\n\nclass PDFXRefStreamParser {\n static forStream = (rawStream: PDFRawStream) =>\n new PDFXRefStreamParser(rawStream);\n\n private alreadyParsed: boolean;\n\n private readonly dict: PDFDict;\n private readonly context: PDFContext;\n private readonly bytes: ByteStream;\n private readonly subsections: {\n firstObjectNumber: number;\n length: number;\n }[];\n private readonly byteWidths: [number, number, number];\n\n constructor(rawStream: PDFRawStream) {\n this.alreadyParsed = false;\n\n this.dict = rawStream.dict;\n this.bytes = ByteStream.fromPDFRawStream(rawStream);\n this.context = this.dict.context;\n\n const Size = this.dict.lookup(PDFName.of('Size'), PDFNumber);\n\n const Index = this.dict.lookup(PDFName.of('Index'));\n if (Index instanceof PDFArray) {\n this.subsections = [];\n for (let idx = 0, len = Index.size(); idx < len; idx += 2) {\n const firstObjectNumber = Index.lookup(idx + 0, PDFNumber).asNumber();\n const length = Index.lookup(idx + 1, PDFNumber).asNumber();\n this.subsections.push({ firstObjectNumber, length });\n }\n } else {\n this.subsections = [{ firstObjectNumber: 0, length: Size.asNumber() }];\n }\n\n const W = this.dict.lookup(PDFName.of('W'), PDFArray);\n this.byteWidths = [-1, -1, -1];\n for (let idx = 0, len = W.size(); idx < len; idx++) {\n this.byteWidths[idx] = W.lookup(idx, PDFNumber).asNumber();\n }\n }\n\n parseIntoContext(): Entry[] {\n if (this.alreadyParsed) {\n throw new ReparseError('PDFXRefStreamParser', 'parseIntoContext');\n }\n this.alreadyParsed = true;\n\n this.context.trailerInfo = {\n Root: this.dict.get(PDFName.of('Root')),\n Encrypt: this.dict.get(PDFName.of('Encrypt')),\n Info: this.dict.get(PDFName.of('Info')),\n ID: this.dict.get(PDFName.of('ID')),\n };\n\n const entries = this.parseEntries();\n\n // for (let idx = 0, len = entries.length; idx < len; idx++) {\n // const entry = entries[idx];\n // if (entry.deleted) this.context.delete(entry.ref);\n // }\n\n return entries;\n }\n\n private parseEntries(): Entry[] {\n const entries = [];\n const [typeFieldWidth, offsetFieldWidth, genFieldWidth] = this.byteWidths;\n\n for (\n let subsectionIdx = 0, subsectionLen = this.subsections.length;\n subsectionIdx < subsectionLen;\n subsectionIdx++\n ) {\n const { firstObjectNumber, length } = this.subsections[subsectionIdx];\n\n for (let objIdx = 0; objIdx < length; objIdx++) {\n let type = 0;\n for (let idx = 0, len = typeFieldWidth; idx < len; idx++) {\n type = (type << 8) | this.bytes.next();\n }\n\n let offset = 0;\n for (let idx = 0, len = offsetFieldWidth; idx < len; idx++) {\n offset = (offset << 8) | this.bytes.next();\n }\n\n let generationNumber = 0;\n for (let idx = 0, len = genFieldWidth; idx < len; idx++) {\n generationNumber = (generationNumber << 8) | this.bytes.next();\n }\n\n // When the `type` field is absent, it defaults to 1\n if (typeFieldWidth === 0) type = 1;\n\n const objectNumber = firstObjectNumber + objIdx;\n const entry = {\n ref: PDFRef.of(objectNumber, generationNumber),\n offset,\n deleted: type === 0,\n inObjectStream: type === 2,\n };\n\n entries.push(entry);\n }\n }\n\n return entries;\n }\n}\n\nexport default PDFXRefStreamParser;\n","import PDFCrossRefSection from 'src/core/document/PDFCrossRefSection';\nimport PDFHeader from 'src/core/document/PDFHeader';\nimport PDFTrailer from 'src/core/document/PDFTrailer';\nimport {\n MissingKeywordError,\n MissingPDFHeaderError,\n PDFInvalidObjectParsingError,\n ReparseError,\n StalledParserError,\n} from 'src/core/errors';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFInvalidObject from 'src/core/objects/PDFInvalidObject';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport ByteStream from 'src/core/parser/ByteStream';\nimport PDFObjectParser from 'src/core/parser/PDFObjectParser';\nimport PDFObjectStreamParser from 'src/core/parser/PDFObjectStreamParser';\nimport PDFXRefStreamParser from 'src/core/parser/PDFXRefStreamParser';\nimport PDFContext from 'src/core/PDFContext';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { Keywords } from 'src/core/syntax/Keywords';\nimport { IsDigit } from 'src/core/syntax/Numeric';\nimport { waitForTick } from 'src/utils';\n\nclass PDFParser extends PDFObjectParser {\n static forBytesWithOptions = (\n pdfBytes: Uint8Array,\n objectsPerTick?: number,\n throwOnInvalidObject?: boolean,\n capNumbers?: boolean,\n ) =>\n new PDFParser(pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers);\n\n private readonly objectsPerTick: number;\n private readonly throwOnInvalidObject: boolean;\n private alreadyParsed = false;\n private parsedObjects = 0;\n\n constructor(\n pdfBytes: Uint8Array,\n objectsPerTick = Infinity,\n throwOnInvalidObject = false,\n capNumbers = false,\n ) {\n super(ByteStream.of(pdfBytes), PDFContext.create(), capNumbers);\n this.objectsPerTick = objectsPerTick;\n this.throwOnInvalidObject = throwOnInvalidObject;\n }\n\n async parseDocument(): Promise {\n if (this.alreadyParsed) {\n throw new ReparseError('PDFParser', 'parseDocument');\n }\n this.alreadyParsed = true;\n\n this.context.header = this.parseHeader();\n\n let prevOffset;\n while (!this.bytes.done()) {\n await this.parseDocumentSection();\n const offset = this.bytes.offset();\n if (offset === prevOffset) {\n throw new StalledParserError(this.bytes.position());\n }\n prevOffset = offset;\n }\n\n this.maybeRecoverRoot();\n\n if (this.context.lookup(PDFRef.of(0))) {\n console.warn('Removing parsed object: 0 0 R');\n this.context.delete(PDFRef.of(0));\n }\n\n return this.context;\n }\n\n private maybeRecoverRoot(): void {\n const isValidCatalog = (obj?: PDFObject) =>\n obj instanceof PDFDict &&\n obj.lookup(PDFName.of('Type')) === PDFName.of('Catalog');\n\n const catalog = this.context.lookup(this.context.trailerInfo.Root);\n\n if (!isValidCatalog(catalog)) {\n const indirectObjects = this.context.enumerateIndirectObjects();\n for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {\n const [ref, object] = indirectObjects[idx];\n if (isValidCatalog(object)) {\n this.context.trailerInfo.Root = ref;\n }\n }\n }\n }\n\n private parseHeader(): PDFHeader {\n while (!this.bytes.done()) {\n if (this.matchKeyword(Keywords.header)) {\n const major = this.parseRawInt();\n this.bytes.assertNext(CharCodes.Period);\n const minor = this.parseRawInt();\n const header = PDFHeader.forVersion(major, minor);\n this.skipBinaryHeaderComment();\n return header;\n }\n this.bytes.next();\n }\n\n throw new MissingPDFHeaderError(this.bytes.position());\n }\n\n private parseIndirectObjectHeader(): PDFRef {\n this.skipWhitespaceAndComments();\n const objectNumber = this.parseRawInt();\n\n this.skipWhitespaceAndComments();\n const generationNumber = this.parseRawInt();\n\n this.skipWhitespaceAndComments();\n if (!this.matchKeyword(Keywords.obj)) {\n throw new MissingKeywordError(this.bytes.position(), Keywords.obj);\n }\n\n return PDFRef.of(objectNumber, generationNumber);\n }\n\n private matchIndirectObjectHeader(): boolean {\n const initialOffset = this.bytes.offset();\n try {\n this.parseIndirectObjectHeader();\n return true;\n } catch (e) {\n this.bytes.moveTo(initialOffset);\n return false;\n }\n }\n\n private shouldWaitForTick = () => {\n this.parsedObjects += 1;\n return this.parsedObjects % this.objectsPerTick === 0;\n };\n\n private async parseIndirectObject(): Promise {\n const ref = this.parseIndirectObjectHeader();\n\n this.skipWhitespaceAndComments();\n const object = this.parseObject();\n\n this.skipWhitespaceAndComments();\n // if (!this.matchKeyword(Keywords.endobj)) {\n // throw new MissingKeywordError(this.bytes.position(), Keywords.endobj);\n // }\n\n // TODO: Log a warning if this fails...\n this.matchKeyword(Keywords.endobj);\n\n if (\n object instanceof PDFRawStream &&\n object.dict.lookup(PDFName.of('Type')) === PDFName.of('ObjStm')\n ) {\n await PDFObjectStreamParser.forStream(\n object,\n this.shouldWaitForTick,\n ).parseIntoContext();\n } else if (\n object instanceof PDFRawStream &&\n object.dict.lookup(PDFName.of('Type')) === PDFName.of('XRef')\n ) {\n PDFXRefStreamParser.forStream(object).parseIntoContext();\n } else {\n this.context.assign(ref, object);\n }\n\n return ref;\n }\n\n // TODO: Improve and clean this up\n private tryToParseInvalidIndirectObject() {\n const startPos = this.bytes.position();\n\n const msg = `Trying to parse invalid object: ${JSON.stringify(startPos)})`;\n if (this.throwOnInvalidObject) throw new Error(msg);\n console.warn(msg);\n\n const ref = this.parseIndirectObjectHeader();\n\n console.warn(`Invalid object ref: ${ref}`);\n\n this.skipWhitespaceAndComments();\n const start = this.bytes.offset();\n\n let failed = true;\n while (!this.bytes.done()) {\n if (this.matchKeyword(Keywords.endobj)) {\n failed = false;\n }\n if (!failed) break;\n this.bytes.next();\n }\n\n if (failed) throw new PDFInvalidObjectParsingError(startPos);\n\n const end = this.bytes.offset() - Keywords.endobj.length;\n\n const object = PDFInvalidObject.of(this.bytes.slice(start, end));\n this.context.assign(ref, object);\n\n return ref;\n }\n\n private async parseIndirectObjects(): Promise {\n this.skipWhitespaceAndComments();\n\n while (!this.bytes.done() && IsDigit[this.bytes.peek()]) {\n const initialOffset = this.bytes.offset();\n\n try {\n await this.parseIndirectObject();\n } catch (e) {\n // TODO: Add tracing/logging mechanism to track when this happens!\n this.bytes.moveTo(initialOffset);\n this.tryToParseInvalidIndirectObject();\n }\n this.skipWhitespaceAndComments();\n\n // TODO: Can this be done only when needed, to avoid harming performance?\n this.skipJibberish();\n\n if (this.shouldWaitForTick()) await waitForTick();\n }\n }\n\n private maybeParseCrossRefSection(): PDFCrossRefSection | void {\n this.skipWhitespaceAndComments();\n if (!this.matchKeyword(Keywords.xref)) return;\n this.skipWhitespaceAndComments();\n\n let objectNumber = -1;\n const xref = PDFCrossRefSection.createEmpty();\n\n while (!this.bytes.done() && IsDigit[this.bytes.peek()]) {\n const firstInt = this.parseRawInt();\n this.skipWhitespaceAndComments();\n\n const secondInt = this.parseRawInt();\n this.skipWhitespaceAndComments();\n\n const byte = this.bytes.peek();\n if (byte === CharCodes.n || byte === CharCodes.f) {\n const ref = PDFRef.of(objectNumber, secondInt);\n if (this.bytes.next() === CharCodes.n) {\n xref.addEntry(ref, firstInt);\n } else {\n // this.context.delete(ref);\n xref.addDeletedEntry(ref, firstInt);\n }\n objectNumber += 1;\n } else {\n objectNumber = firstInt;\n }\n this.skipWhitespaceAndComments();\n }\n\n return xref;\n }\n\n private maybeParseTrailerDict(): void {\n this.skipWhitespaceAndComments();\n if (!this.matchKeyword(Keywords.trailer)) return;\n this.skipWhitespaceAndComments();\n\n const dict = this.parseDict();\n\n const { context } = this;\n context.trailerInfo = {\n Root: dict.get(PDFName.of('Root')) || context.trailerInfo.Root,\n Encrypt: dict.get(PDFName.of('Encrypt')) || context.trailerInfo.Encrypt,\n Info: dict.get(PDFName.of('Info')) || context.trailerInfo.Info,\n ID: dict.get(PDFName.of('ID')) || context.trailerInfo.ID,\n };\n }\n\n private maybeParseTrailer(): PDFTrailer | void {\n this.skipWhitespaceAndComments();\n if (!this.matchKeyword(Keywords.startxref)) return;\n this.skipWhitespaceAndComments();\n\n const offset = this.parseRawInt();\n\n this.skipWhitespace();\n this.matchKeyword(Keywords.eof);\n this.skipWhitespaceAndComments();\n this.matchKeyword(Keywords.eof);\n this.skipWhitespaceAndComments();\n\n return PDFTrailer.forLastCrossRefSectionOffset(offset);\n }\n\n private async parseDocumentSection(): Promise {\n await this.parseIndirectObjects();\n this.maybeParseCrossRefSection();\n this.maybeParseTrailerDict();\n this.maybeParseTrailer();\n\n // TODO: Can this be done only when needed, to avoid harming performance?\n this.skipJibberish();\n }\n\n /**\n * This operation is not necessary for valid PDF files. But some invalid PDFs\n * contain jibberish in between indirect objects. This method is designed to\n * skip past that jibberish, should it exist, until it reaches the next\n * indirect object header, an xref table section, or the file trailer.\n */\n private skipJibberish(): void {\n this.skipWhitespaceAndComments();\n while (!this.bytes.done()) {\n const initialOffset = this.bytes.offset();\n const byte = this.bytes.peek();\n const isAlphaNumeric = byte >= CharCodes.Space && byte <= CharCodes.Tilde;\n if (isAlphaNumeric) {\n if (\n this.matchKeyword(Keywords.xref) ||\n this.matchKeyword(Keywords.trailer) ||\n this.matchKeyword(Keywords.startxref) ||\n this.matchIndirectObjectHeader()\n ) {\n this.bytes.moveTo(initialOffset);\n break;\n }\n }\n this.bytes.next();\n }\n }\n\n /**\n * Skips the binary comment following a PDF header. The specification\n * defines this binary comment (section 7.5.2 File Header) as a sequence of 4\n * or more bytes that are 128 or greater, and which are preceded by a \"%\".\n *\n * This would imply that to strip out this binary comment, we could check for\n * a sequence of bytes starting with \"%\", and remove all subsequent bytes that\n * are 128 or greater. This works for many documents that properly comply with\n * the spec. But in the wild, there are PDFs that omit the leading \"%\", and\n * include bytes that are less than 128 (e.g. 0 or 1). So in order to parse\n * these headers correctly, we just throw out all bytes leading up to the\n * first indirect object header.\n */\n private skipBinaryHeaderComment(): void {\n this.skipWhitespaceAndComments();\n try {\n const initialOffset = this.bytes.offset();\n this.parseIndirectObjectHeader();\n this.bytes.moveTo(initialOffset);\n } catch (e) {\n this.bytes.next();\n this.skipWhitespaceAndComments();\n }\n }\n}\n\nexport default PDFParser;\n","const flag = (bitIndex: number) => 1 << bitIndex;\n\n/** From PDF spec table 165 */\nexport enum AnnotationFlags {\n /**\n * If set, do not display the annotation if it does not belong to one of the\n * standard annotation types and no annotation handler is available. If clear,\n * display such an unknown annotation using an appearance stream specified by\n * its appearance dictionary, if any.\n */\n Invisible = flag(1 - 1),\n\n /**\n * If set, do not display or print the annotation or allow it to interact with\n * the user, regardless of its annotation type or whether an annotation\n * handler is available.\n *\n * In cases where screen space is limited, the ability to hide and show\n * annotations selectively can be used in combination with appearance streams\n * to display auxiliary pop-up information similar in function to online help\n * systems.\n */\n Hidden = flag(2 - 1),\n\n /**\n * If set, print the annotation when the page is printed. If clear, never\n * print the annotation, regardless of whether it is displayed on the screen.\n *\n * This can be useful for annotations representing interactive pushbuttons,\n * which would serve no meaningful purpose on the printed page.\n */\n Print = flag(3 - 1),\n\n /**\n * If set, do not scale the annotation’s appearance to match the magnification\n * of the page. The location of the annotation on the page (defined by the\n * upper-left corner of its annotation rectangle) shall remain fixed,\n * regardless of the page magnification.\n */\n NoZoom = flag(4 - 1),\n\n /**\n * If set, do not rotate the annotation’s appearance to match the rotation of\n * the page. The upper-left corner of the annotation rectangle shall remain in\n * a fixed location on the page, regardless of the page rotation.\n */\n NoRotate = flag(5 - 1),\n\n /**\n * If set, do not display the annotation on the screen or allow it to interact\n * with the user. The annotation may be printed (depending on the setting of\n * the Print flag) but should be considered hidden for purposes of on-screen\n * display and user interaction.\n */\n NoView = flag(6 - 1),\n\n /**\n * If set, do not allow the annotation to interact with the user. The\n * annotation may be displayed or printed (depending on the settings of the\n * NoView and Print flags) but should not respond to mouse clicks or change\n * its appearance in response to mouse motions.\n *\n * This flag shall be ignored for widget annotations; its function is\n * subsumed by the ReadOnly flag of the associated form field.\n */\n ReadOnly = flag(7 - 1),\n\n /**\n * If set, do not allow the annotation to be deleted or its properties\n * (including position and size) to be modified by the user. However, this\n * flag does not restrict changes to the annotation’s contents, such as the\n * value of a form field.\n */\n Locked = flag(8 - 1),\n\n /**\n * If set, invert the interpretation of the NoView flag for certain events.\n *\n * A typical use is to have an annotation that appears only when a mouse\n * cursor is held over it.\n */\n ToggleNoView = flag(9 - 1),\n\n /**\n * If set, do not allow the contents of the annotation to be modified by the\n * user. This flag does not restrict deletion of the annotation or changes to\n * other annotation properties, such as position and size.\n */\n LockedContents = flag(10 - 1),\n}\n","import PDFObject from 'src/core/objects/PDFObject';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport {\n copyStringIntoBuffer,\n toHexStringOfMinLength,\n utf16Decode,\n utf16Encode,\n pdfDocEncodingDecode,\n parseDate,\n hasUtf16BOM,\n} from 'src/utils';\nimport { InvalidPDFDateStringError } from 'src/core/errors';\n\nclass PDFHexString extends PDFObject {\n static of = (value: string) => new PDFHexString(value);\n\n static fromText = (value: string) => {\n const encoded = utf16Encode(value);\n\n let hex = '';\n for (let idx = 0, len = encoded.length; idx < len; idx++) {\n hex += toHexStringOfMinLength(encoded[idx], 4);\n }\n\n return new PDFHexString(hex);\n };\n\n private readonly value: string;\n\n constructor(value: string) {\n super();\n this.value = value;\n }\n\n asBytes(): Uint8Array {\n // Append a zero if the number of digits is odd. See PDF spec 7.3.4.3\n const hex = this.value + (this.value.length % 2 === 1 ? '0' : '');\n const hexLength = hex.length;\n\n const bytes = new Uint8Array(hex.length / 2);\n\n let hexOffset = 0;\n let bytesOffset = 0;\n\n // Interpret each pair of hex digits as a single byte\n while (hexOffset < hexLength) {\n const byte = parseInt(hex.substring(hexOffset, hexOffset + 2), 16);\n bytes[bytesOffset] = byte;\n\n hexOffset += 2;\n bytesOffset += 1;\n }\n\n return bytes;\n }\n\n decodeText(): string {\n const bytes = this.asBytes();\n if (hasUtf16BOM(bytes)) return utf16Decode(bytes);\n return pdfDocEncodingDecode(bytes);\n }\n\n decodeDate(): Date {\n const text = this.decodeText();\n const date = parseDate(text);\n if (!date) throw new InvalidPDFDateStringError(text);\n return date;\n }\n\n asString(): string {\n return this.value;\n }\n\n clone(): PDFHexString {\n return PDFHexString.of(this.value);\n }\n\n toString(): string {\n return `<${this.value}>`;\n }\n\n sizeInBytes(): number {\n return this.value.length + 2;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n buffer[offset++] = CharCodes.LessThan;\n offset += copyStringIntoBuffer(this.value, buffer, offset);\n buffer[offset++] = CharCodes.GreaterThan;\n return this.value.length + 2;\n }\n}\n\nexport default PDFHexString;\n","import { MethodNotImplementedError } from 'src/core/errors';\nimport PDFContext from 'src/core/PDFContext';\n\nclass PDFObject {\n clone(_context?: PDFContext): PDFObject {\n throw new MethodNotImplementedError(this.constructor.name, 'clone');\n }\n\n toString(): string {\n throw new MethodNotImplementedError(this.constructor.name, 'toString');\n }\n\n sizeInBytes(): number {\n throw new MethodNotImplementedError(this.constructor.name, 'sizeInBytes');\n }\n\n copyBytesInto(_buffer: Uint8Array, _offset: number): number {\n throw new MethodNotImplementedError(this.constructor.name, 'copyBytesInto');\n }\n}\n\nexport default PDFObject;\n","import PDFObject from 'src/core/objects/PDFObject';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport {\n copyStringIntoBuffer,\n padStart,\n utf16Decode,\n pdfDocEncodingDecode,\n toCharCode,\n parseDate,\n hasUtf16BOM,\n} from 'src/utils';\nimport { InvalidPDFDateStringError } from 'src/core/errors';\n\nclass PDFString extends PDFObject {\n // The PDF spec allows newlines and parens to appear directly within a literal\n // string. These character _may_ be escaped. But they do not _have_ to be. So\n // for simplicity, we will not bother escaping them.\n static of = (value: string) => new PDFString(value);\n\n static fromDate = (date: Date) => {\n const year = padStart(String(date.getUTCFullYear()), 4, '0');\n const month = padStart(String(date.getUTCMonth() + 1), 2, '0');\n const day = padStart(String(date.getUTCDate()), 2, '0');\n const hours = padStart(String(date.getUTCHours()), 2, '0');\n const mins = padStart(String(date.getUTCMinutes()), 2, '0');\n const secs = padStart(String(date.getUTCSeconds()), 2, '0');\n return new PDFString(`D:${year}${month}${day}${hours}${mins}${secs}Z`);\n };\n\n private readonly value: string;\n\n private constructor(value: string) {\n super();\n this.value = value;\n }\n\n asBytes(): Uint8Array {\n const bytes: number[] = [];\n\n let octal = '';\n let escaped = false;\n\n const pushByte = (byte?: number) => {\n if (byte !== undefined) bytes.push(byte);\n escaped = false;\n };\n\n for (let idx = 0, len = this.value.length; idx < len; idx++) {\n const char = this.value[idx];\n const byte = toCharCode(char);\n const nextChar = this.value[idx + 1];\n if (!escaped) {\n if (byte === CharCodes.BackSlash) escaped = true;\n else pushByte(byte);\n } else {\n if (byte === CharCodes.Newline) pushByte();\n else if (byte === CharCodes.CarriageReturn) pushByte();\n else if (byte === CharCodes.n) pushByte(CharCodes.Newline);\n else if (byte === CharCodes.r) pushByte(CharCodes.CarriageReturn);\n else if (byte === CharCodes.t) pushByte(CharCodes.Tab);\n else if (byte === CharCodes.b) pushByte(CharCodes.Backspace);\n else if (byte === CharCodes.f) pushByte(CharCodes.FormFeed);\n else if (byte === CharCodes.LeftParen) pushByte(CharCodes.LeftParen);\n else if (byte === CharCodes.RightParen) pushByte(CharCodes.RightParen);\n else if (byte === CharCodes.Backspace) pushByte(CharCodes.BackSlash);\n else if (byte >= CharCodes.Zero && byte <= CharCodes.Seven) {\n octal += char;\n if (octal.length === 3 || !(nextChar >= '0' && nextChar <= '7')) {\n pushByte(parseInt(octal, 8));\n octal = '';\n }\n } else {\n pushByte(byte);\n }\n }\n }\n\n return new Uint8Array(bytes);\n }\n\n decodeText(): string {\n const bytes = this.asBytes();\n if (hasUtf16BOM(bytes)) return utf16Decode(bytes);\n return pdfDocEncodingDecode(bytes);\n }\n\n decodeDate(): Date {\n const text = this.decodeText();\n const date = parseDate(text);\n if (!date) throw new InvalidPDFDateStringError(text);\n return date;\n }\n\n asString(): string {\n return this.value;\n }\n\n clone(): PDFString {\n return PDFString.of(this.value);\n }\n\n toString(): string {\n return `(${this.value})`;\n }\n\n sizeInBytes(): number {\n return this.value.length + 2;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n buffer[offset++] = CharCodes.LeftParen;\n offset += copyStringIntoBuffer(this.value, buffer, offset);\n buffer[offset++] = CharCodes.RightParen;\n return this.value.length + 2;\n }\n}\n\nexport default PDFString;\n","enum CharCodes {\n Null = 0,\n Backspace = 8,\n Tab = 9,\n Newline = 10,\n FormFeed = 12,\n CarriageReturn = 13,\n Space = 32,\n ExclamationPoint = 33,\n Hash = 35,\n Percent = 37,\n LeftParen = 40,\n RightParen = 41,\n Plus = 43,\n Minus = 45,\n Dash = 45,\n Period = 46,\n ForwardSlash = 47,\n Zero = 48,\n One = 49,\n Two = 50,\n Three = 51,\n Four = 52,\n Five = 53,\n Six = 54,\n Seven = 55,\n Eight = 56,\n Nine = 57,\n LessThan = 60,\n GreaterThan = 62,\n A = 65,\n D = 68,\n E = 69,\n F = 70,\n O = 79,\n P = 80,\n R = 82,\n LeftSquareBracket = 91,\n BackSlash = 92,\n RightSquareBracket = 93,\n a = 97,\n b = 98,\n d = 100,\n e = 101,\n f = 102,\n i = 105,\n j = 106,\n l = 108,\n m = 109,\n n = 110,\n o = 111,\n r = 114,\n s = 115,\n t = 116,\n u = 117,\n x = 120,\n LeftCurly = 123,\n RightCurly = 125,\n Tilde = 126,\n}\n\nexport default CharCodes;\n"],"names":["asPDFName","name","of","asPDFNumber","num","asNumber","cx","cy","px","py","sx","sy","parameters","Map","runners","M","a","m","C","c","cmd","S","s","Q","q","T","t","A","cmds","solveArc","L","l","H","h","V","v","Z","z","x","y","coords","rx","ry","rot","large","sweep","ex","ey","arcToSegments","seg","bez","segmentToBezier","push","rotateX","ox","oy","th","Math","PI","sinTh","sin","cosTh","cos","abs","pl","sqrt","a00","a01","a10","a11","x0","y0","x1","y1","sfactorSq","sfactor","xc","yc","th0","atan2","thArc","segments","ceil","result","i","th2","th3","cx1","cy1","th1","thHalf","x3","y3","x2","y2","svgPathToOperators","path","commands","length","args","Array","isArray","concat","apply","ret","curArg","foundDecimal","params","has","get","includes","parse","drawLinesOfText","lines","options","operators","graphicsState","color","font","size","lineHeight","rotate","xSkew","ySkew","filter","Boolean","idx","len","drawImage","width","height","drawPage","xScale","yScale","drawLine","thickness","dashArray","dashPhase","start","lineCap","end","drawRectangle","borderColor","borderWidth","borderLineCap","borderDashArray","borderDashPhase","KAPPA","drawEllipse","config","xe","ye","xm","ym","undefined","centerX","centerY","drawEllipseCurves","drawSvgPath","scale","rotateInPlace","rotation","drawCheckBox","outline","filled","checkMark","p2x","p2y","p1x","drawCheckMark","min","markColor","drawRadioButton","outlineScale","dot","dotColor","drawButton","background","drawTextLines","textLines","textColor","fontSize","encoded","drawTextField","padding","clipX","clipY","clipWidth","clipHeight","clippingArea","markedContent","drawOptionList","highlights","selectedLines","line","selectedColor","LineCapStyle","clip","ClipNonZero","tan","concatTransformationMatrix","b","d","e","f","ConcatTransformationMatrix","translate","xPos","yPos","rotateRadians","angle","rotateDegrees","skewRadians","xSkewAngle","ySkewAngle","setDashPattern","SetLineDashPattern","map","join","LineJoinStyle","setLineCap","style","SetLineCapStyle","TextRenderingMode","setGraphicsState","state","SetGraphicsStateParams","pushGraphicsState","PushGraphicsState","popGraphicsState","PopGraphicsState","setLineWidth","SetLineWidth","appendBezierCurve","AppendBezierCurve","appendQuadraticCurve","CurveToReplicateInitialPoint","closePath","ClosePath","moveTo","MoveTo","lineTo","LineTo","stroke","StrokePath","fill","FillNonZero","fillAndStroke","FillNonZeroAndStroke","endPath","EndPath","nextLine","NextLine","showText","text","ShowText","beginText","BeginText","endText","EndText","setFontAndSize","SetFontAndSize","setLineHeight","SetTextLineHeight","rotateAndSkewTextRadiansAndTranslate","rotationAngle","SetTextMatrix","drawObject","DrawObject","setFillingGrayscaleColor","gray","NonStrokingColorGray","setStrokingGrayscaleColor","StrokingColorGray","setFillingRgbColor","red","green","blue","NonStrokingColorRgb","setStrokingRgbColor","StrokingColorRgb","setFillingCmykColor","cyan","magenta","yellow","key","NonStrokingColorCmyk","setStrokingCmykColor","StrokingColorCmyk","beginMarkedContent","tag","BeginMarkedContent","endMarkedContent","EndMarkedContent","RotationTypes","degrees","degreeAngle","type","Degrees","Radians","degreesToRadians","degree","toRadians","JSON","stringify","toDegrees","reduceRotation","quadrants","adjustDimsForRotation","dims","rotateRectangle","rectangle","w","r","PageSizes","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","Executive","Folio","Legal","Letter","Tabloid","TextAlignment","computeFontSize","bounds","multiline","linesUsed","lineIdx","lineLen","words","split","spaceInLineRemaining","word","widthOfWord","widthOfTextAtSize","heightAtSize","lastIndexOfWhitespace","test","splitOutLines","input","maxWidth","lastWhitespaceIdx","substring","encodeText","remainder","layoutMultilineText","alignment","minX","minY","maxX","maxY","prevRemainder","Left","Center","Right","trim","layoutCombedText","cellCount","cellWidth","cellHeight","chars","descender","computeCombedFontSize","cells","cellOffset","charOffset","char","charLength","layoutSinglelineText","AFRelationship","fileData","fileName","this","for","bytes","FileEmbedder","embedIntoContext","context","ref","mimeType","description","creationDate","modificationDate","afRelationship","embeddedFileStream","flateStream","Type","Subtype","Params","Size","CreationDate","fromDate","ModDate","embeddedFileStreamRef","register","fileSpecDict","obj","F","UF","fromText","EF","Desc","assign","script","scriptName","JavaScriptEmbedder","jsActionDict","JS","className","methodName","msg","Error","expected","actual","constructor","encoding","stream","contructor","value","targetIndex","Count","operation","index","max","fieldName","pos","column","offset","details","expectedByte","actualByte","PDFParsingError","byte","keyword","major","minor","String","toString","bc","sizeInBytes","copyBytesInto","buffer","initialOffset","CharCodes","Percent","P","D","Dash","Period","Newline","forVersion","PDFHeader","numberValue","stringValue","clone","PDFNumber","PDFObject","array","object","insert","splice","indexOf","remove","set","lookupMaybe","types","lookup","asRectangle","lowerLeftX","lowerLeftY","asArray","slice","PDFArray","withContext","arrayString","LeftSquareBracket","Space","RightSquareBracket","scalePDFNumbers","el","factor","ENFORCER","enforcer","asBoolean","u","True","PDFBool","False","IsDelimiter","Uint8Array","LeftParen","RightParen","LessThan","GreaterThan","LeftCurly","RightCurly","ForwardSlash","IsWhitespace","Null","Tab","FormFeed","CarriageReturn","IsIrregular","Hash","pool","charCode","encodedName","character","code","ExclamationPoint","Tilde","asBytes","hex","escaped","pushByte","nextChar","Zero","Nine","parseInt","decodeText","fromCharCode","from","asString","decodedValue","replace","_","decodeName","instance","PDFName","Length","FlateDecode","Resources","Font","XObject","ExtGState","Contents","Parent","MediaBox","Page","Annots","TrimBox","ArtBox","BleedBox","CropBox","Rotate","Title","Author","Subject","Creator","Keywords","Producer","asNull","n","dict","keys","values","entries","preservePDFNull","delete","asMap","uniqueKey","existingKeys","addRandomSuffix","PDFDict","dictString","fromMapWithContext","_context","getContentsString","getContents","getContentsSize","updateDict","contentsSize","streamString","contents","asUint8Array","PDFRawStream","objectNumber","generationNumber","PDFRef","arg","PDFOperator","PDFOperatorNames","encode","computeContents","unencodedContents","getUnencodedContents","contentsCache","populatedBy","access","PDFContentStream","getUnencodedContentsSize","byAscendingObjectNumber","largestObjectNumber","header","trailerInfo","indirectObjects","rng","withSeed","nextRef","getObjectRef","pdfObject","enumerateIndirectObjects","sort","literal","Object","Filter","contentStream","formXObject","BBox","Matrix","getPushGraphicsStateContentStream","pushGraphicsStateContentStreamRef","op","getPopGraphicsStateContentStream","popGraphicsStateContentStreamRef","prefix","suffixLength","floor","nextInt","create","PDFContext","autoNormalizeCTM","normalized","PDFPageLeaf","dictOrRef","getInheritableAttribute","arrayOrRef","numberOrRef","attribute","ascend","node","setParent","parentRef","addContentStream","contentStreamRef","normalizedEntries","wrapContentStreams","startStream","endStream","addAnnot","annotRef","removeAnnot","setFontDictionary","fontDictRef","newFontDictionaryKey","newFontDictionary","setXObject","xObjectRef","newXObjectKey","newXObject","setExtGState","extGStateRef","newExtGStateKey","newExtGState","visitor","normalize","contentsRef","InheritableEntries","withContextAndParent","parent","src","dest","traversedObjects","copy","copyPDFPage","copyPDFDict","copyPDFArray","copyPDFStream","copyPDFIndirectObject","originalPage","clonedPage","originalDict","clonedDict","originalArray","clonedArray","originalStream","clonedStream","newRef","dereferencedValue","cloned","PDFObjectCopier","firstEntry","subsections","chunkIdx","chunkLength","addEntry","append","deleted","addDeletedEntry","nextFreeObjectNumber","section","rangeIdx","rangeLen","range","entryIdx","entryLen","entry","subsection","subsectionLength","copySubsectionsIntoBuffer","firstObjectNumber","rangeLength","copyEntriesIntoBuffer","entryOffset","entryGen","currEntry","chunk","prevEntry","PDFCrossRefSection","createEmpty","lastXRefOffset","E","O","forLastCrossRefSectionOffset","PDFTrailer","PDFTrailerDict","objects","offsets","computeObjectOffsets","offsetsString","computeOffsetsString","getObjectsCount","PDFObjectStream","withContextAndObjects","objectsPerTick","parsedObjects","shouldWaitForTick","serializeToBuffer","computeBufferSize","xref","trailerDict","trailer","o","j","computeIndirectObjectSize","createTrailerDict","Root","Encrypt","Info","ID","indirectObject","xrefOffset","forContext","PDFWriter","data","PDFInvalidObject","EntryType","computeIndex","computeEntryTuples","entryTuples","Deleted","Uncompressed","Compressed","objectStreamRef","computeMaxEntryByteWidths","entryTuplesCache","widths","first","second","third","firstSize","secondSize","thirdSize","maxByteWidthsCache","indexCache","invalidate","addUncompressedEntry","addCompressedEntry","PDFCrossRefStream","byteWidths","entriesLen","firstBytes","secondBytes","thirdBytes","encodeStreams","objectsPerStream","xrefStream","uncompressedObjects","compressedObjects","objectStreamRefs","objectStream","xrefStreamRef","PDFStreamWriter","fontName","customName","ZapfDingbats","Symbol","WinAnsi","load","FontName","glyphs","encodeTextAsGlyphs","hexCodes","PDFHexString","totalWidth","left","right","kernAmount","getXAxisKerningForPair","widthOfGlyph","heightOfFontAtSize","Ascender","Descender","FontBBox","sizeOfFontAtHeight","fontDict","BaseFont","Encoding","glyphName","getWidthOfGlyph","codePoints","codePoint","encodeUnicodeCodePoint","StandardFontEmbedder","fillCmapTemplate","bfChars","cmapHexFormat","cmapHexString","cmapCodePointFormat","hs","ls","fontData","fontFeatures","allGlyphsInFontSortedById","characterSet","glyphForCodePoint","g","id","unitsPerEm","postscriptName","baseFontName","glyphCache","fontkit","CustomFontEmbedder","layout","advanceWidth","ascent","descent","bbox","embedFontDict","embedCIDFontDict","cidFontDictRef","unicodeCMapRef","embedUnicodeCmap","DescendantFonts","ToUnicode","isCFF","cff","embedFontDescriptor","fontDescriptorRef","cidFontDict","CIDToGIDMap","CIDSystemInfo","Registry","PDFString","Ordering","Supplement","FontDescriptor","W","computeWidths","embedFontStream","fontStreamRef","italicAngle","capHeight","xHeight","fontDescriptor","Flags","familyClass","sFamilyClass","fixedPitch","post","isFixedPitch","serif","symbolic","italic","head","macStyle","flags","flipBit","bit","nonsymbolic","allCap","smallCap","forceBold","ItalicAngle","Ascent","Descent","CapHeight","XHeight","StemV","serializeFont","fontStream","cmap","glyphId","glyph","unicode","createCmap","bind","cmapStream","currSection","currGlyph","prevGlyph","currGlyphId","prevGlyphId","customFontName","subset","createSubset","glyphIdMap","CustomFontSubsetEmbedder","subsetGlyphId","includeGlyph","Promise","resolve","reject","parts","encodeStream","on","err","ColorSpace","MARKERS","ChannelToColorSpace","1","DeviceGray","3","DeviceRGB","4","DeviceCMYK","imageData","bitsPerComponent","colorSpace","dataView","DataView","getUint16","byteLength","marker","getUint8","channelByte","channelName","JpegEmbedder","xObject","BitsPerComponent","Width","Height","Decode","png","image","PngEmbedder","SMask","embedAlphaChannel","rgbChannel","alphaChannel","getByte","b0","b1","getInt32","getBytes","forceClamped","strEnd","subarray","Uint8ClampedArray","peekByte","peekedByte","peekBytes","skip","reset","moveStart","makeSubStream","Stream","decode","emptyBuffer","maybeMinBufferLength","bufferLength","eof","minBufferLength","readBlock","ensureBuffer","bufEnd","requested","buffer2","isSpace","ch","maybeLength","firstDigit","maxDecodeLength","ii","digit","codeLenCodeMap","Int32Array","lengthDecode","distDecode","fixedLitCodeTab","fixedDistCodeTab","cmf","flg","codeSize","codeBuf","str","hdr","getBits","litCodeTable","distCodeTable","numLitCodes","numDistCodes","numCodeLenCodes","codeLenCodeLengths","codeLenCodeTab","generateHuffmanTable","codes","codeLengths","bitsLength","bitsOffset","what","getCode","repeatLength","limit","code1","code2","dist","k","blockLen","check","bits","table","maxLen","console","log","codeLen","codeVal","lengths","val","earlyChange","cachedData","bitsCached","maxLzwDictionarySize","lzwState","codeLength","nextCode","dictionaryValues","dictionaryLengths","Uint16Array","dictionaryPrevCodes","currentSequence","currentSequenceLength","estimatedDecodedSize","blockSize","prevCode","decodedLength","currentBufferLength","readBits","hasPrev","repeatHeader","source","decodeStream","EarlyChange","decodePDFRawStream","DecodeParms","page","boundingBox","transformationMatrix","bb","mediaBox","bottom","top","fullPageBoundingBox","boundingBoxAdjustedMatrix","PDFPageEmbedder","decodedContents","decodeContents","FormType","newline","content","NonFullScreenPageMode","ReadingDirection","PrintScaling","Duplex","asEnum","rawValue","enumType","lookupBool","returnObj","lookupName","HideToolbar","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","Direction","PickTrayByPDFSize","PrintPageRange","NumCopies","getHideToolbar","getHideMenubar","getHideWindowUI","getFitWindow","getCenterWindow","getDisplayDocTitle","getNonFullScreenPageMode","mode","UseNone","getReadingDirection","direction","L2R","getPrintScaling","scaling","AppDefault","getDuplex","duplex","getPickTrayByPDFSize","getPrintPageRange","pageRanges","getNumCopies","setHideToolbar","hideToolbar","setHideMenubar","hideMenubar","setHideWindowUI","hideWindowUI","setFitWindow","fitWindow","setCenterWindow","centerWindow","setDisplayDocTitle","displayTitle","setNonFullScreenPageMode","nonFullScreenPageMode","setReadingDirection","readingDirection","setPrintScaling","printScaling","setDuplex","dup","setPickTrayByPDFSize","pickTrayByPDFSize","setPrintPageRange","printPageRange","flatRange","setNumCopies","numCopies","Number","MAX_VALUE","fromDict","ViewerPreferences","tfRegex","Ff","valueOrRef","Kids","DA","da","setKids","kids","getParent","PDFAcroField","getFullyQualifiedName","getPartialName","setPartialName","partialName","setDefaultAppearance","appearance","getDefaultAppearance","setFontSize","daMatch","match","daStart","daEnd","modifiedDa","getFlags","setFlags","hasFlag","flag","setFlag","clearFlag","setFlagTo","enable","getWidth","setWidth","BorderStyle","Rect","AP","getRectangle","setRectangle","rect","getAppearanceState","AS","setAppearanceState","setAppearances","appearances","ensureAP","getNormalAppearance","N","setNormalAppearance","setRolloverAppearance","setDownAppearance","removeRolloverAppearance","removeDownAppearance","getAppearances","normal","rollover","down","PDFAnnotation","R","BC","BG","CA","RC","AC","getRotation","getBorderColor","components","component","getBackgroundColor","getCaptions","setRotation","setBorderColor","setBackgroundColor","setCaptions","captions","AppearanceCharacteristics","MK","BS","setP","getAppearanceCharacteristics","getOrCreateAppearanceCharacteristics","ac","getBorderStyle","getOrCreateBorderStyle","bs","getOnValue","PDFWidgetAnnotation","FT","nameOrRef","getWidgets","kidDicts","widgets","addWidget","removeWidget","PDFAcroTerminal","Opt","setOpt","opt","getExportValues","removeExportValue","normalizeExportValues","exportValues","widget","exportVal","addOpt","useExistingOptIdx","existingIdx","optText","addWidgetWithOpt","optIdx","apStateValue","setValue","getValue","PDFAcroCheckBox","AcroFieldFlags","AcroButtonFlags","AcroTextFlags","AcroChoiceFlags","bitIndex","setValues","Combo","Edit","valuesAreValid","MultiSelect","updateSelectedIndices","getOptions","find","display","indices","findIndex","getValues","setOptions","newOpt","res","item","PDFAcroComboBox","addField","field","PDFAcroNonTerminal","PDFAcroSignature","MaxLen","setMaxLength","maxLength","removeMaxLength","getMaxLength","setQuadding","quadding","getQuadding","removeValue","PDFAcroText","PDFAcroPushButton","PushButton","getOnValues","onValues","onValue","PDFAcroRadioButton","Radio","PDFAcroListBox","createPDFAcroFields","createPDFAcroField","isNonTerminalAcroField","createPDFAcroTerminal","kid","ftNameOrRef","createPDFAcroButton","createPDFAcroChoice","ffNumberOrRef","ffNumber","flagIsSet","startNode","Fields","fields","getFields","getAllFields","allFields","pushFields","fieldModel","removeField","PDFAcroForm","Pages","AcroForm","getAcroForm","getOrCreateAcroForm","acroForm","acroFormRef","getViewerPreferences","getOrCreateViewerPreferences","viewerPrefs","viewerPrefsRef","insertLeafNode","leafRef","pagesRef","removeLeafNode","withContextAndPages","pages","PDFCatalog","pushTreeNode","treeRef","pushLeafNode","insertLeafKid","leafsRemainingUntilTarget","kidRef","PDFPageTree","prune","removeKid","traverse","kidIdx","newCount","IsDigit","One","Two","Three","Four","Five","Six","Seven","Eight","IsNumericPrefix","Plus","Minus","IsNumeric","capNumbers","parseRawInt","done","peek","next","isFinite","position","parseRawNumber","MAX_SAFE_INTEGER","warn","skipWhitespace","skipLine","skipComment","skipWhitespaceAndComments","matchKeyword","assertNext","peekAhead","steps","peekAt","ByteStream","fromPDFRawStream","rawStream","endstream","endobj","startxref","true","false","null","streamEOF1","streamEOF2","streamEOF3","streamEOF4","EOF1endstream","EOF2endstream","EOF3endstream","byteStream","parseObject","parseDictOrStream","parseHexString","parseString","parseName","parseArray","parseNumberOrRef","firstNum","lookaheadStart","secondNum","nestingLvl","isEscaped","BackSlash","pdfArray","element","parseDict","startPos","findEndOfStreamFallback","forBytes","PDFObjectParser","forByteStream","alreadyParsed","firstOffset","objectCount","parseIntoContext","offsetsAndObjectNumbers","parseOffsetsAndObjectNumbers","forStream","PDFObjectStreamParser","Index","parseEntries","typeFieldWidth","offsetFieldWidth","genFieldWidth","subsectionIdx","subsectionLen","objIdx","inObjectStream","PDFXRefStreamParser","pdfBytes","throwOnInvalidObject","parseDocument","parseHeader","parseDocumentSection","prevOffset","maybeRecoverRoot","isValidCatalog","skipBinaryHeaderComment","parseIndirectObjectHeader","matchIndirectObjectHeader","parseIndirectObject","tryToParseInvalidIndirectObject","failed","parseIndirectObjects","skipJibberish","maybeParseCrossRefSection","firstInt","secondInt","maybeParseTrailerDict","maybeParseTrailer","forBytesWithOptions","PDFParser","AnnotationFlags","hexLength","hexOffset","bytesOffset","decodeDate","date","_buffer","_offset","octal","Backspace","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds"],"sourceRoot":""}